Sync with fileutils, except use

PROTOTYPES to check for prototypes, and "defined __STDC__" to
check for void *.
This commit is contained in:
Paul Eggert
2002-08-12 14:12:57 +00:00
parent 9742c552f2
commit 16cb098b72
2 changed files with 48 additions and 41 deletions

View File

@@ -1,22 +1,24 @@
/* obstack.c - subroutines used implicitly by object stack macros /* obstack.c - subroutines used implicitly by object stack macros
Copyright (C) 1988-1994,96,97,98,99,2000,2001 Free Software Foundation, Inc.
Copyright (C) 1988-1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of 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. the C library, however. The master source lives in /gd/gnu/lib.
The GNU C Library is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or modify
modify it under the terms of the GNU Lesser General Public it under the terms of the GNU General Public License as published by
License as published by the Free Software Foundation; either the Free Software Foundation; either version 2, or (at your option)
version 2.1 of the License, or (at your option) any later version. any later version.
The GNU C Library is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Lesser General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU General Public License
License along with the GNU C Library; if not, write to the Free along with this program; if not, write to the Free Software Foundation,
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
02111-1307 USA. */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
# include <config.h> # include <config.h>
@@ -53,7 +55,7 @@
#ifndef ELIDE_CODE #ifndef ELIDE_CODE
# if defined __STDC__ && __STDC__ # ifdef __STDC__
# define POINTER void * # define POINTER void *
# else # else
# define POINTER char * # define POINTER char *
@@ -84,7 +86,7 @@ union fooround {long x; double d;};
abort gracefully or use longjump - but shouldn't return. This abort gracefully or use longjump - but shouldn't return. This
variable by default points to the internal function variable by default points to the internal function
`print_and_abort'. */ `print_and_abort'. */
# if defined __STDC__ && __STDC__ # if PROTOTYPES || (defined __STDC__ && __STDC__)
static void print_and_abort (void); static void print_and_abort (void);
void (*obstack_alloc_failed_handler) (void) = print_and_abort; void (*obstack_alloc_failed_handler) (void) = print_and_abort;
# else # else
@@ -112,7 +114,7 @@ struct obstack *_obstack;
For free, do not use ?:, since some compilers, like the MIPS compilers, For free, do not use ?:, since some compilers, like the MIPS compilers,
do not allow (expr) ? void : void. */ do not allow (expr) ? void : void. */
# if defined __STDC__ && __STDC__ # if PROTOTYPES || (defined __STDC__ && __STDC__)
# define CALL_CHUNKFUN(h, size) \ # define CALL_CHUNKFUN(h, size) \
(((h) -> use_extra_arg) \ (((h) -> use_extra_arg) \
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
@@ -154,7 +156,7 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
struct obstack *h; struct obstack *h;
int size; int size;
int alignment; int alignment;
# if defined __STDC__ && __STDC__ # if PROTOTYPES || (defined __STDC__ && __STDC__)
POINTER (*chunkfun) (long); POINTER (*chunkfun) (long);
void (*freefun) (void *); void (*freefun) (void *);
# else # else
@@ -183,7 +185,7 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
size = 4096 - extra; size = 4096 - extra;
} }
# if defined __STDC__ && __STDC__ # if PROTOTYPES || (defined __STDC__ && __STDC__)
h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
# else # else
@@ -212,7 +214,7 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
struct obstack *h; struct obstack *h;
int size; int size;
int alignment; int alignment;
# if defined __STDC__ && __STDC__ # if PROTOTYPES || (defined __STDC__ && __STDC__)
POINTER (*chunkfun) (POINTER, long); POINTER (*chunkfun) (POINTER, long);
void (*freefun) (POINTER, POINTER); void (*freefun) (POINTER, POINTER);
# else # else
@@ -242,7 +244,7 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
size = 4096 - extra; size = 4096 - extra;
} }
# if defined __STDC__ && __STDC__ # if PROTOTYPES || (defined __STDC__ && __STDC__)
h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
# else # else
@@ -343,7 +345,7 @@ _obstack_newchunk (h, length)
This is here for debugging. This is here for debugging.
If you use it in a program, you are probably losing. */ If you use it in a program, you are probably losing. */
# if defined __STDC__ && __STDC__ # if PROTOTYPES || (defined __STDC__ && __STDC__)
/* Suppress -Wmissing-prototypes warning. We don't want to declare this in /* Suppress -Wmissing-prototypes warning. We don't want to declare this in
obstack.h because it is just for debugging. */ obstack.h because it is just for debugging. */
int _obstack_allocated_p (struct obstack *h, POINTER obj); int _obstack_allocated_p (struct obstack *h, POINTER obj);
@@ -505,7 +507,7 @@ print_and_abort ()
/* Now define the functional versions of the obstack macros. /* Now define the functional versions of the obstack macros.
Define them to simply use the corresponding macros to do the job. */ Define them to simply use the corresponding macros to do the job. */
# if defined __STDC__ && __STDC__ # if PROTOTYPES || (defined __STDC__ && __STDC__)
/* These function definitions do not work with non-ANSI preprocessors; /* These function definitions do not work with non-ANSI preprocessors;
they won't pass through the macro names in parentheses. */ they won't pass through the macro names in parentheses. */
@@ -616,7 +618,7 @@ POINTER (obstack_copy0) (obstack, address, length)
return obstack_copy0 (obstack, address, length); return obstack_copy0 (obstack, address, length);
} }
# endif /* __STDC__ */ # endif /* PROTOTYPES || (defined __STDC__ && __STDC__) */
# endif /* 0 */ # endif /* 0 */

