]> git.ipfire.org Git - thirdparty/gnulib.git/commitdiff
obstack: use int where glibc does
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 5 May 2025 21:02:14 +0000 (14:02 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 5 May 2025 21:16:20 +0000 (14:16 -0700)
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
lib/obstack.c
lib/obstack.in.h

index cc7e7e325603ce2776a174757aa46baa1b8bb605..ed1c57575b52b7f93e5d9a8821632a5cac274695 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2025-05-05  Paul Eggert  <eggert@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,
index 92e2a1206f94eff6eab9664036fe257da38a5c0e..cd762e08f2d792422009d787fc9163ceaf8e4d66 100644 (file)
@@ -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)
     {
index aacd29edb4d9fc83e838d6ae8a3dd118c115331a..125b1b801b68576856996c7663502bd74f05f0ca 100644 (file)
    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); })