public inbox for libc-hacker@sourceware.org
 help / color / mirror / Atom feed
* Import obstack.* from gnulib
@ 2004-01-24  8:46 Andreas Jaeger
  2004-01-24 20:53 ` Roland McGrath
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Andreas Jaeger @ 2004-01-24  8:46 UTC (permalink / raw)
  To: Glibc hackers


[-- Attachment #1.1: Type: text/plain, Size: 344 bytes --]


I've imported the current obstack versions into glibc.  The changes
should not effect the code but compilation:
- K&R support removed
- casts as lvalues removed

Ok to commit?

I'm appending the patch for reference,
Andreas

2004-01-24  Andreas Jaeger  <aj@suse.de>

	* malloc/obstack.h: Import gnulib version.
	* malloc/obstack.c: Likewise.


[-- Attachment #1.2: libc-diff --]
[-- Type: text/plain, Size: 28383 bytes --]

============================================================
Index: malloc/obstack.c
--- malloc/obstack.c	1 Nov 2002 20:43:32 -0000	1.24
+++ malloc/obstack.c	24 Jan 2004 08:44:44 -0000
@@ -1,5 +1,6 @@
 /* obstack.c - subroutines used implicitly by object stack macros
-   Copyright (C) 1988-1994, 1996-2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,
+   1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.  Its master source is NOT part of
    the C library, however.  The master source lives in /gd/gnu/lib.
 
@@ -23,9 +24,9 @@
 #endif
 
 #ifdef _LIBC
-#include <obstack.h>
+# include <obstack.h>
 #else
-#include "obstack.h"
+# include "obstack.h"
 #endif
 
 /* NOTE BEFORE MODIFYING THIS FILE: This version number must be
@@ -57,12 +58,6 @@
 #ifndef ELIDE_CODE
 
 
-# if defined __STDC__ && __STDC__
-#  define POINTER void *
-# else
-#  define POINTER char *
-# endif
-
 /* Determine default alignment.  */
 struct fooalign {char x; double d;};
 # define DEFAULT_ALIGNMENT  \
@@ -88,22 +83,17 @@ union fooround {long x; double d;};
    abort gracefully or use longjump - but shouldn't return.  This
    variable by default points to the internal function
    `print_and_abort'.  */
-# if defined __STDC__ && __STDC__
 static void print_and_abort (void);
 void (*obstack_alloc_failed_handler) (void) = print_and_abort;
-# else
-static void print_and_abort ();
-void (*obstack_alloc_failed_handler) () = print_and_abort;
-# endif
 
 /* Exit value used when `print_and_abort' is used.  */
-# if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-# ifndef EXIT_FAILURE
-#  define EXIT_FAILURE 1
-# endif
+# include <stdlib.h>
+# ifdef _LIBC
 int obstack_exit_failure = EXIT_FAILURE;
+# else
+#  include "exitfail.h"
+#  define obstack_exit_failure exit_failure
+# endif
 
 /* The non-GNU-C macros copy the obstack into this global variable
    to avoid multiple evaluation.  */
@@ -116,33 +106,18 @@ struct obstack *_obstack;
    For free, do not use ?:, since some compilers, like the MIPS compilers,
    do not allow (expr) ? void : void.  */
 
