From e88509188632d76288d391d1407157f1bff22ade Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Wed, 24 Dec 2014 17:22:51 +0100 Subject: [PATCH] xasprintf.c: New file. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit libiberty/ChangeLog: * xasprintf.c: New file. * Makefile.in (CFILES): Add xasprintf.c. (REQUIRED_OFILES): Add xasprintf.$(objext). (xasprintf.$(objext)): New target. * functions.texi: Regenerate. include/ChangeLog: * libiberty.h (xasprintf): Declare. gcc/ChangeLog: * gengtype.h (xasprintf): Remove declaration. * gengtype.c (xasprintf): Remove. Co-Authored-By: Ben Elliston Co-Authored-By: Manuel López-Ibáñez From-SVN: r219060 --- gcc/ChangeLog | 5 ++++ gcc/gengtype.c | 17 -------------- gcc/gengtype.h | 3 --- include/ChangeLog | 6 +++++ include/libiberty.h | 5 ++++ libiberty/ChangeLog | 10 ++++++++ libiberty/Makefile.in | 21 +++++++++++++---- libiberty/functions.texi | 9 ++++++++ libiberty/xasprintf.c | 50 ++++++++++++++++++++++++++++++++++++++++ 9 files changed, 101 insertions(+), 25 deletions(-) create mode 100644 libiberty/xasprintf.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 259e2af9f98..d2870d6b21d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-12-24 Uros Bizjak + + * gengtype.h (xasprintf): Remove declaration. + * gengtype.c (xasprintf): Remove. + 2014-12-24 Nick Clifton PR target/64160 diff --git a/gcc/gengtype.c b/gcc/gengtype.c index 3f9ad0b3463..e87bea0ab46 100644 --- a/gcc/gengtype.c +++ b/gcc/gengtype.c @@ -119,23 +119,6 @@ error_at_line (const struct fileloc *pos, const char *msg, ...) va_end (ap); } - -/* asprintf, but produces fatal message on out-of-memory. */ -char * -xasprintf (const char *format, ...) -{ - int n; - char *result; - va_list ap; - - va_start (ap, format); - n = vasprintf (&result, format, ap); - if (result == NULL || n < 0) - fatal ("out of memory"); - va_end (ap); - - return result; -} /* Locate the ultimate base class of struct S. */ diff --git a/gcc/gengtype.h b/gcc/gengtype.h index e4596039a01..3da57e84440 100644 --- a/gcc/gengtype.h +++ b/gcc/gengtype.h @@ -418,9 +418,6 @@ void write_state (const char* path); extern void error_at_line (const struct fileloc *pos, const char *msg, ...) ATTRIBUTE_PRINTF_2; -/* Like asprintf, but calls fatal() on out of memory. */ -extern char *xasprintf (const char *, ...) ATTRIBUTE_PRINTF_1; - /* Constructor routines for types. */ extern void do_typedef (const char *s, type_p t, struct fileloc *pos); extern void do_scalar_typedef (const char *s, struct fileloc *pos); diff --git a/include/ChangeLog b/include/ChangeLog index 1d5f7013321..dbf2554238d 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,9 @@ +2014-12-24 Uros Bizjak + Ben Elliston + Manuel Lopez-Ibanez + + * libiberty.h (xasprintf): Declare. + 2014-12-11 Uros Bizjak Ben Elliston Manuel Lopez-Ibanez diff --git a/include/libiberty.h b/include/libiberty.h index b9694f0f093..aa0d92c8c20 100644 --- a/include/libiberty.h +++ b/include/libiberty.h @@ -629,6 +629,11 @@ extern int pwait (int, int *, int); extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; #endif +/* Like asprintf but allocates memory without fail. This works like + xmalloc. */ + +extern char *xasprintf (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_PRINTF_1; + #if !HAVE_DECL_VASPRINTF /* Like vsprintf but provides a pointer to malloc'd storage, which must be freed by the caller. */ diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index e4a8ce81b25..ac2387552ed 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,13 @@ +2014-12-24 Uros Bizjak + Ben Elliston + Manuel Lopez-Ibanez + + * xasprintf.c: New file. + * Makefile.in (CFILES): Add xasprintf.c. + (REQUIRED_OFILES): Add xasprintf.$(objext). + (xasprintf.$(objext)): New target. + * functions.texi: Regenerate. + 2014-12-11 Uros Bizjak Ben Elliston Manuel Lopez-Ibanez diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in index e7e17af226c..f06cc69a973 100644 --- a/libiberty/Makefile.in +++ b/libiberty/Makefile.in @@ -158,8 +158,8 @@ CFILES = alloca.c argv.c asprintf.c atexit.c \ vasprintf.c vfork.c vfprintf.c vprintf.c vprintf-support.c \ vsnprintf.c vsprintf.c \ waitpid.c \ - xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c \ - xstrndup.c xvasprintf.c + xasprintf.c xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c \ + xstrerror.c xstrndup.c xvasprintf.c # These are always included in the library. The first four are listed # first and by compile time to optimize parallel builds. @@ -190,9 +190,10 @@ REQUIRED_OFILES = \ ./splay-tree.$(objext) ./stack-limit.$(objext) \ ./strerror.$(objext) ./strsignal.$(objext) \ ./timeval-utils.$(objext) ./unlink-if-ordinary.$(objext) \ - ./xatexit.$(objext) ./xexit.$(objext) ./xmalloc.$(objext) \ - ./xmemdup.$(objext) ./xstrdup.$(objext) ./xstrerror.$(objext) \ - ./xstrndup.$(objext) ./xvasprintf.$(objext) + ./xasprintf.$(objext) ./xatexit.$(objext) ./xexit.$(objext) \ + ./xmalloc.$(objext) ./xmemdup.$(objext) ./xstrdup.$(objext) \ + ./xstrerror.$(objext) ./xstrndup.$(objext) \ + ./xvasprintf.$(objext) # These are all the objects that configure may add to the library via # $funcs or EXTRA_OFILES. This list exists here only for "make @@ -1618,6 +1619,16 @@ $(CONFIGURED_OFILES): stamp-picdir stamp-noasandir else true; fi $(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION) +./xasprintf.$(objext): $(srcdir)/xasprintf.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/xasprintf.c -o pic/$@; \ + else true; fi + if [ x"$(NOASANFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xasprintf.c -o noasan/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/xasprintf.c $(OUTPUT_OPTION) + ./xatexit.$(objext): $(srcdir)/xatexit.c config.h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ diff --git a/libiberty/functions.texi b/libiberty/functions.texi index 39064b4166c..b5f4e809d06 100644 --- a/libiberty/functions.texi +++ b/libiberty/functions.texi @@ -1923,6 +1923,15 @@ if an error occurred while writing to FILE. @end deftypefn +@c xasprintf.c:31 +@deftypefn Replacement char* xasprintf (const char *@var{format}, ...) + +Print to allocated string without fail. If @code{xasprintf} fails, +this will print a message to @code{stderr} (using the name set by +@code{xmalloc_set_program_name}, if any) and then call @code{xexit}. + +@end deftypefn + @c xatexit.c:11 @deftypefun int xatexit (void (*@var{fn}) (void)) diff --git a/libiberty/xasprintf.c b/libiberty/xasprintf.c new file mode 100644 index 00000000000..4f72bb26655 --- /dev/null +++ b/libiberty/xasprintf.c @@ -0,0 +1,50 @@ +/* Implement the xasprintf function. + Copyright (C) 2014 Free Software Foundation, Inc. + Contributed by Manuel Lopez-Ibanez. + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If not, write +to the Free Software Foundation, Inc., 51 Franklin Street - Fifth +Floor, Boston, MA 02110-1301, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include "ansidecl.h" +#include "libiberty.h" + +#include + +/* + +@deftypefn Replacement char* xasprintf (const char *@var{format}, ...) + +Print to allocated string without fail. If @code{xasprintf} fails, +this will print a message to @code{stderr} (using the name set by +@code{xmalloc_set_program_name}, if any) and then call @code{xexit}. + +@end deftypefn + +*/ + +char * +xasprintf (const char *fmt, ...) +{ + char *buf; + va_list ap; + va_start (ap, fmt); + buf = xvasprintf (fmt, ap); + va_end (ap); + return buf; +} -- 2.30.2