OSDN Git Service

2000-06-17 H.J. Lu <hjl@gnu.org>
authorhjl <hjl>
Sat, 17 Jun 2000 23:08:18 +0000 (23:08 +0000)
committerhjl <hjl>
Sat, 17 Jun 2000 23:08:18 +0000 (23:08 +0000)
* getopt.h: Updated from gcc.
* libiberty.h: Likewise.
* symcat.h: Likewise.

include/ChangeLog
include/getopt.h
include/libiberty.h
include/symcat.h

index 18b9742..3618044 100644 (file)
@@ -1,5 +1,11 @@
 2000-06-17  H.J. Lu  <hjl@gnu.org>
 
+       * getopt.h: Updated from gcc.
+       * libiberty.h: Likewise.
+       * symcat.h: Likewise.
+
+2000-06-17  H.J. Lu  <hjl@gnu.org>
+
        * ansidecl.h: Updated from gcc.
 
 2000-06-15  H.J. Lu  <hjl@gnu.org>
index fb30719..9620fc7 100644 (file)
@@ -99,13 +99,20 @@ struct option
 #define optional_argument      2
 
 #if defined (__STDC__) && __STDC__
-#ifdef __GNU_LIBRARY__
+/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
+   undefined, we haven't run the autoconf check so provide the
+   declaration without arguments.  If it is 0, we checked and failed
+   to find the declaration so provide a fully prototyped one.  If it
+   is 1, we found it so don't provide any declaration at all.  */
+#if defined (__GNU_LIBRARY__) || (defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT)
 /* Many other libraries have conflicting prototypes for getopt, with
    differences in the consts, in stdlib.h.  To avoid compilation
    errors, only prototype getopt for the GNU C library.  */
 extern int getopt (int argc, char *const *argv, const char *shortopts);
 #else /* not __GNU_LIBRARY__ */
+# if !defined (HAVE_DECL_GETOPT)
 extern int getopt ();
+# endif
 #endif /* __GNU_LIBRARY__ */
 extern int getopt_long (int argc, char *const *argv, const char *shortopts,
                        const struct option *longopts, int *longind);
