* ansidecl.h (ANSI_PROTOTYPES, PTRCONST, LONG_DOUBLE, PARAMS)
	(VPARAMS, VA_START, VA_OPEN, VA_CLOSE, VA_FIXEDARG, CONST)
	(VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID, AND, DOTS)
	(NOARGS): Don't define.
	* libiberty.h (expandargv, writeargv): Don't use PARAMS.
libiberty
	* _doprint.c (checkit): Use stdarg, not VA_* macros.
	* asprintf.c (asprintf): Use stdarg, not VA_* macros.
	* concat.c (concat_length, concat_copy, concat_copy2, concat)
	(reconcat): Use stdarg, not VA_* macros.
	* snprintf.c (snprintf): Use stdarg, not VA_* macros.
	* vasprintf.c (checkit): Use stdarg, not VA_* macros.
	* vsnprintf.c (checkit): Use stdarg, not VA_* macros.

From-SVN: r206881
This commit is contained in:
Tom Tromey 2014-01-21 15:09:10 +00:00 committed by Tom Tromey
parent 579847c272
commit d2d21de9dc
10 changed files with 62 additions and 191 deletions

View File

@ -1,3 +1,11 @@
2014-01-21 Tom Tromey <tromey@redhat.com>
* ansidecl.h (ANSI_PROTOTYPES, PTRCONST, LONG_DOUBLE, PARAMS)
(VPARAMS, VA_START, VA_OPEN, VA_CLOSE, VA_FIXEDARG, CONST)
(VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID, AND, DOTS)
(NOARGS): Don't define.
* libiberty.h (expandargv, writeargv): Don't use PARAMS.
2013-12-23 Bill Maddox <maddox@google.com>
* demangle.h (enum gnu_v3_ctor_kinds):

View File

@ -1,6 +1,6 @@
/* ANSI and traditional C compatability macros
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2013
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@ -24,93 +24,16 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
Macro ANSI C definition Traditional C definition
----- ---- - ---------- ----------- - ----------
ANSI_PROTOTYPES 1 not defined
PTR `void *' `char *'
PTRCONST `void *const' `char *'
LONG_DOUBLE `long double' `double'
const not defined `'
volatile not defined `'
signed not defined `'
VA_START(ap, var) va_start(ap, var) va_start(ap)
Note that it is safe to write "void foo();" indicating a function
with no return value, in all K+R compilers we have been able to test.
For declaring functions with prototypes, we also provide these:
PARAMS ((prototype))
-- for functions which take a fixed number of arguments. Use this
when declaring the function. When defining the function, write a
K+R style argument list. For example:
char *strcpy PARAMS ((char *dest, char *source));
...
char *
strcpy (dest, source)
char *dest;
char *source;
{ ... }
VPARAMS ((prototype, ...))
-- for functions which take a variable number of arguments. Use
PARAMS to declare the function, VPARAMS to define it. For example:
int printf PARAMS ((const char *format, ...));
...
int
printf VPARAMS ((const char *format, ...))
{
...
}
For writing functions which take variable numbers of arguments, we
also provide the VA_OPEN, VA_CLOSE, and VA_FIXEDARG macros. These
hide the differences between K+R <varargs.h> and C89 <stdarg.h> more
thoroughly than the simple VA_START() macro mentioned above.
VA_OPEN and VA_CLOSE are used *instead of* va_start and va_end.
Immediately after VA_OPEN, put a sequence of VA_FIXEDARG calls
corresponding to the list of fixed arguments. Then use va_arg
normally to get the variable arguments, or pass your va_list object
around. You do not declare the va_list yourself; VA_OPEN does it
for you.
Here is a complete example:
int
printf VPARAMS ((const char *format, ...))
{
int result;
VA_OPEN (ap, format);
VA_FIXEDARG (ap, const char *, format);
result = vfprintf (stdout, format, ap);
VA_CLOSE (ap);
return result;
}
You can declare variables either before or after the VA_OPEN,
VA_FIXEDARG sequence. Also, VA_OPEN and VA_CLOSE are the beginning
and end of a block. They must appear at the same nesting level,
and any variables declared after VA_OPEN go out of scope at
VA_CLOSE. Unfortunately, with a K+R compiler, that includes the
argument list. You can have multiple instances of VA_OPEN/VA_CLOSE
pairs in a single function in case you need to traverse the
argument list more than once.
For ease of writing code which uses GCC extensions but needs to be
portable to other compilers, we provide the GCC_VERSION macro that
simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various
wrappers around __attribute__. Also, __extension__ will be #defined
to nothing if it doesn't work. See below.
This header also defines a lot of obsolete macros:
CONST, VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID,
AND, DOTS, NOARGS. Don't use them. */
to nothing if it doesn't work. See below. */
#ifndef _ANSIDECL_H
#define _ANSIDECL_H 1
@ -149,27 +72,7 @@ So instead we use the macro below and test it against specific values. */
C++ compilers, does not define __STDC__, though it acts as if this
was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */
#define ANSI_PROTOTYPES 1
#define PTR void *
#define PTRCONST void *const
#define LONG_DOUBLE long double
/* PARAMS is often defined elsewhere (e.g. by libintl.h), so wrap it in
a #ifndef. */
#ifndef PARAMS
#define PARAMS(ARGS) ARGS
#endif
#define VPARAMS(ARGS) ARGS
#define VA_START(VA_LIST, VAR) va_start(VA_LIST, VAR)
/* variadic function helper macros */
/* "struct Qdmy" swallows the semicolon after VA_OPEN/VA_FIXEDARG's
use without inhibiting further decls and without declaring an
actual variable. */
#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP, VAR); { struct Qdmy
#define VA_CLOSE(AP) } va_end(AP); }
#define VA_FIXEDARG(AP, T, N) struct Qdmy
#undef const
#undef volatile
@ -188,35 +91,9 @@ So instead we use the macro below and test it against specific values. */
# endif
#endif
/* These are obsolete. Do not use. */
#ifndef IN_GCC
#define CONST const
#define VOLATILE volatile
#define SIGNED signed
#define PROTO(type, name, arglist) type name arglist
#define EXFUN(name, proto) name proto
#define DEFUN(name, arglist, args) name(args)
#define DEFUN_VOID(name) name(void)
#define AND ,
#define DOTS , ...
#define NOARGS void
#endif /* ! IN_GCC */
#else /* Not ANSI C. */
#undef ANSI_PROTOTYPES
#define PTR char *
#define PTRCONST PTR
#define LONG_DOUBLE double
#define PARAMS(args) ()
#define VPARAMS(args) (va_alist) va_dcl
#define VA_START(va_list, var) va_start(va_list)
#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP); { struct Qdmy
#define VA_CLOSE(AP) } va_end(AP); }
#define VA_FIXEDARG(AP, TYPE, NAME) TYPE NAME = va_arg(AP, TYPE)
/* some systems define these in header files for non-ansi mode */
#undef const
@ -228,20 +105,6 @@ So instead we use the macro below and test it against specific values. */
#define signed
#define inline
#ifndef IN_GCC
#define CONST
#define VOLATILE
#define SIGNED
#define PROTO(type, name, arglist) type name ()
#define EXFUN(name, proto) name()
#define DEFUN(name, arglist, args) name arglist args;
#define DEFUN_VOID(name) name()
#define AND ;
#define DOTS
#define NOARGS
#endif /* ! IN_GCC */
#endif /* ANSI C. */
/* Define macros for some gcc attributes. This permits us to use the

View File

@ -1,7 +1,7 @@
/* Function declarations for libiberty.
Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
2006, 2007, 2008, 2009, 2010, 2011, 2013 Free Software Foundation, Inc.
Note - certain prototypes declared in this header file are for
functions whoes implementation copyright does not belong to the
@ -85,11 +85,11 @@ extern char **dupargv (char **) ATTRIBUTE_MALLOC;
/* Expand "@file" arguments in argv. */
extern void expandargv PARAMS ((int *, char ***));
extern void expandargv (int *, char ***);
/* Write argv to an @-file, inserting necessary quoting. */
extern int writeargv PARAMS ((char **, FILE *));
extern int writeargv (char **, FILE *);
/* Return the number of elements in argv. */