-# if defined __STDC__ && __STDC__
-#  define CALL_CHUNKFUN(h, size) \
+# define CALL_CHUNKFUN(h, size) \
   (((h) -> use_extra_arg) \
    ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
    : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
 
-#  define CALL_FREEFUN(h, old_chunk) \
+# define CALL_FREEFUN(h, old_chunk) \
   do { \
     if ((h) -> use_extra_arg) \
       (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
     else \
       (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
   } while (0)
-# else
-#  define CALL_CHUNKFUN(h, size) \
-  (((h) -> use_extra_arg) \
-   ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
-   : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size)))
-
-#  define CALL_FREEFUN(h, old_chunk) \
-  do { \
-    if ((h) -> use_extra_arg) \
-      (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
-    else \
-      (*(void (*) ()) (h)->freefun) ((old_chunk)); \
-  } while (0)
-# endif
 
 \f
 /* Initialize an obstack H for use.  Specify chunk size SIZE (0 means default).
@@ -154,17 +129,10 @@ struct obstack *_obstack;
    allocation fails.  */
 
 int
-_obstack_begin (h, size, alignment, chunkfun, freefun)
-     struct obstack *h;
-     int size;
-     int alignment;
-# if defined __STDC__ && __STDC__
-     POINTER (*chunkfun) (long);
-     void (*freefun) (void *);
-# else
-     POINTER (*chunkfun) ();
-     void (*freefun) ();
-# endif
+_obstack_begin (struct obstack *h,
+		int size, int alignment,
+		void *(*chunkfun) (long),
+		void (*freefun) (void *))
 {
   register struct _obstack_chunk *chunk; /* points to new chunk */
 
@@ -187,13 +155,8 @@ _obstack_begin (h, size, alignment, chun
       size = 4096 - extra;
     }
 
-# if defined __STDC__ && __STDC__
   h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
   h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
-# else
-  h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
-  h->freefun = freefun;
-# endif
   h->chunk_size = size;
   h->alignment_mask = alignment - 1;
   h->use_extra_arg = 0;
@@ -212,18 +175,10 @@ _obstack_begin (h, size, alignment, chun
 }
 
 int
-_obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
-     struct obstack *h;
-     int size;
-     int alignment;
-# if defined __STDC__ && __STDC__
-     POINTER (*chunkfun) (POINTER, long);
-     void (*freefun) (POINTER, POINTER);
-# else
-     POINTER (*chunkfun) ();
-     void (*freefun) ();
-# endif
-     POINTER arg;
+_obstack_begin_1 (struct obstack *h, int size, int alignment,
+		  void *(*chunkfun) (void *, long),
+		  void (*freefun) (void *, void *),
+		  void *arg)
 {
   register struct _obstack_chunk *chunk; /* points to new chunk */
 
@@ -246,13 +201,8 @@ _obstack_begin_1 (h, size, alignment, ch
       size = 4096 - extra;
     }
 
-# if defined __STDC__ && __STDC__
   h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
   h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
-# else
-  h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
-  h->freefun = freefun;
-# endif
   h->chunk_size = size;
   h->alignment_mask = alignment - 1;
   h->extra_arg = arg;
@@ -278,9 +228,7 @@ _obstack_begin_1 (h, size, alignment, ch
    to the beginning of the new one.  */
 
 void
-_obstack_newchunk (h, length)
-     struct obstack *h;
-     int length;
+_obstack_newchunk (struct obstack *h, int length)
 {
   register struct _obstack_chunk *old_chunk = h->chunk;
   register struct _obstack_chunk *new_chunk;
@@ -342,24 +290,20 @@ _obstack_newchunk (h, length)
   /* The new chunk certainly contains no empty object yet.  */
   h->maybe_empty_object = 0;
 }
-#ifdef _LIBC
+# ifdef _LIBC
 libc_hidden_def (_obstack_newchunk)
-#endif
+# endif
 
 /* Return nonzero if object OBJ has been allocated from obstack H.
    This is here for debugging.
    If you use it in a program, you are probably losing.  */
 
-# if defined __STDC__ && __STDC__
 /* Suppress -Wmissing-prototypes warning.  We don't want to declare this in
    obstack.h because it is just for debugging.  */
-int _obstack_allocated_p (struct obstack *h, POINTER obj);
-# endif
+int _obstack_allocated_p (struct obstack *h, void *obj);
 
 int
-_obstack_allocated_p (h, obj)
-     struct obstack *h;
-     POINTER obj;
+_obstack_allocated_p (struct obstack *h, void *obj)
 {
   register struct _obstack_chunk *lp;	/* below addr of any objects in this chunk */
   register struct _obstack_chunk *plp;	/* point to previous chunk if any */
@@ -368,7 +312,7 @@ _obstack_allocated_p (h, obj)
   /* We use >= rather than > since the object cannot be exactly at
      the beginning of the chunk but might be an empty object exactly
      at the end of an adjacent chunk.  */
-  while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj))
+  while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj))
     {
       plp = lp->prev;
       lp = plp;
@@ -381,13 +325,8 @@ _obstack_allocated_p (h, obj)
 
 # undef obstack_free
 
-/* This function has two names with identical definitions.
-   This is the first one, called from non-ANSI code.  */
-
 void
-_obstack_free (h, obj)
-     struct obstack *h;
-     POINTER obj;
+obstack_free (struct obstack *h, void *obj)
 {
   register struct _obstack_chunk *lp;	/* below addr of any objects in this chunk */
   register struct _obstack_chunk *plp;	/* point to previous chunk if any */
@@ -396,7 +335,7 @@ _obstack_free (h, obj)
   /* We use >= because there cannot be an object at the beginning of a chunk.
      But there can be an empty object at that address
      at the end of another chunk.  */
-  while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj))
+  while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj))
     {
       plp = lp->prev;
       CALL_FREEFUN (h, lp);
@@ -416,48 +355,14 @@ _obstack_free (h, obj)
     abort ();
 }
 
-/* This function is used from ANSI code.  */
-
-#ifdef _LIBC
-strong_alias (_obstack_free, obstack_free)
-#else
-
-void
-obstack_free (h, obj)
-     struct obstack *h;
-     POINTER obj;
-{
-  register struct _obstack_chunk *lp;	/* below addr of any objects in this chunk */
-  register struct _obstack_chunk *plp;	/* point to previous chunk if any */
-
-  lp = h->chunk;
-  /* We use >= because there cannot be an object at the beginning of a chunk.
-     But there can be an empty object at that address
-     at the end of another chunk.  */
-  while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj))
-    {
-      plp = lp->prev;
-      CALL_FREEFUN (h, lp);
-      lp = plp;
-      /* If we switch chunks, we can't tell whether the new current
-	 chunk contains an empty object, so assume that it may.  */
-      h->maybe_empty_object = 1;
-    }
-  if (lp)
-    {
-      h->object_base = h->next_free = (char *) (obj);
-      h->chunk_limit = lp->limit;
-      h->chunk = lp;
-    }
-  else if (obj != 0)
-    /* obj is not in any of the chunks! */
-    abort ();
-}
-#endif
+# ifdef _LIBC
+/* Older versions of libc used a function _obstack_free intended to be
+   called by non-GCC compilers.  */
+strong_alias (obstack_free, _obstack_free)
+# endif
 \f
 int
