]> Savannah Git Hosting - gnulib.git/commitdiff
libc-config: merge from glibc
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 Jun 2018 15:50:36 +0000 (08:50 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 Jun 2018 15:52:38 +0000 (08:52 -0700)
* lib/cdefs.h (__inline, __restrict):
Copy from current glibc.  This fixes glibc bug 17721,
which Gnulib had already fixed in a different way.
(__nonnull): Lessen the distance from glibc by using the
glibc definition inside an ‘#ifndef __nonnull’.
(__attribute_nonstring__): New macro, copied from
current glibc.
* lib/libc-config.h (__attribute_nonstring__): New undef.
(__restrict): Remove; workaround no longer needed.
Keep the __inline workaround, though, as it uses HAVE___INLINE to
support more compilers than the glibc __inline can.

ChangeLog
lib/cdefs.h
lib/libc-config.h

index 125c66b1bfe44bf89e4afd4c7b4be329c1d14f2d..bb2fabf2490e31d27038bf9e0fbee60db2a2c13b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2018-06-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       libc-config: merge from glibc
+       * lib/cdefs.h (__inline, __restrict):
+       Copy from current glibc.  This fixes glibc bug 17721,
+       which Gnulib had already fixed in a different way.
+       (__nonnull): Lessen the distance from glibc by using the
+       glibc definition inside an ‘#ifndef __nonnull’.
+       (__attribute_nonstring__): New macro, copied from
+       current glibc.
+       * lib/libc-config.h (__attribute_nonstring__): New undef.
+       (__restrict): Remove; workaround no longer needed.
+       Keep the __inline workaround, though, as it uses HAVE___INLINE to
+       support more compilers than the glibc __inline can.
+
 2018-06-24  Bruno Haible  <bruno@clisp.org>
 
        mbrtowc, wcwidth: Fix MT-safety bug (regression from 2018-06-23).
index 76325c5de57211767525bbca00b3504d03ee4842..b1645312487cf0b66e007eb22f9d9092150040ff 100644 (file)
 
 #else  /* Not GCC.  */
 
-# define __inline              /* No inline functions.  */
+# if (defined __cplusplus                                              \
+      || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
+#  define __inline     inline
+# else
+#  define __inline             /* No inline functions.  */
+# endif
 
 # define __THROW
 # define __THROWNL
 # define __attribute_format_strfmon__(a,b) /* Ignore */
 #endif
 
-/* The nonnull function attribute allows to mark pointer parameters which
-   must not be NULL.
-   In Gnulib we use the macro _GL_ARG_NONNULL instead of __nonnull, because
-   __nonnull is defined in an incompatible way in FreeBSD's include files.  */
+/* The nonnull function attribute marks pointer parameters that
+   must not be NULL.  Do not define __nonnull if it is already defined,
+   for portability when this file is used in Gnulib.  */
+#ifndef __nonnull
+# if __GNUC_PREREQ (3,3)
+#  define __nonnull(params) __attribute__ ((__nonnull__ params))
+# else
+#  define __nonnull(params)
+# endif
+#endif
 
 /* If fortification mode, we warn about unused results of certain
    function calls which can lead to problems.  */
 
 /* __restrict is known in EGCS 1.2 and above. */
 #if !__GNUC_PREREQ (2,92)
-# define __restrict    /* Ignore */
+# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#  define __restrict   restrict
+# else
+#  define __restrict   /* Ignore */
+# endif
 #endif
 
 /* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
 # endif
 #endif
 
+#if __GNUC_PREREQ (8, 0)
+/* Describes a char array whose address can safely be passed as the first
+   argument to strncpy and strncat, as the char array is not necessarily
+   a NUL-terminated string.  */
+# define __attribute_nonstring__ __attribute__ ((__nonstring__))
+#else
+# define __attribute_nonstring__
+#endif
+
 #if (!defined _Static_assert && !defined __cplusplus \
      && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
      && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__))
index 14f0bb4075e03da0eae2062f4afd700b43928723..98dc7c5616f4cdb4b4ee6edb888ad1add6809f8e 100644 (file)
@@ -33,7 +33,8 @@
 #include <config.h>
 
 /* On glibc this includes <features.h> and <sys/cdefs.h> and #defines
-   _FEATURES_H, __WORDSIZE, and __set_errno.  On other platforms this
+   _FEATURES_H, __WORDSIZE, and __set_errno.  On FreeBSD 11 it
+   includes <sys/cdefs.h> which defines __nonnull.  Elsewhere it
    is harmless.  */
 #include <errno.h>
 
 #undef __attribute_format_strfmon__
 #undef __attribute_malloc__
 #undef __attribute_noinline__
+#undef __attribute_nonstring__
 #undef __attribute_pure__
 #undef __attribute_used__
 #undef __attribute_warn_unused_result__
 # endif
 #endif
 
-/* <cdefs.h> __restrict is too pessimistic for non-GCC.  GCC 2.95 and
-   later have "__restrict", and C99 compilers have "restrict".  */
-#undef __restrict
-#if !__GNUC_PREREQ (2, 95)
-# if 199901L <= __STDC_VERSION__
-#  define __restrict restrict
-# else
-#  define __restrict
-# endif
-#endif
-
 
 /* A substitute for glibc <libc-symbols.h>, good enough for Gnulib.  */
 #define attribute_hidden