From d9443441ff5ceb940d62878d5e1c0dd1d1e8ac62 Mon Sep 17 00:00:00 2001 From: Paul Eggert
Date: Sun, 24 Jun 2018 08:50:36 -0700 Subject: [PATCH] libc-config: merge from glibc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 | 15 +++++++++++++++ lib/cdefs.h | 36 ++++++++++++++++++++++++++++++------ lib/libc-config.h | 15 +++------------ 3 files changed, 48 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 125c66b..bb2fabf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2018-06-24 Paul Eggert + + 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 mbrtowc, wcwidth: Fix MT-safety bug (regression from 2018-06-23). diff --git a/lib/cdefs.h b/lib/cdefs.h index 76325c5..b164531 100644 --- a/lib/cdefs.h +++ b/lib/cdefs.h @@ -72,7 +72,12 @@ #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 @@ -282,10 +287,16 @@ # 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. */ @@ -365,7 +376,11 @@ /* __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 @@ -404,6 +419,15 @@ # 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__)) diff --git a/lib/libc-config.h b/lib/libc-config.h index 14f0bb4..98dc7c5 100644 --- a/lib/libc-config.h +++ b/lib/libc-config.h @@ -33,7 +33,8 @@ #include