+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).
#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__))
#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