View File

@ -1,3 +1,13 @@
2014-01-21 Tom Tromey <tromey@redhat.com>
* _doprint.c (checkit): Use stdarg, not VA_* macros.
* asprintf.c (asprintf): Use stdarg, not VA_* macros.
* concat.c (concat_length, concat_copy, concat_copy2, concat)
(reconcat): Use stdarg, not VA_* macros.
* snprintf.c (snprintf): Use stdarg, not VA_* macros.
* vasprintf.c (checkit): Use stdarg, not VA_* macros.
* vsnprintf.c (checkit): Use stdarg, not VA_* macros.
2014-01-06 Mike Frysinger <vapier@gentoo.org>
PR other/56780

View File

@ -222,11 +222,11 @@ static int
checkit (const char* format, ...)
{
int result;
VA_OPEN (args, format);
VA_FIXEDARG (args, char *, format);
va_list args;
va_start (args, format);
result = _doprnt (format, args, stdout);
VA_CLOSE (args);
va_end (args);
return result;
}

View File

@ -1,6 +1,6 @@
/* Like sprintf but provides a pointer to malloc'd storage, which must
be freed by the caller.
Copyright (C) 1997, 2003 Free Software Foundation, Inc.
Copyright (C) 1997, 2003, 2013 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
This file is part of the libiberty library.
@ -47,10 +47,9 @@ int
asprintf (char **buf, const char *fmt, ...)
{
int status;
VA_OPEN (ap, fmt);
VA_FIXEDARG (ap, char **, buf);
VA_FIXEDARG (ap, const char *, fmt);
va_list ap;
va_start (ap, fmt);
status = vasprintf (buf, fmt, ap);
VA_CLOSE (ap);
va_end (ap);
return status;
}

View File

@ -1,5 +1,5 @@
/* Concatenate variable number of strings.
Copyright (C) 1991, 1994, 2001, 2011 Free Software Foundation, Inc.
Copyright (C) 1991, 1994, 2001, 2011, 2013 Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support
This file is part of the libiberty library.
@ -90,11 +90,11 @@ unsigned long
concat_length (const char *first, ...)
{
unsigned long length;
va_list args;
VA_OPEN (args, first);
VA_FIXEDARG (args, const char *, first);
va_start (args, first);
length = vconcat_length (first, args);
VA_CLOSE (args);
va_end (args);
return length;
}
@ -105,13 +105,12 @@ char *
concat_copy (char *dst, const char *first, ...)
{
char *save_dst;
va_list args;
VA_OPEN (args, first);
VA_FIXEDARG (args, char *, dst);
VA_FIXEDARG (args, const char *, first);
va_start (args, first);
vconcat_copy (dst, first, args);
save_dst = dst; /* With K&R C, dst goes out of scope here. */
VA_CLOSE (args);
va_end (args);
return save_dst;
}
@ -129,10 +128,10 @@ char *libiberty_concat_ptr;
char *
concat_copy2 (const char *first, ...)
{
VA_OPEN (args, first);
VA_FIXEDARG (args, const char *, first);
va_list args;
va_start (args, first);
vconcat_copy (libiberty_concat_ptr, first, args);
VA_CLOSE (args);
va_end (args);
return libiberty_concat_ptr;
}
@ -141,18 +140,17 @@ char *
concat (const char *first, ...)
{
char *newstr;
va_list args;
/* First compute the size of the result and get sufficient memory. */
VA_OPEN (args, first);
VA_FIXEDARG (args, const char *, first);
va_start (args, first);
newstr = XNEWVEC (char, vconcat_length (first, args) + 1);
VA_CLOSE (args);
va_end (args);
/* Now copy the individual pieces to the result string. */
VA_OPEN (args, first);
VA_FIXEDARG (args, const char *, first);
va_start (args, first);
vconcat_copy (newstr, first, args);
VA_CLOSE (args);
va_end (args);
return newstr;
}
@ -179,22 +177,19 @@ char *
reconcat (char *optr, const char *first, ...)
{
char *newstr;
va_list args;
/* First compute the size of the result and get sufficient memory. */
VA_OPEN (args, first);
VA_FIXEDARG (args, char *, optr);
VA_FIXEDARG (args, const char *, first);
va_start (args, first);
newstr = XNEWVEC (char, vconcat_length (first, args) + 1);
VA_CLOSE (args);
va_end (args);
/* Now copy the individual pieces to the result string. */
VA_OPEN (args, first);
VA_FIXEDARG (args, char *, optr);
VA_FIXEDARG (args, const char *, first);
va_start (args, first);
vconcat_copy (newstr, first, args);
if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C. */
free (optr);
VA_CLOSE (args);
va_end (args);
return newstr;
}