-_obstack_memory_used (h)
-     struct obstack *h;
+_obstack_memory_used (struct obstack *h)
 {
   register struct _obstack_chunk* lp;
   register int nbytes = 0;
@@ -470,16 +375,15 @@ _obstack_memory_used (h)
 }
 \f
 /* Define the error handler.  */
+# ifdef _LIBC
+#  include <libintl.h>
+# else
+#  include "gettext.h"
+# endif
 # ifndef _
-#  if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
-#   include <libintl.h>
-#   ifndef _
-#    define _(Str) gettext (Str)
-#   endif
-#  else
-#   define _(Str) (Str)
-#  endif
+#  define _(msgid) gettext (msgid)
 # endif
+
 # ifdef _LIBC
 #  include <libio/iolibio.h>
 # endif
@@ -493,7 +397,7 @@ _obstack_memory_used (h)
 
 static void
 __attribute__ ((noreturn))
-print_and_abort ()
+print_and_abort (void)
 {
   /* Don't change any of these strings.  Yes, it would be possible to add
      the newline to the string and use fputs or so.  But this must not
@@ -508,127 +412,5 @@ print_and_abort ()
     fprintf (stderr, "%s\n", _("memory exhausted"));
   exit (obstack_exit_failure);
 }
-\f
-# if 0
-/* These are now turned off because the applications do not use it
-   and it uses bcopy via obstack_grow, which causes trouble on sysV.  */
-
-/* Now define the functional versions of the obstack macros.
-   Define them to simply use the corresponding macros to do the job.  */
-
-#  if defined __STDC__ && __STDC__
-/* These function definitions do not work with non-ANSI preprocessors;
-   they won't pass through the macro names in parentheses.  */
-
-/* The function names appear in parentheses in order to prevent
-   the macro-definitions of the names from being expanded there.  */
-
-POINTER (obstack_base) (obstack)
-     struct obstack *obstack;
-{
-  return obstack_base (obstack);
-}
-
-POINTER (obstack_next_free) (obstack)
-     struct obstack *obstack;
-{
-  return obstack_next_free (obstack);
-}
-
-int (obstack_object_size) (obstack)
-     struct obstack *obstack;
-{
-  return obstack_object_size (obstack);
-}
-
-int (obstack_room) (obstack)
-     struct obstack *obstack;
-{
-  return obstack_room (obstack);
-}
-
-int (obstack_make_room) (obstack, length)
-     struct obstack *obstack;
-     int length;
-{
-  return obstack_make_room (obstack, length);
-}
-
-void (obstack_grow) (obstack, data, length)
-     struct obstack *obstack;
-     const POINTER data;
-     int length;
-{
-  obstack_grow (obstack, data, length);
-}
-
-void (obstack_grow0) (obstack, data, length)
-     struct obstack *obstack;
-     const POINTER data;
-     int length;
-{
-  obstack_grow0 (obstack, data, length);
-}
-
-void (obstack_1grow) (obstack, character)
-     struct obstack *obstack;
-     int character;
-{
-  obstack_1grow (obstack, character);
-}
-
-void (obstack_blank) (obstack, length)
-     struct obstack *obstack;
-     int length;
-{
-  obstack_blank (obstack, length);
-}
-
-void (obstack_1grow_fast) (obstack, character)
-     struct obstack *obstack;
-     int character;
-{
-  obstack_1grow_fast (obstack, character);
-}
-
-void (obstack_blank_fast) (obstack, length)
-     struct obstack *obstack;
-     int length;
-{
-  obstack_blank_fast (obstack, length);
-}
-
-POINTER (obstack_finish) (obstack)
-     struct obstack *obstack;
-{
-  return obstack_finish (obstack);
-}
-
-POINTER (obstack_alloc) (obstack, length)
-     struct obstack *obstack;
-     int length;
-{
-  return obstack_alloc (obstack, length);
-}
-
-POINTER (obstack_copy) (obstack, address, length)
-     struct obstack *obstack;
-     const POINTER address;
-     int length;
-{
-  return obstack_copy (obstack, address, length);
-}
-
-POINTER (obstack_copy0) (obstack, address, length)
-     struct obstack *obstack;
-     const POINTER address;
-     int length;
-{
-  return obstack_copy0 (obstack, address, length);
-}
-
-#  endif /* __STDC__ */
-
-# endif /* 0 */
 
 #endif	/* !ELIDE_CODE */
============================================================
Index: malloc/obstack.h
--- malloc/obstack.h	4 Jan 2003 21:42:30 -0000	1.16
+++ malloc/obstack.h	24 Jan 2004 08:44:44 -0000
@@ -1,5 +1,5 @@
 /* obstack.h - object stack macros
-   Copyright (C) 1988,89,90,91,92,93,94,96,97,98,99 Free Software Foundation, Inc.
+   Copyright (C) 1988,89,90,91,92,93,94,96,97,98,99,2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.  Its master source is NOT part of
    the C library, however.  The master source lives in /gd/gnu/lib.
 
@@ -119,40 +119,22 @@ extern "C" {
 #endif
 
 #ifndef __INT_TO_PTR
-#if defined __STDC__ && __STDC__
-# define __INT_TO_PTR(P) ((void *) ((P) + (char *) 0))
-#else
 # define __INT_TO_PTR(P) ((P) + (char *) 0)
 #endif
-#endif
 
 /* We need the type of the resulting object.  If __PTRDIFF_TYPE__ is
    defined, as with GNU C, use that; that way we don't pollute the
-   namespace with <stddef.h>'s symbols.  Otherwise, if <stddef.h> is
-   available, include it and use ptrdiff_t.  In traditional C, long is
-   the best that we can do.  */
+   namespace with <stddef.h>'s symbols.  Otherwise, include <stddef.h>
+   and use ptrdiff_t.  */
 
 #ifdef __PTRDIFF_TYPE__
 # define PTR_INT_TYPE __PTRDIFF_TYPE__
 #else
-# ifdef HAVE_STDDEF_H
-#  include <stddef.h>
-#  define PTR_INT_TYPE ptrdiff_t
-# else
-#  define PTR_INT_TYPE long
-# endif
+# include <stddef.h>
+# define PTR_INT_TYPE ptrdiff_t
 #endif
 
-#if defined _LIBC || defined HAVE_STRING_H
-# include <string.h>
-# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
-#else
-# ifdef memcpy
-#  define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
-# else
-#  define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N))
-# endif
-#endif
+#include <string.h>
 
 struct _obstack_chunk		/* Lives at front of each chunk. */
 {
@@ -170,18 +152,12 @@ struct obstack		/* control current objec
   char	*chunk_limit;		/* address of char after current chunk */
   PTR_INT_TYPE temp;		/* Temporary for some macros.  */
   int   alignment_mask;		/* Mask of alignment for each object. */
-#if defined __STDC__ && __STDC__
   /* These prototypes vary based on `use_extra_arg', and we use
      casts to the prototypeless function type in all assignments,
      but having prototypes here quiets -Wstrict-prototypes.  */
   struct _obstack_chunk *(*chunkfun) (void *, long);
   void (*freefun) (void *, struct _obstack_chunk *);
   void *extra_arg;		/* first arg for chunk alloc/dealloc funcs */
-#else
-  struct _obstack_chunk *(*chunkfun) (); /* User's fcn to allocate a chunk.  */
-  void (*freefun) ();		/* User's function to free a chunk.  */
-  char *extra_arg;		/* first arg for chunk alloc/dealloc funcs */
-#endif
   unsigned use_extra_arg:1;	/* chunk alloc/dealloc funcs take extra arg */
   unsigned maybe_empty_object:1;/* There is a possibility that the current
 				   chunk contains a zero-length object.  This
@@ -194,7 +170,6 @@ struct obstack		/* control current objec
 
 /* Declare the external functions we use; they are in obstack.c.  */
 
-#if defined __STDC__ && __STDC__
 extern void _obstack_newchunk (struct obstack *, int);
 extern void _obstack_free (struct obstack *, void *);
 extern int _obstack_begin (struct obstack *, int, int,
@@ -203,16 +178,7 @@ extern int _obstack_begin_1 (struct obst
 			     void *(*) (void *, long),
 			     void (*) (void *, void *), void *);
 extern int _obstack_memory_used (struct obstack *);
-#else
-extern void _obstack_newchunk ();
-extern void _obstack_free ();
-extern int _obstack_begin ();
-extern int _obstack_begin_1 ();
-extern int _obstack_memory_used ();
-#endif
 \f
-#if defined __STDC__ && __STDC__
-
 /* Do the function-declarations after the structs
    but before defining the macros.  */
 
@@ -251,20 +217,11 @@ int obstack_alignment_mask (struct obsta
 int obstack_chunk_size (struct obstack *obstack);
 int obstack_memory_used (struct obstack *obstack);
 
-#endif /* __STDC__ */
-
-/* Non-ANSI C cannot really support alternative functions for these macros,
-   so we do not declare them.  */
-
 /* Error handler called when `obstack_chunk_alloc' failed to allocate
    more memory.  This can be set to a user defined function which
    should either abort gracefully or use longjump - but shouldn't
    return.  The default action is to print a message and abort.  */
-#if defined __STDC__ && __STDC__
 extern void (*obstack_alloc_failed_handler) (void);
-#else
-extern void (*obstack_alloc_failed_handler) ();
-#endif
 
 /* Exit value used when `print_and_abort' is used.  */
 extern int obstack_exit_failure;
@@ -287,67 +244,34 @@ extern int obstack_exit_failure;
 
 #define obstack_alignment_mask(h) ((h)->alignment_mask)
 
-/* To prevent prototype warnings provide complete argument list in
-   standard C version.  */
-#if defined __STDC__ && __STDC__
-
-# define obstack_init(h)					\
+/* To prevent prototype warnings provide complete argument list.  */
+#define obstack_init(h)						\
   _obstack_begin ((h), 0, 0,					\
-		  (void *(*) (long)) obstack_chunk_alloc, 	\
+		  (void *(*) (long)) obstack_chunk_alloc,	\
 		  (void (*) (void *)) obstack_chunk_free)
 
-# define obstack_begin(h, size)					\
+#define obstack_begin(h, size)					\
   _obstack_begin ((h), (size), 0,				\
-		  (void *(*) (long)) obstack_chunk_alloc, 	\
+		  (void *(*) (long)) obstack_chunk_alloc,	\
 		  (void (*) (void *)) obstack_chunk_free)
 
-# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
+#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun)  \
   _obstack_begin ((h), (size), (alignment),				   \
-		  (void *(*) (long)) (chunkfun), 			   \
+		  (void *(*) (long)) (chunkfun),			   \
 		  (void (*) (void *)) (freefun))
 
-# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
+#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
   _obstack_begin_1 ((h), (size), (alignment),				\
 		    (void *(*) (void *, long)) (chunkfun),		\
 		    (void (*) (void *, void *)) (freefun), (arg))
 
-# define obstack_chunkfun(h, newchunkfun) \
+#define obstack_chunkfun(h, newchunkfun) \
   ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
 
-# define obstack_freefun(h, newfreefun) \
+#define obstack_freefun(h, newfreefun) \
   ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
 
-#else
-
-# define obstack_init(h)						\
-  _obstack_begin ((h), 0, 0,						\
-		  (void *(*) ()) obstack_chunk_alloc, 			\
-		  (void (*) ()) obstack_chunk_free)
-
-# define obstack_begin(h, size)						\
-  _obstack_begin ((h), (size), 0,					\
-		  (void *(*) ()) obstack_chunk_alloc,			\
-		  (void (*) ()) obstack_chunk_free)
-
-# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
-  _obstack_begin ((h), (size), (alignment),				   \
-		  (void *(*) ()) (chunkfun), 				   \
-		  (void (*) ()) (freefun))
-
-# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
-  _obstack_begin_1 ((h), (size), (alignment),				\
-		    (void *(*) ()) (chunkfun), 				\
-		    (void (*) ()) (freefun), (arg))
-
-# define obstack_chunkfun(h, newchunkfun) \
-  ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun))
-
-# define obstack_freefun(h, newfreefun) \
-  ((h) -> freefun = (void (*)()) (newfreefun))
-
-#endif
-
-#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar)
+#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar))
 
 #define obstack_blank_fast(h,n) ((h)->next_free += (n))
 
@@ -368,12 +292,12 @@ extern int obstack_exit_failure;
 
 # define obstack_object_size(OBSTACK)					\
   __extension__								\
-  ({ struct obstack *__o = (OBSTACK);					\
+  ({ struct obstack const *__o = (OBSTACK);				\
      (unsigned) (__o->next_free - __o->object_base); })
 
 # define obstack_room(OBSTACK)						\
   __extension__								\
-  ({ struct obstack *__o = (OBSTACK);					\
+  ({ struct obstack const *__o = (OBSTACK);				\
      (unsigned) (__o->chunk_limit - __o->next_free); })
 
 # define obstack_make_room(OBSTACK,length)				\
@@ -386,7 +310,7 @@ __extension__								\
 
 # define obstack_empty_p(OBSTACK)					\
   __extension__								\
-  ({ struct obstack *__o = (OBSTACK);					\
+  ({ struct obstack const *__o = (OBSTACK);				\
      (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); })
 
 # define obstack_grow(OBSTACK,where,length)				\
@@ -395,7 +319,7 @@ __extension__								\
    int __len = (length);						\
    if (__o->next_free + __len > __o->chunk_limit)			\
      _obstack_newchunk (__o, __len);					\
-   _obstack_memcpy (__o->next_free, (where), __len);			\
+   memcpy (__o->next_free, where, __len);				\
    __o->next_free += __len;						\
    (void) 0; })
 
@@ -405,7 +329,7 @@ __extension__								\
    int __len = (length);						\
    if (__o->next_free + __len + 1 > __o->chunk_limit)			\
      _obstack_newchunk (__o, __len + 1);				\
-   _obstack_memcpy (__o->next_free, (where), __len);			\
+   memcpy (__o->next_free, where, __len);				\
    __o->next_free += __len;						\
    *(__o->next_free)++ = 0;						\
    (void) 0; })
@@ -415,7 +339,7 @@ __extension__								\
 ({ struct obstack *__o = (OBSTACK);					\
    if (__o->next_free + 1 > __o->chunk_limit)				\
      _obstack_newchunk (__o, 1);					\
-   *(__o->next_free)++ = (datum);					\
+   obstack_1grow_fast (__o, datum);					\
    (void) 0; })
 
 /* These assume that the obstack alignment is good enough for pointers
@@ -427,22 +351,28 @@ __extension__								\
 ({ struct obstack *__o = (OBSTACK);					\
    if (__o->next_free + sizeof (void *) > __o->chunk_limit)		\
      _obstack_newchunk (__o, sizeof (void *));				\
-   *((void **)__o->next_free)++ = (datum);				\
-   (void) 0; })
+   obstack_ptr_grow_fast (__o, datum); })				\
 
 # define obstack_int_grow(OBSTACK,datum)				\
 __extension__								\
 ({ struct obstack *__o = (OBSTACK);					\
    if (__o->next_free + sizeof (int) > __o->chunk_limit)		\
      _obstack_newchunk (__o, sizeof (int));				\
-   *((int *)__o->next_free)++ = (datum);				\
-   (void) 0; })
+   obstack_int_grow_fast (__o, datum); })
 
-# define obstack_ptr_grow_fast(h,aptr)					\
-  (*((void **) (h)->next_free)++ = (aptr))
+# define obstack_ptr_grow_fast(OBSTACK,aptr)				\
+__extension__								\
+({ struct obstack *__o1 = (OBSTACK);					\
+   *(const void **) __o1->next_free = (aptr);				\
+   __o1->next_free += sizeof (const void *);				\
+   (void) 0; })
 
-# define obstack_int_grow_fast(h,aint)					\
-  (*((int *) (h)->next_free)++ = (aint))
+# define obstack_int_grow_fast(OBSTACK,aint)				\
+__extension__								\
+({ struct obstack *__o1 = (OBSTACK);					\
+   *(int *) __o1->next_free = (aint);					\
+   __o1->next_free += sizeof (int);					\
+   (void) 0; })
 
 # define obstack_blank(OBSTACK,length)					\
 __extension__								\
@@ -450,7 +380,7 @@ __extension__								\
    int __len = (length);						\
    if (__o->chunk_limit - __o->next_free < __len)			\
      _obstack_newchunk (__o, __len);					\
-   __o->next_free += __len;						\
+   obstack_blank_fast (__o, __len);					\
    (void) 0; })
 
 # define obstack_alloc(OBSTACK,length)					\
@@ -473,7 +403,7 @@ __extension__								\
 
 /* The local variable is named __o1 to avoid a name conflict
    when obstack_blank is called.  */
-# define obstack_finish(OBSTACK)  					\
+# define obstack_finish(OBSTACK)					\
 __extension__								\
 ({ struct obstack *__o1 = (OBSTACK);					\
    void *value;								\
@@ -523,43 +453,43 @@ __extension__								\
 ( (h)->temp = (length),							\
   (((h)->next_free + (h)->temp > (h)->chunk_limit)			\
    ? (_obstack_newchunk ((h), (h)->temp), 0) : 0),			\
-  _obstack_memcpy ((h)->next_free, (where), (h)->temp),			\
+  memcpy ((h)->next_free, where, (h)->temp),				\
   (h)->next_free += (h)->temp)
 
 # define obstack_grow0(h,where,length)					\
 ( (h)->temp = (length),							\
   (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit)			\
    ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0),			\
-  _obstack_memcpy ((h)->next_free, (where), (h)->temp),			\
+  memcpy ((h)->next_free, where, (h)->temp),				\
   (h)->next_free += (h)->temp,						\
   *((h)->next_free)++ = 0)
 
 # define obstack_1grow(h,datum)						\
 ( (((h)->next_free + 1 > (h)->chunk_limit)				\
    ? (_obstack_newchunk ((h), 1), 0) : 0),				\
-  (*((h)->next_free)++ = (datum)))
+  obstack_1grow_fast (h, datum))
 
 # define obstack_ptr_grow(h,datum)					\
 ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)		\
    ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),		\
-  (*((const char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = (datum)))
+  obstack_ptr_grow_fast (h, datum))
 
 # define obstack_int_grow(h,datum)					\
 ( (((h)->next_free + sizeof (int) > (h)->chunk_limit)			\
    ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),			\
-  (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = (datum)))
+  obstack_int_grow_fast (h, datum))
 
 # define obstack_ptr_grow_fast(h,aptr)					\
-  (*((const char **) (h)->next_free)++ = (aptr))
+  (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
 
 # define obstack_int_grow_fast(h,aint)					\
-  (*((int *) (h)->next_free)++ = (aint))
+  (((int *) ((h)->next_free += sizeof (int)))[-1] = (aptr))
 
 # define obstack_blank(h,length)					\
 ( (h)->temp = (length),							\
   (((h)->chunk_limit - (h)->next_free < (h)->temp)			\
    ? (_obstack_newchunk ((h), (h)->temp), 0) : 0),			\
-  ((h)->next_free += (h)->temp))
+  obstack_blank_fast (h, (h)->temp))
 
 # define obstack_alloc(h,length)					\
  (obstack_blank ((h), (length)), obstack_finish ((h)))
@@ -570,7 +500,7 @@ __extension__								\
 # define obstack_copy0(h,where,length)					\
  (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
 
-# define obstack_finish(h)  						\
+# define obstack_finish(h)						\
 ( ((h)->next_free == (h)->object_base					\
    ? (((h)->maybe_empty_object = 1), 0)					\
    : 0),								\
@@ -582,23 +512,14 @@ __extension__								\
     > (h)->chunk_limit - (char *) (h)->chunk)				\
    ? ((h)->next_free = (h)->chunk_limit) : 0),				\
   (h)->object_base = (h)->next_free,					\
-  __INT_TO_PTR ((h)->temp))
+  (void *) __INT_TO_PTR ((h)->temp))
 