index cf31366..476e016 100644 (file)
@@ -19,7 +19,7 @@ extern "C" {
 /* Build an argument vector from a string.  Allocates memory using
    malloc.  Use freeargv to free the vector.  */
 
-extern char **buildargv PARAMS ((char *));
+extern char **buildargv PARAMS ((char *)) ATTRIBUTE_MALLOC;
 
 /* Free a vector returned by buildargv.  */
 
@@ -28,7 +28,7 @@ extern void freeargv PARAMS ((char **));
 /* Duplicate an argument vector. Allocates memory using malloc.  Use
    freeargv to free the vector.  */
 
-extern char **dupargv PARAMS ((char **));
+extern char **dupargv PARAMS ((char **)) ATTRIBUTE_MALLOC;
 
 
 /* Return the last component of a path name.  Note that we can't use a
@@ -36,28 +36,44 @@ extern char **dupargv PARAMS ((char **));
    across different systems, sometimes as "char *" and sometimes as
    "const char *" */
 
-#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__)
+/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
+   undefined, we haven't run the autoconf check so provide the
+   declaration without arguments.  If it is 0, we checked and failed
+   to find the declaration so provide a fully prototyped one.  If it
+   is 1, we found it so don't provide any declaration at all.  */
+#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || (defined (HAVE_DECL_BASENAME) && !HAVE_DECL_BASENAME)
 extern char *basename PARAMS ((const char *));
 #else
+# if !defined (HAVE_DECL_BASENAME)
 extern char *basename ();
+# endif
 #endif
 
 /* Concatenate an arbitrary number of strings, up to (char *) NULL.
    Allocates memory using xmalloc.  */
 
-extern char *concat PARAMS ((const char *, ...));
+extern char *concat PARAMS ((const char *, ...)) ATTRIBUTE_MALLOC;
 
 /* Check whether two file descriptors refer to the same file.  */
 
 extern int fdmatch PARAMS ((int fd1, int fd2));
 
+/* Get the working directory.  The result is cached, so don't call
+   chdir() between calls to getpwd().  */
+
+extern char * getpwd PARAMS ((void));
+
 /* Get the amount of time the process has run, in microseconds.  */
 
 extern long get_run_time PARAMS ((void));
 
 /* Choose a temporary directory to use for scratch files.  */
 
-extern char *choose_temp_base PARAMS ((void));
+extern char *choose_temp_base PARAMS ((void)) ATTRIBUTE_MALLOC;
+
+/* Return a temporary file name or NULL if unable to create one.  */
+
+extern char *make_temp_file PARAMS ((const char *)) ATTRIBUTE_MALLOC;
 
 /* Allocate memory filled with spaces.  Allocates using malloc.  */
 
@@ -108,11 +124,7 @@ extern int xatexit PARAMS ((void (*fn) (void)));
 
 /* Exit, calling all the functions registered with xatexit.  */
 
-#ifndef __GNUC__
-extern void xexit PARAMS ((int status));
-#else
-void xexit PARAMS ((int status)) __attribute__ ((noreturn));
-#endif
+extern void xexit PARAMS ((int status)) ATTRIBUTE_NORETURN;
 
 /* Set the program name used by xmalloc.  */
 
@@ -125,24 +137,29 @@ extern void xmalloc_set_program_name PARAMS ((const char *));
 #ifdef ANSI_PROTOTYPES
 /* Get a definition for size_t.  */
 #include <stddef.h>
+/* Get a definition for va_list.  */
+#include <stdarg.h>
 #endif
-extern PTR xmalloc PARAMS ((size_t));
-
-/* Reallocate memory without fail.  This works like xmalloc.
+extern PTR xmalloc PARAMS ((size_t)) ATTRIBUTE_MALLOC;
 
-   FIXME: We do not declare the parameter types for the same reason as
-   xmalloc.  */
+/* Reallocate memory without fail.  This works like xmalloc.  Note,
+   realloc type functions are not suitable for attribute malloc since
+   they may return the same address across multiple calls. */
 
 extern PTR xrealloc PARAMS ((PTR, size_t));
 
 /* Allocate memory without fail and set it to zero.  This works like
    xmalloc.  */
 
-extern PTR xcalloc PARAMS ((size_t, size_t));
+extern PTR xcalloc PARAMS ((size_t, size_t)) ATTRIBUTE_MALLOC;
 
 /* Copy a string into a memory buffer without fail.  */
 
-extern char *xstrdup PARAMS ((const char *));
+extern char *xstrdup PARAMS ((const char *)) ATTRIBUTE_MALLOC;
+
+/* Copy an existing memory buffer to a new memory buffer without fail.  */
+
+extern PTR xmemdup PARAMS ((const PTR, size_t, size_t)) ATTRIBUTE_MALLOC;
 
 /* hex character manipulation routines */
 
@@ -172,6 +189,17 @@ extern int pexecute PARAMS ((const char *, char * const *, const char *,
 
 extern int pwait PARAMS ((int, int *, int));
 
+/* Like sprintf but provides a pointer to malloc'd storage, which must
+   be freed by the caller.  */
+
+extern int asprintf PARAMS ((char **, const char *, ...)) ATTRIBUTE_PRINTF_2;
+
+/* Like vsprintf but provides a pointer to malloc'd storage, which
+   must be freed by the caller.  */
+
+extern int vasprintf PARAMS ((char **, const char *, va_list))
+  ATTRIBUTE_PRINTF(2,0);
+
 #ifdef __cplusplus
 }
 #endif
index 01efada..61ce1e9 100644 (file)
@@ -1,6 +1,6 @@
 /* Symbol concatenation utilities.
 
-   Copyright (C) 1998, Free Software Foundation, Inc.
+   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #ifndef SYM_CAT_H
 #define SYM_CAT_H
 
-#if defined (__STDC__) || defined (ALMOST_STDC)
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
 #define CONCAT2(a,b)    a##b
 #define CONCAT3(a,b,c)  a##b##c
 #define CONCAT4(a,b,c,d) a##b##c##d
 #define STRINGX(s) #s
 #else
+/* Note one should never pass extra whitespace to the CONCATn macros,
+   e.g. CONCAT2(foo, bar) because traditonal C will keep the space between
+   the two labels instead of concatenating them.  Instead, make sure to
+   write CONCAT2(foo,bar).  */
 #define CONCAT2(a,b)    a/**/b
 #define CONCAT3(a,b,c)  a/**/b/**/c
 #define CONCAT4(a,b,c,d) a/**/b/**/c/**/d
-#define STRINGX(s) "?"
+#define STRINGX(s) "s"
 #endif
 
 #define XCONCAT2(a,b)     CONCAT2(a,b)
 #define XCONCAT3(a,b,c)   CONCAT3(a,b,c)
 #define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d)
 
+/* Note the layer of indirection here is typically used to allow
+   stringification of the expansion of macros.  I.e. "#define foo
+   bar", "XSTRING(foo)", to yield "bar".  Be aware that this only
+   works for __STDC__, not for traditional C which will still resolve
+   to "foo".  */
 #define XSTRING(s) STRINGX(s) 
 
-#endif SYM_CAT_H
+#endif /* SYM_CAT_H */