View File

@@ -1,5 +1,7 @@
/* obstack.h - object stack macros /* 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, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,
1998, 1999, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of 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. the C library, however. The master source lives in /gd/gnu/lib.
@@ -7,20 +9,19 @@
NOTE: The canonical source of this file is maintained with the GNU C Library. NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@gnu.org. Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it This program is free software; you can redistribute it and/or modify
under the terms of the GNU General Public License as published by the it under the terms of the GNU General Public License as published by
Free Software Foundation; either version 2, or (at your option) any the Free Software Foundation; either version 2, or (at your option)
later version. any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Library General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU General Public License
License along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software Foundation,
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
USA. */
/* Summary: /* Summary:
@@ -123,7 +124,11 @@ extern "C" {
#endif #endif
#ifndef __INT_TO_PTR #ifndef __INT_TO_PTR
# define __INT_TO_PTR(P) ((P) + (char *) 0) # ifdef __STDC__
# define __INT_TO_PTR(P) ((void *) ((P) + (char *) 0))
# else
# define __INT_TO_PTR(P) ((P) + (char *) 0)
# endif
#endif #endif
/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is /* We need the type of the resulting object. If __PTRDIFF_TYPE__ is
@@ -170,7 +175,7 @@ struct obstack /* control current object in current chunk */
char *chunk_limit; /* address of char after current chunk */ char *chunk_limit; /* address of char after current chunk */
PTR_INT_TYPE temp; /* Temporary for some macros. */ PTR_INT_TYPE temp; /* Temporary for some macros. */
int alignment_mask; /* Mask of alignment for each object. */ int alignment_mask; /* Mask of alignment for each object. */
#if defined __STDC__ && __STDC__ #if PROTOTYPES || (defined __STDC__ && __STDC__)
/* These prototypes vary based on `use_extra_arg', and we use /* These prototypes vary based on `use_extra_arg', and we use
casts to the prototypeless function type in all assignments, casts to the prototypeless function type in all assignments,
but having prototypes here quiets -Wstrict-prototypes. */ but having prototypes here quiets -Wstrict-prototypes. */
@@ -194,7 +199,7 @@ struct obstack /* control current object in current chunk */
/* Declare the external functions we use; they are in obstack.c. */ /* Declare the external functions we use; they are in obstack.c. */
#if defined __STDC__ && __STDC__ #if PROTOTYPES || (defined __STDC__ && __STDC__)
extern void _obstack_newchunk (struct obstack *, int); extern void _obstack_newchunk (struct obstack *, int);
extern void _obstack_free (struct obstack *, void *); extern void _obstack_free (struct obstack *, void *);
extern int _obstack_begin (struct obstack *, int, int, extern int _obstack_begin (struct obstack *, int, int,
@@ -211,7 +216,7 @@ extern int _obstack_begin_1 ();
extern int _obstack_memory_used (); extern int _obstack_memory_used ();
#endif #endif
#if defined __STDC__ && __STDC__ #if PROTOTYPES || (defined __STDC__ && __STDC__)
/* Do the function-declarations after the structs /* Do the function-declarations after the structs
but before defining the macros. */ but before defining the macros. */
@@ -251,7 +256,7 @@ int obstack_alignment_mask (struct obstack *obstack);
int obstack_chunk_size (struct obstack *obstack); int obstack_chunk_size (struct obstack *obstack);
int obstack_memory_used (struct obstack *obstack); int obstack_memory_used (struct obstack *obstack);
#endif /* __STDC__ */ #endif /* PROTOTYPES || (defined __STDC__ && __STDC__) */
/* Non-ANSI C cannot really support alternative functions for these macros, /* Non-ANSI C cannot really support alternative functions for these macros,
so we do not declare them. */ so we do not declare them. */
@@ -260,7 +265,7 @@ int obstack_memory_used (struct obstack *obstack);
more memory. This can be set to a user defined function which more memory. This can be set to a user defined function which
should either abort gracefully or use longjump - but shouldn't should either abort gracefully or use longjump - but shouldn't
return. The default action is to print a message and abort. */ return. The default action is to print a message and abort. */
#if defined __STDC__ && __STDC__ #if PROTOTYPES || (defined __STDC__ && __STDC__)
extern void (*obstack_alloc_failed_handler) (void); extern void (*obstack_alloc_failed_handler) (void);
#else #else
extern void (*obstack_alloc_failed_handler) (); extern void (*obstack_alloc_failed_handler) ();
@@ -289,7 +294,7 @@ extern int obstack_exit_failure;
/* To prevent prototype warnings provide complete argument list in /* To prevent prototype warnings provide complete argument list in
standard C version. */ standard C version. */
#if defined __STDC__ && __STDC__ #if PROTOYPES || (defined __STDC__ && __STDC__)
# define obstack_init(h) \ # define obstack_init(h) \
_obstack_begin ((h), 0, 0, \ _obstack_begin ((h), 0, 0, \
@@ -584,7 +589,7 @@ __extension__ \
(h)->object_base = (h)->next_free, \ (h)->object_base = (h)->next_free, \
__INT_TO_PTR ((h)->temp)) __INT_TO_PTR ((h)->temp))
# if defined __STDC__ && __STDC__ # if PROTOTYPES || (defined __STDC__ && __STDC__)
# define obstack_free(h,obj) \ # define obstack_free(h,obj) \
( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ ( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \
(((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\