-# if defined __STDC__ && __STDC__
-#  define obstack_free(h,obj)						\
+# define obstack_free(h,obj)						\
 ( (h)->temp = (char *) (obj) - (char *) (h)->chunk,			\
   (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
    ? (int) ((h)->next_free = (h)->object_base				\
 	    = (h)->temp + (char *) (h)->chunk)				\
    : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0)))
-# else
-#  define obstack_free(h,obj)						\
-( (h)->temp = (char *) (obj) - (char *) (h)->chunk,			\
-  (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
-   ? (int) ((h)->next_free = (h)->object_base				\
-	    = (h)->temp + (char *) (h)->chunk)				\
-   : (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0)))
-# endif
 
 #endif /* not __GNUC__ or not __STDC__ */
 

[-- Attachment #1.3: Type: text/plain, Size: 190 bytes --]


-- 
 Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
  SuSE Linux AG, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126

[-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Import obstack.* from gnulib
  2004-01-24  8:46 Import obstack.* from gnulib Andreas Jaeger
@ 2004-01-24 20:53 ` Roland McGrath
  2004-01-24 21:34 ` Ulrich Drepper
  2004-01-28  3:53 ` Ulrich Drepper
  2 siblings, 0 replies; 8+ messages in thread
From: Roland McGrath @ 2004-01-24 20:53 UTC (permalink / raw)
  To: Andreas Jaeger; +Cc: Glibc hackers

> 
> I've imported the current obstack versions into glibc.  The changes
> should not effect the code but compilation:
> - K&R support removed
> - casts as lvalues removed
> 
> Ok to commit?

Looks fine to me.


Thanks,
Roland

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Import obstack.* from gnulib
  2004-01-24  8:46 Import obstack.* from gnulib Andreas Jaeger
  2004-01-24 20:53 ` Roland McGrath
@ 2004-01-24 21:34 ` Ulrich Drepper
  2004-01-25  6:33   ` Andreas Jaeger
  2004-01-28  3:53 ` Ulrich Drepper
  2 siblings, 1 reply; 8+ messages in thread
From: Ulrich Drepper @ 2004-01-24 21:34 UTC (permalink / raw)
  To: Andreas Jaeger; +Cc: Glibc hackers

Andreas Jaeger wrote:

> @@ -119,40 +119,22 @@ extern "C" {
>  #endif
>  
>  #ifndef __INT_TO_PTR
> -#if defined __STDC__ && __STDC__
> -# define __INT_TO_PTR(P) ((void *) ((P) + (char *) 0))
> -#else
>  # define __INT_TO_PTR(P) ((P) + (char *) 0)
>  #endif
> -#endif

Why should the K&R branch survive here?  Maybe there are other places
like this.

-- 
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Import obstack.* from gnulib
  2004-01-24 21:34 ` Ulrich Drepper
@ 2004-01-25  6:33   ` Andreas Jaeger
  2004-01-25  8:27     ` Ulrich Drepper
  0 siblings, 1 reply; 8+ messages in thread
From: Andreas Jaeger @ 2004-01-25  6:33 UTC (permalink / raw)
  To: Ulrich Drepper; +Cc: Glibc hackers, Paul Eggert

[-- Attachment #1: Type: text/plain, Size: 744 bytes --]

Ulrich Drepper <drepper@redhat.com> writes:

> Andreas Jaeger wrote:
>
>> @@ -119,40 +119,22 @@ extern "C" {
>>  #endif
>>  
>>  #ifndef __INT_TO_PTR
>> -#if defined __STDC__ && __STDC__
>> -# define __INT_TO_PTR(P) ((void *) ((P) + (char *) 0))
>> -#else
>>  # define __INT_TO_PTR(P) ((P) + (char *) 0)
>>  #endif
>> -#endif
>
> Why should the K&R branch survive here?  Maybe there are other places
> like this.

Let's ask the gnulib folks about this.  

I suggest to import this now - and handle those changes later.  Ok?

Andreas
-- 
 Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
  SuSE Linux AG, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126

[-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Import obstack.* from gnulib
  2004-01-25  6:33   ` Andreas Jaeger
@ 2004-01-25  8:27     ` Ulrich Drepper
  2004-01-25  9:02       ` Andreas Jaeger
  2004-01-27 14:43       ` Andreas Jaeger
  0 siblings, 2 replies; 8+ messages in thread
From: Ulrich Drepper @ 2004-01-25  8:27 UTC (permalink / raw)
  To: Andreas Jaeger; +Cc: Glibc hackers

Andreas Jaeger wrote:

> I suggest to import this now - and handle those changes later.  Ok?

No, why?  We don't add incomplete changes since this only means it gets
forgotten.

-- 
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Import obstack.* from gnulib
  2004-01-25  8:27     ` Ulrich Drepper
@ 2004-01-25  9:02       ` Andreas Jaeger
  2004-01-27 14:43       ` Andreas Jaeger
  1 sibling, 0 replies; 8+ messages in thread
From: Andreas Jaeger @ 2004-01-25  9:02 UTC (permalink / raw)
  To: Ulrich Drepper; +Cc: Glibc hackers

[-- Attachment #1: Type: text/plain, Size: 713 bytes --]

Ulrich Drepper <drepper@redhat.com> writes:

> Andreas Jaeger wrote:
>
>> I suggest to import this now - and handle those changes later.  Ok?
>
> No, why?  We don't add incomplete changes since this only means it gets
> forgotten.

It removes the casts as lvalues to make GCC 3.5 happy - and merging it
now and working from there to get the other changes would make it
easier.

But the change you mentioned is according to the ChangeLog of gnulib
needed for C++ compilation, the (void *) breaks it.

Andreas
-- 
 Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
  SuSE Linux AG, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126

[-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Import obstack.* from gnulib
  2004-01-25  8:27     ` Ulrich Drepper
  2004-01-25  9:02       ` Andreas Jaeger
@ 2004-01-27 14:43       ` Andreas Jaeger
  1 sibling, 0 replies; 8+ messages in thread
From: Andreas Jaeger @ 2004-01-27 14:43 UTC (permalink / raw)
  To: Ulrich Drepper; +Cc: Glibc hackers, Paul Eggert

[-- Attachment #1: Type: text/plain, Size: 2263 bytes --]


Paul Eggert wrote the following:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> From: Ulrich Drepper <drepper@redhat.com>
> Date: Sat, 24 Jan 2004 13:33:47 -0800
> 
> > @@ -119,40 +119,22 @@ extern "C" {
> >  #endif
> >  
> >  #ifndef __INT_TO_PTR
> > -#if defined __STDC__ && __STDC__
> > -# define __INT_TO_PTR(P) ((void *) ((P) + (char *) 0))
> > -#else
> >  # define __INT_TO_PTR(P) ((P) + (char *) 0)
> >  #endif
> > -#endif
>
> Why should the K&R branch survive here?

Because the "ANSI branch" was incorrect for C++ compilation.
This problem was originally described by Alexandre Duret-Lutz in
<http://mail.gnu.org/archive/html/bug-glibc/2003-07/msg00024.html>.

The above-quoted hunk isn't complete by itself.  It's paired with the
following change to obstack_finish:

   -  __INT_TO_PTR ((h)->temp))
   +  (void *) __INT_TO_PTR ((h)->temp))

and this pair of hunks causes the resulting code to conform to C89 (as
well as to C99; and to K&R C also, not that it matters).


> Maybe there are other places like this.

No.  I didn't find any other places when I looked for them.
This was in July when I installed this patch into gnulib
<http://mail.gnu.org/archive/html/bug-gnulib/2003-07/msg00020.html>.
Also, the patch worked for Alexandre, which is a test that the changes
are complete.


> From: Ulrich Drepper <drepper@redhat.com>
> Date: Sun, 25 Jan 2004 00:26:51 -0800
> 
> Andreas Jaeger wrote:
> > I suggest to import this now - and handle those changes later.  Ok?
> 
> No, why?  We don't add incomplete changes since this only means it gets
> forgotten.

Andreas, I assume that by "those changes later" you mean some other
set of changes for the "other places like this".  If I understand you
correctly, there are no "those changes".  Your email contained only
one set of changes, which are complete.  There is no K&R code in the
resulting file.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So, can I commit the current version now?

Andreas
-- 
 Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
  SuSE Linux AG, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126

[-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Import obstack.* from gnulib
  2004-01-24  8:46 Import obstack.* from gnulib Andreas Jaeger
  2004-01-24 20:53 ` Roland McGrath
  2004-01-24 21:34 ` Ulrich Drepper
@ 2004-01-28  3:53 ` Ulrich Drepper
  2 siblings, 0 replies; 8+ messages in thread
From: Ulrich Drepper @ 2004-01-28  3:53 UTC (permalink / raw)
  To: Andreas Jaeger; +Cc: Glibc hackers

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Andreas Jaeger wrote:

> 	* malloc/obstack.h: Import gnulib version.
> 	* malloc/obstack.c: Likewise.

I've checked in the patch with one additional change.

- -- 
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)

iD8DBQFAFzIl2ijCOnn/RHQRApqoAKC1MooPnZ9MHErg06ZzQzRLV1V4+gCfT89o
WLzR5OLy7HZzv7S/FbChShM=
=BFx3
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2004-01-28  3:53 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-24  8:46 Import obstack.* from gnulib Andreas Jaeger
2004-01-24 20:53 ` Roland McGrath
2004-01-24 21:34 ` Ulrich Drepper
2004-01-25  6:33   ` Andreas Jaeger
2004-01-25  8:27     ` Ulrich Drepper
2004-01-25  9:02       ` Andreas Jaeger
2004-01-27 14:43       ` Andreas Jaeger
2004-01-28  3:53 ` Ulrich Drepper

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).