* 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


Reply via email to