* lib/obstack.c (_obstack_begin, _obstack_begin_1): * lib/obstack.in.h (struct obstack, obstack_init, obstack_begin) (obstack_specify_allocation) (obstack_specify_allocation_with_arg, obstack_chunkfun): Use _OBSTACK_CHUNK_SIZE_T instead of size_t in places where glibc uses unsigned long rather than size_t. This makes no difference with Gnulib, but should help allay any concerns that merging Gnulib with glibc might change glibc’s ABI on obsolescent glibc platforms where size_t is unsigned int. --- ChangeLog | 11 +++++++++++ lib/obstack.c | 4 ++-- lib/obstack.in.h | 26 +++++++++++++++++--------- 3 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 771309c182..403140cdf8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2025-05-05 Paul Eggert <egg...@cs.ucla.edu> + obstack: size_t → _OBSTACK_CHUNK_SIZE_T + * lib/obstack.c (_obstack_begin, _obstack_begin_1): + * lib/obstack.in.h (struct obstack, obstack_init, obstack_begin) + (obstack_specify_allocation) + (obstack_specify_allocation_with_arg, obstack_chunkfun): + Use _OBSTACK_CHUNK_SIZE_T instead of size_t in places where + glibc uses unsigned long rather than size_t. This makes + no difference with Gnulib, but should help allay any concerns + that merging Gnulib with glibc might change glibc’s ABI + on obsolescent glibc platforms where size_t is unsigned int. + obstack: rename to _OBSTACK_CHUNK_SIZE_T * lib/obstack.in.h (_OBSTACK_CHUNK_SIZE_T): Rename from _CHUNK_SIZE_T, for namespace prefix consistency. diff --git a/lib/obstack.c b/lib/obstack.c index cd762e08f2..b5cf0d514b 100644 --- a/lib/obstack.c +++ b/lib/obstack.c @@ -139,7 +139,7 @@ _obstack_begin_worker (struct obstack *h, int _obstack_begin (struct obstack *h, _OBSTACK_INDEX_T size, _OBSTACK_INDEX_T alignment, - void *(*chunkfun) (size_t), + void *(*chunkfun) (_OBSTACK_CHUNK_SIZE_T), void (*freefun) (void *)) { h->chunkfun.plain = chunkfun; @@ -151,7 +151,7 @@ _obstack_begin (struct obstack *h, int _obstack_begin_1 (struct obstack *h, _OBSTACK_INDEX_T size, _OBSTACK_INDEX_T alignment, - void *(*chunkfun) (void *, size_t), + void *(*chunkfun) (void *, _OBSTACK_CHUNK_SIZE_T), void (*freefun) (void *, void *), void *arg) { diff --git a/lib/obstack.in.h b/lib/obstack.in.h index 4f79f40e94..0f2677dba4 100644 --- a/lib/obstack.in.h +++ b/lib/obstack.in.h @@ -210,8 +210,8 @@ struct obstack /* control current object in current chunk */ /* These prototypes vary based on 'use_extra_arg'. */ union { - void *(*plain) (size_t); - void *(*extra) (void *, size_t); + void *(*plain) (_OBSTACK_CHUNK_SIZE_T); + void *(*extra) (void *, _OBSTACK_CHUNK_SIZE_T); } chunkfun; union { @@ -244,10 +244,11 @@ extern void _obstack_newchunk (struct obstack *, _OBSTACK_INDEX_T); extern void _obstack_free (struct obstack *, void *); extern int _obstack_begin (struct obstack *, _OBSTACK_INDEX_T, _OBSTACK_INDEX_T, - void *(*) (size_t), void (*) (void *)); + void *(*) (_OBSTACK_CHUNK_SIZE_T), + void (*) (void *)); extern int _obstack_begin_1 (struct obstack *, _OBSTACK_INDEX_T, _OBSTACK_INDEX_T, - void *(*) (void *, size_t), + void *(*) (void *, _OBSTACK_CHUNK_SIZE_T), void (*) (void *, void *), void *); extern _OBSTACK_INDEX_T _obstack_memory_used (struct obstack *) __attribute_pure__; @@ -283,26 +284,33 @@ extern int obstack_exit_failure; /* To prevent prototype warnings provide complete argument list. */ #define obstack_init(h) \ _obstack_begin ((h), 0, 0, \ - _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \ + _OBSTACK_CAST (void *(*) (_OBSTACK_CHUNK_SIZE_T), \ + obstack_chunk_alloc), \ _OBSTACK_CAST (void (*) (void *), obstack_chunk_free)) #define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, \ - _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \ + _OBSTACK_CAST (void *(*) (_OBSTACK_CHUNK_SIZE_T), \ + obstack_chunk_alloc), \ _OBSTACK_CAST (void (*) (void *), obstack_chunk_free)) #define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ _obstack_begin ((h), (size), (alignment), \ - _OBSTACK_CAST (void *(*) (size_t), chunkfun), \ + _OBSTACK_CAST (void *(*) (_OBSTACK_CHUNK_SIZE_T), \ + chunkfun), \ _OBSTACK_CAST (void (*) (void *), freefun)) #define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ - _OBSTACK_CAST (void *(*) (void *, size_t), chunkfun), \ + _OBSTACK_CAST (void *(*) (void *, _OBSTACK_CHUNK_SIZE_T), \ + chunkfun), \ _OBSTACK_CAST (void (*) (void *, void *), freefun), arg) #define obstack_chunkfun(h, newchunkfun) \ - ((void) ((h)->chunkfun.extra = (void *(*) (void *, size_t)) (newchunkfun))) + ((void) \ + ((h)->chunkfun.extra = _OBSTACK_CAST (void *(*) (void *, \ + _OBSTACK_CHUNK_SIZE_T), \ + newchunkfun))) #define obstack_freefun(h, newfreefun) \ ((void) ((h)->freefun.extra = (void *(*) (void *, void *)) (newfreefun))) -- 2.49.0