View File

@ -1,5 +1,5 @@
/* Implement the snprintf function.
Copyright (C) 2003, 2011 Free Software Foundation, Inc.
Copyright (C) 2003, 2011, 2013 Free Software Foundation, Inc.
Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
This file is part of the libiberty library. This library is free
@ -53,11 +53,9 @@ int
snprintf (char *s, size_t n, const char *format, ...)
{
int result;
VA_OPEN (ap, format);
VA_FIXEDARG (ap, char *, s);
VA_FIXEDARG (ap, size_t, n);
VA_FIXEDARG (ap, const char *, format);
va_list ap;
va_start (ap, format);
result = vsnprintf (s, n, format, ap);
VA_CLOSE (ap);
va_end (ap);
return result;
}

View File

@ -1,6 +1,6 @@
/* Like vsprintf but provides a pointer to malloc'd storage, which must
be freed by the caller.
Copyright (C) 1994, 2003, 2011 Free Software Foundation, Inc.
Copyright (C) 1994, 2003, 2011, 2013 Free Software Foundation, Inc.
This file is part of the libiberty library.
Libiberty is free software; you can redistribute it and/or
@ -165,10 +165,10 @@ static void ATTRIBUTE_PRINTF_1
checkit (const char *format, ...)
{
char *result;
VA_OPEN (args, format);
VA_FIXEDARG (args, const char *, format);
va_list args;
va_start (args, format);
vasprintf (&result, format, args);
VA_CLOSE (args);
va_end (args);
if (strlen (result) < (size_t) global_total_width)
printf ("PASS: ");

View File

@ -1,5 +1,5 @@
/* Implement the vsnprintf function.
Copyright (C) 2003, 2004, 2005, 2011 Free Software Foundation, Inc.
Copyright (C) 2003, 2004, 2005, 2011, 2013 Free Software Foundation, Inc.
Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
This file is part of the libiberty library. This library is free
@ -95,12 +95,10 @@ static int ATTRIBUTE_PRINTF_3
checkit (char *s, size_t n, const char *format, ...)
{
int result;
VA_OPEN (ap, format);
VA_FIXEDARG (ap, char *, s);
VA_FIXEDARG (ap, size_t, n);
VA_FIXEDARG (ap, const char *, format);
va_list ap;
va_start (ap, format);
result = vsnprintf (s, n, format, ap);
VA_CLOSE (ap);
va_end (ap);
return result;
}