From: Paul Eggert Date: Mon, 5 May 2025 21:02:14 +0000 (-0700) Subject: obstack: use int where glibc does X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aedff5e6d6e1e4589167c5c03eaa7e7fb581bb49;p=thirdparty%2Fgnulib.git obstack: use int where glibc does Make it easier to merge with glibc, by using int where the glibc API uses int, when compiling for glibc. This does not affect Gnulib behavior. * lib/obstack.in.h (_OBSTACK_INDEX_T): New macro. * lib/obstack.in.h (struct obstack): * lib/obstack.c (_obstack_begin_worker, obstack_begin) (_obstack_begin_1, _obstack_newchunk, _obstack_memory_used): Use _OBSTACK_INDEX_T, not _OBSTACK_SIZE_T, for API components where glibc uses int. --- diff --git a/ChangeLog b/ChangeLog index cc7e7e3256..ed1c57575b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2025-05-05 Paul Eggert + obstack: use int where glibc does + Make it easier to merge with glibc, by using int where + the glibc API uses int, when compiling for glibc. + This does not affect Gnulib behavior. + * lib/obstack.in.h (_OBSTACK_INDEX_T): New macro. + * lib/obstack.in.h (struct obstack): + * lib/obstack.c (_obstack_begin_worker, obstack_begin) + (_obstack_begin_1, _obstack_newchunk, _obstack_memory_used): + Use _OBSTACK_INDEX_T, not _OBSTACK_SIZE_T, for API components + where glibc uses int. + obstack: use presence of uintptr_t The code depends on the presence of uintptr_t, not on whether ptrdiff_t is narrower than a pointer, diff --git a/lib/obstack.c b/lib/obstack.c index 92e2a1206f..cd762e08f2 100644 --- a/lib/obstack.c +++ b/lib/obstack.c @@ -97,7 +97,7 @@ call_freefun (struct obstack *h, void *old_chunk) static int _obstack_begin_worker (struct obstack *h, - _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment) + _OBSTACK_INDEX_T size, _OBSTACK_INDEX_T alignment) { struct _obstack_chunk *chunk; /* points to new chunk */ @@ -138,7 +138,7 @@ _obstack_begin_worker (struct obstack *h, int _obstack_begin (struct obstack *h, - _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment, + _OBSTACK_INDEX_T size, _OBSTACK_INDEX_T alignment, void *(*chunkfun) (size_t), void (*freefun) (void *)) { @@ -150,7 +150,7 @@ _obstack_begin (struct obstack *h, int _obstack_begin_1 (struct obstack *h, - _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment, + _OBSTACK_INDEX_T size, _OBSTACK_INDEX_T alignment, void *(*chunkfun) (void *, size_t), void (*freefun) (void *, void *), void *arg) @@ -170,7 +170,7 @@ _obstack_begin_1 (struct obstack *h, to the beginning of the new one. */ void -_obstack_newchunk (struct obstack *h, _OBSTACK_SIZE_T length) +_obstack_newchunk (struct obstack *h, _OBSTACK_INDEX_T length) { struct _obstack_chunk *old_chunk = h->chunk; struct _obstack_chunk *new_chunk = NULL; @@ -280,11 +280,11 @@ _obstack_free (struct obstack *h, void *obj) abort (); } -_OBSTACK_SIZE_T +_OBSTACK_INDEX_T _obstack_memory_used (struct obstack *h) { struct _obstack_chunk *lp; - _OBSTACK_SIZE_T nbytes = 0; + _OBSTACK_INDEX_T nbytes = 0; for (lp = h->chunk; lp != NULL; lp = lp->prev) { diff --git a/lib/obstack.in.h b/lib/obstack.in.h index aacd29edb4..125b1b801b 100644 --- a/lib/obstack.in.h +++ b/lib/obstack.in.h @@ -142,12 +142,14 @@ is different from the one in GNU libc. */ #if defined __GL_GNULIB_HEADER /* In Gnulib, we use sane types, especially for 64-bit hosts. */ +# define _OBSTACK_INDEX_T size_t # define _OBSTACK_SIZE_T size_t # define _CHUNK_SIZE_T size_t # define _OBSTACK_CAST(type, expr) (expr) # define _OBSTACK_CHUNK_CONTENTS_SIZE FLEXIBLE_ARRAY_MEMBER #else -/* glibc usage. */ +/* For backward compatibility, glibc limits object sizes to int range. */ +# define _OBSTACK_INDEX_T int # define _OBSTACK_SIZE_T unsigned int # define _CHUNK_SIZE_T unsigned long # define _OBSTACK_CAST(type, expr) ((type) (expr)) @@ -203,7 +205,7 @@ struct obstack /* control current object in current chunk */ _OBSTACK_SIZE_T i; void *p; } temp; /* Temporary for some macros. */ - _OBSTACK_SIZE_T alignment_mask; /* Mask of alignment for each object. */ + _OBSTACK_INDEX_T alignment_mask; /* Mask of alignment for each object. */ /* These prototypes vary based on 'use_extra_arg'. */ union @@ -238,16 +240,16 @@ struct obstack /* control current object in current chunk */ # define _obstack_memory_used rpl_obstack_memory_used # define _obstack_allocated_p rpl_obstack_allocated_p #endif -extern void _obstack_newchunk (struct obstack *, _OBSTACK_SIZE_T); +extern void _obstack_newchunk (struct obstack *, _OBSTACK_INDEX_T); extern void _obstack_free (struct obstack *, void *); extern int _obstack_begin (struct obstack *, - _OBSTACK_SIZE_T, _OBSTACK_SIZE_T, + _OBSTACK_INDEX_T, _OBSTACK_INDEX_T, void *(*) (size_t), void (*) (void *)); extern int _obstack_begin_1 (struct obstack *, - _OBSTACK_SIZE_T, _OBSTACK_SIZE_T, + _OBSTACK_INDEX_T, _OBSTACK_INDEX_T, void *(*) (void *, size_t), void (*) (void *, void *), void *); -extern _OBSTACK_SIZE_T _obstack_memory_used (struct obstack *) +extern _OBSTACK_INDEX_T _obstack_memory_used (struct obstack *) __attribute_pure__; @@ -337,7 +339,7 @@ extern int obstack_exit_failure; # define obstack_make_room(OBSTACK, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ - _OBSTACK_SIZE_T __len = (length); \ + _OBSTACK_INDEX_T __len = length; \ if (obstack_room (__o) < __len) \ _obstack_newchunk (__o, __len); \ (void) 0; }) @@ -353,7 +355,7 @@ extern int obstack_exit_failure; # define obstack_grow(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ - _OBSTACK_SIZE_T __len = (length); \ + _OBSTACK_INDEX_T __len = length; \ if (obstack_room (__o) < __len) \ _obstack_newchunk (__o, __len); \ memcpy (__o->next_free, where, __len); \ @@ -363,7 +365,7 @@ extern int obstack_exit_failure; # define obstack_grow0(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ - _OBSTACK_SIZE_T __len = (length); \ + _OBSTACK_INDEX_T __len = length; \ if (obstack_room (__o) <= __len) \ _obstack_newchunk (__o, __len + 1); \ memcpy (__o->next_free, where, __len); \ @@ -415,7 +417,7 @@ extern int obstack_exit_failure; # define obstack_blank(OBSTACK, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ - _OBSTACK_SIZE_T __len = (length); \ + _OBSTACK_INDEX_T __len = length; \ if (obstack_room (__o) < __len) \ _obstack_newchunk (__o, __len); \ obstack_blank_fast (__o, __len); })