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


Reply via email to