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. --- ChangeLog | 11 +++++++++++ lib/obstack.c | 12 ++++++------ lib/obstack.in.h | 22 ++++++++++++---------- 3 files changed, 29 insertions(+), 16 deletions(-)
diff --git a/ChangeLog b/ChangeLog index cc7e7e3256..ed1c57575b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2025-05-05 Paul Eggert <egg...@cs.ucla.edu> + 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); }) -- 2.49.0