diff options
Diffstat (limited to 'lib/stdlib.in.h')
| -rw-r--r-- | lib/stdlib.in.h | 724 | 
1 files changed, 629 insertions, 95 deletions
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h index 3a3796d1..d52c2f79 100644 --- a/lib/stdlib.in.h +++ b/lib/stdlib.in.h @@ -1,27 +1,18 @@  /* A GNU-like <stdlib.h>. -   Copyright (C) 1995, 2001-2004, 2006-2018 Free Software Foundation, Inc. +   Copyright (C) 1995, 2001-2004, 2006-2022 Free Software Foundation, Inc. -   This program is free software: you can redistribute it and/or -   modify it under the terms of either: +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. -     * the GNU Lesser General Public License as published by the Free -       Software Foundation; either version 3 of the License, or (at your -       option) any later version. - -   or - -     * the GNU General Public License as published by the Free -       Software Foundation; either version 2 of the License, or (at your -       option) any later version. - -   or both in parallel, as here. -   This program is distributed in the hope that it will be useful, +   This file 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 General Public License for more details. +   GNU Lesser General Public License for more details. -   You should have received a copy of the GNU General Public License +   You should have received a copy of the GNU Lesser General Public License     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */  #if __GNUC__ >= 3 @@ -62,8 +53,8 @@  # include <sys/loadavg.h>  #endif -/* Native Windows platforms declare mktemp() in <io.h>.  */ -#if 0 && (defined _WIN32 && ! defined __CYGWIN__) +/* Native Windows platforms declare _mktemp() in <io.h>.  */ +#if defined _WIN32 && !defined __CYGWIN__  # include <io.h>  #endif @@ -99,20 +90,52 @@ struct random_data  # endif  #endif -#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) +#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__)  /* On Mac OS X 10.3, only <unistd.h> declares mkstemp.  */  /* On Mac OS X 10.5, only <unistd.h> declares mkstemps.  */ +/* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps.  */  /* On Cygwin 1.7.1, only <unistd.h> declares getsubopt.  */  /* But avoid namespace pollution on glibc systems and native Windows.  */  # include <unistd.h>  #endif +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers +   that can be freed by passing them as the Ith argument to the +   function F.  */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 +#  define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +#  define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that +   can be freed via 'free'; it can be used only after declaring 'free'.  */ +/* Applies to: functions.  Cannot be used on inline functions.  */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly +   allocated memory.  */ +/* Applies to: functions.  */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +#  define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +#  define _GL_ATTRIBUTE_MALLOC +# endif +#endif +  /* The __attribute__ feature is available in gcc versions 2.5 and later.     The attribute __pure__ was added in gcc 2.96.  */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +#  define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +#  define _GL_ATTRIBUTE_PURE /* empty */ +# endif  #endif  /* The definition of _Noreturn is copied here.  */ @@ -155,6 +178,69 @@ _GL_WARN_ON_USE (_Exit, "_Exit is unportable - "  #endif +#if @GNULIB_FREE_POSIX@ +# if @REPLACE_FREE@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef free +#   define free rpl_free +#  endif +_GL_FUNCDECL_RPL (free, void, (void *ptr)); +_GL_CXXALIAS_RPL (free, void, (void *ptr)); +# else +_GL_CXXALIAS_SYS (free, void, (void *ptr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (free); +# endif +#elif defined GNULIB_POSIXCHECK +# undef free +/* Assume free is always declared.  */ +_GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - " +                 "use gnulib module free for portability"); +#endif + + +/* Allocate memory with indefinite extent and specified alignment.  */ +#if @GNULIB_ALIGNED_ALLOC@ +# if @REPLACE_ALIGNED_ALLOC@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef aligned_alloc +#   define aligned_alloc rpl_aligned_alloc +#  endif +_GL_FUNCDECL_RPL (aligned_alloc, void *, +                  (size_t alignment, size_t size) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t alignment, size_t size)); +# else +#  if @HAVE_ALIGNED_ALLOC@ +#   if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free.  */ +_GL_FUNCDECL_SYS (aligned_alloc, void *, +                  (size_t alignment, size_t size) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +#   endif +_GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size)); +#  endif +# endif +# if @HAVE_ALIGNED_ALLOC@ +_GL_CXXALIASWARN (aligned_alloc); +# endif +#else +# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined aligned_alloc +/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free.  */ +_GL_FUNCDECL_SYS (aligned_alloc, void *, +                  (size_t alignment, size_t size) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +#  undef aligned_alloc +#  if HAVE_RAW_DECL_ALIGNED_ALLOC +_GL_WARN_ON_USE (aligned_alloc, "aligned_alloc is not portable - " +                 "use gnulib module aligned_alloc for portability"); +#  endif +# endif +#endif +  #if @GNULIB_ATOLL@  /* Parse a signed decimal integer.     Returns the value of the integer.  Errors are not detected.  */ @@ -174,22 +260,41 @@ _GL_WARN_ON_USE (atoll, "atoll is unportable - "  #endif  #if @GNULIB_CALLOC_POSIX@ -# if @REPLACE_CALLOC@ +# if (@GNULIB_CALLOC_POSIX@ && @REPLACE_CALLOC_FOR_CALLOC_POSIX@) \ +     || (@GNULIB_CALLOC_GNU@ && @REPLACE_CALLOC_FOR_CALLOC_GNU@)  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)  #   undef calloc  #   define calloc rpl_calloc  #  endif -_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); +_GL_FUNCDECL_RPL (calloc, void *, +                  (size_t nmemb, size_t size) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);  _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size));  # else +#  if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free.  */ +_GL_FUNCDECL_SYS (calloc, void *, +                  (size_t nmemb, size_t size) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +#  endif  _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (calloc); -#elif defined GNULIB_POSIXCHECK -# undef calloc +# endif +#else +# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined calloc +/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free.  */ +_GL_FUNCDECL_SYS (calloc, void *, +                  (size_t nmemb, size_t size) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +#  undef calloc  /* Assume calloc is always declared.  */  _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "                   "use gnulib module calloc-posix for portability"); +# endif  #endif  #if @GNULIB_CANONICALIZE_FILE_NAME@ @@ -197,23 +302,108 @@ _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)  #   define canonicalize_file_name rpl_canonicalize_file_name  #  endif -_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) -                                                  _GL_ARG_NONNULL ((1))); +_GL_FUNCDECL_RPL (canonicalize_file_name, char *, +                  (const char *name) +                  _GL_ARG_NONNULL ((1)) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);  _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));  # else -#  if !@HAVE_CANONICALIZE_FILE_NAME@ -_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) -                                                  _GL_ARG_NONNULL ((1))); +#  if !@HAVE_CANONICALIZE_FILE_NAME@ || __GNUC__ >= 11 +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, +                  (const char *name) +                  _GL_ARG_NONNULL ((1)) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);  #  endif  _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));  # endif +# ifndef GNULIB_defined_canonicalize_file_name +#  define GNULIB_defined_canonicalize_file_name \ +     (!@HAVE_CANONICALIZE_FILE_NAME@ || @REPLACE_CANONICALIZE_FILE_NAME@) +# endif  _GL_CXXALIASWARN (canonicalize_file_name); -#elif defined GNULIB_POSIXCHECK -# undef canonicalize_file_name -# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME +#else +# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined canonicalize_file_name +/* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or +   rpl_free.  */ +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, +                  (const char *name) +                  _GL_ARG_NONNULL ((1)) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +#  undef canonicalize_file_name +#  if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME  _GL_WARN_ON_USE (canonicalize_file_name,                   "canonicalize_file_name is unportable - "                   "use gnulib module canonicalize-lgpl for portability"); +#  endif +# endif +#endif + +#if @GNULIB_MDA_ECVT@ +/* On native Windows, map 'ecvt' to '_ecvt', so that -loldnames is not +   required.  In C++ with GNULIB_NAMESPACE, avoid differences between +   platforms by defining GNULIB_NAMESPACE::ecvt on all platforms that have +   it.  */ +# if defined _WIN32 && !defined __CYGWIN__ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef ecvt +#   define ecvt _ecvt +#  endif +_GL_CXXALIAS_MDA (ecvt, char *, +                  (double number, int ndigits, int *decptp, int *signp)); +# else +#  if @HAVE_DECL_ECVT@ +_GL_CXXALIAS_SYS (ecvt, char *, +                  (double number, int ndigits, int *decptp, int *signp)); +#  endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_ECVT@ +_GL_CXXALIASWARN (ecvt); +# endif +#endif + +#if @GNULIB_MDA_FCVT@ +/* On native Windows, map 'fcvt' to '_fcvt', so that -loldnames is not +   required.  In C++ with GNULIB_NAMESPACE, avoid differences between +   platforms by defining GNULIB_NAMESPACE::fcvt on all platforms that have +   it.  */ +# if defined _WIN32 && !defined __CYGWIN__ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef fcvt +#   define fcvt _fcvt +#  endif +_GL_CXXALIAS_MDA (fcvt, char *, +                  (double number, int ndigits, int *decptp, int *signp)); +# else +#  if @HAVE_DECL_FCVT@ +_GL_CXXALIAS_SYS (fcvt, char *, +                  (double number, int ndigits, int *decptp, int *signp)); +#  endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCVT@ +_GL_CXXALIASWARN (fcvt); +# endif +#endif + +#if @GNULIB_MDA_GCVT@ +/* On native Windows, map 'gcvt' to '_gcvt', so that -loldnames is not +   required.  In C++ with GNULIB_NAMESPACE, avoid differences between +   platforms by defining GNULIB_NAMESPACE::gcvt on all platforms that have +   it.  */ +# if defined _WIN32 && !defined __CYGWIN__ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef gcvt +#   define gcvt _gcvt +#  endif +_GL_CXXALIAS_MDA (gcvt, char *, (double number, int ndigits, char *buf)); +# else +#  if @HAVE_DECL_GCVT@ +_GL_CXXALIAS_SYS (gcvt, char *, (double number, int ndigits, char *buf)); +#  endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_GCVT@ +_GL_CXXALIASWARN (gcvt);  # endif  #endif @@ -246,8 +436,8 @@ _GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - "         element (or NULL if it doesn't contain an "=" sign),       - It returns the index of the "token" in the given array of tokens.     Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. -   For more details see the POSIX:2001 specification. -   http://www.opengroup.org/susv3xsh/getsubopt.html */ +   For more details see the POSIX specification. +   https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */  # if !@HAVE_GETSUBOPT@  _GL_FUNCDECL_SYS (getsubopt, int,                    (char **optionp, char *const *tokens, char **valuep) @@ -285,23 +475,42 @@ _GL_WARN_ON_USE (grantpt, "grantpt is not portable - "     by never specifying a zero size), so it does not need malloc or     realloc to be redefined.  */  #if @GNULIB_MALLOC_POSIX@ -# if @REPLACE_MALLOC@ +# if (@GNULIB_MALLOC_POSIX@ && @REPLACE_MALLOC_FOR_MALLOC_POSIX@) \ +     || (@GNULIB_MALLOC_GNU@ && @REPLACE_MALLOC_FOR_MALLOC_GNU@)  #  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \          || _GL_USE_STDLIB_ALLOC)  #   undef malloc  #   define malloc rpl_malloc  #  endif -_GL_FUNCDECL_RPL (malloc, void *, (size_t size)); +_GL_FUNCDECL_RPL (malloc, void *, +                  (size_t size) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);  _GL_CXXALIAS_RPL (malloc, void *, (size_t size));  # else +#  if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free.  */ +_GL_FUNCDECL_SYS (malloc, void *, +                  (size_t size) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +#  endif  _GL_CXXALIAS_SYS (malloc, void *, (size_t size));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (malloc); -#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC -# undef malloc +# endif +#else +# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined malloc +/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free.  */ +_GL_FUNCDECL_SYS (malloc, void *, +                  (size_t size) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +#  undef malloc  /* Assume malloc is always declared.  */  _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "                   "use gnulib module malloc-posix for portability"); +# endif  #endif  /* Convert a multibyte character to a wide character.  */ @@ -311,12 +520,27 @@ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "  #   undef mbtowc  #   define mbtowc rpl_mbtowc  #  endif -_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); -_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +_GL_FUNCDECL_RPL (mbtowc, int, +                  (wchar_t *restrict pwc, const char *restrict s, size_t n)); +_GL_CXXALIAS_RPL (mbtowc, int, +                  (wchar_t *restrict pwc, const char *restrict s, size_t n));  # else -_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +#  if !@HAVE_MBTOWC@ +_GL_FUNCDECL_SYS (mbtowc, int, +                  (wchar_t *restrict pwc, const char *restrict s, size_t n)); +#  endif +_GL_CXXALIAS_SYS (mbtowc, int, +                  (wchar_t *restrict pwc, const char *restrict s, size_t n));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (mbtowc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbtowc +# if HAVE_RAW_DECL_MBTOWC +_GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - " +                 "use gnulib module mbtowc for portability"); +# endif  #endif  #if @GNULIB_MKDTEMP@ @@ -451,6 +675,51 @@ _GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - "  # endif  #endif +#if @GNULIB_MDA_MKTEMP@ +/* On native Windows, map 'mktemp' to '_mktemp', so that -loldnames is not +   required.  In C++ with GNULIB_NAMESPACE, avoid differences between +   platforms by defining GNULIB_NAMESPACE::mktemp always.  */ +# if defined _WIN32 && !defined __CYGWIN__ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef mktemp +#   define mktemp _mktemp +#  endif +_GL_CXXALIAS_MDA (mktemp, char *, (char * /*template*/)); +# else +_GL_CXXALIAS_SYS (mktemp, char *, (char * /*template*/)); +# endif +_GL_CXXALIASWARN (mktemp); +#endif + +/* Allocate memory with indefinite extent and specified alignment.  */ +#if @GNULIB_POSIX_MEMALIGN@ +# if @REPLACE_POSIX_MEMALIGN@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef posix_memalign +#   define posix_memalign rpl_posix_memalign +#  endif +_GL_FUNCDECL_RPL (posix_memalign, int, +                  (void **memptr, size_t alignment, size_t size) +                  _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_memalign, int, +                  (void **memptr, size_t alignment, size_t size)); +# else +#  if @HAVE_POSIX_MEMALIGN@ +_GL_CXXALIAS_SYS (posix_memalign, int, +                  (void **memptr, size_t alignment, size_t size)); +#  endif +# endif +# if @HAVE_POSIX_MEMALIGN@ +_GL_CXXALIASWARN (posix_memalign); +# endif +#elif defined GNULIB_POSIXCHECK +# undef posix_memalign +# if HAVE_RAW_DECL_POSIX_MEMALIGN +_GL_WARN_ON_USE (posix_memalign, "posix_memalign is not portable - " +                 "use gnulib module posix_memalign for portability"); +# endif +#endif +  #if @GNULIB_POSIX_OPENPT@  /* Return an FD open to the master side of a pseudo-terminal.  Flags should     include O_RDWR, and may also include O_NOCTTY.  */ @@ -509,6 +778,9 @@ _GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len));  #  endif  _GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len));  # endif +# ifndef GNULIB_defined_ptsname_r +#  define GNULIB_defined_ptsname_r (!@HAVE_PTSNAME_R@ || @REPLACE_PTSNAME_R@) +# endif  _GL_CXXALIASWARN (ptsname_r);  #elif defined GNULIB_POSIXCHECK  # undef ptsname_r @@ -526,6 +798,28 @@ _GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - "  #  endif  _GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1)));  _GL_CXXALIAS_RPL (putenv, int, (char *string)); +# elif defined _WIN32 && !defined __CYGWIN__ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef putenv +#   define putenv _putenv +#  endif +_GL_CXXALIAS_MDA (putenv, int, (char *string)); +# else +_GL_CXXALIAS_SYS (putenv, int, (char *string)); +# endif +_GL_CXXALIASWARN (putenv); +#elif @GNULIB_MDA_PUTENV@ +/* On native Windows, map 'putenv' to '_putenv', so that -loldnames is not +   required.  In C++ with GNULIB_NAMESPACE, avoid differences between +   platforms by defining GNULIB_NAMESPACE::putenv always.  */ +# if defined _WIN32 && !defined __CYGWIN__ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef putenv +#   define putenv _putenv +#  endif +/* Need to cast, because on mingw, the parameter is either +   'const char *string' or 'char *string'.  */ +_GL_CXXALIAS_MDA_CAST (putenv, int, (char *string));  # else  _GL_CXXALIAS_SYS (putenv, int, (char *string));  # endif @@ -536,29 +830,35 @@ _GL_CXXALIASWARN (putenv);  /* Sort an array of NMEMB elements, starting at address BASE, each element     occupying SIZE bytes, in ascending order according to the comparison     function COMPARE.  */ +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_qsort_r_fn_types +typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *); +#  define GNULIB_defined_qsort_r_fn_types 1 +# endif +# ifdef __cplusplus +} +# endif  # if @REPLACE_QSORT_R@  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)  #   undef qsort_r  #   define qsort_r rpl_qsort_r  #  endif  _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, -                                  int (*compare) (void const *, void const *, -                                                  void *), +                                  _gl_qsort_r_compar_fn compare,                                    void *arg) _GL_ARG_NONNULL ((1, 4)));  _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, -                                  int (*compare) (void const *, void const *, -                                                  void *), +                                  _gl_qsort_r_compar_fn compare,                                    void *arg));  # else  #  if !@HAVE_QSORT_R@  _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, -                                  int (*compare) (void const *, void const *, -                                                  void *), +                                  _gl_qsort_r_compar_fn compare,                                    void *arg) _GL_ARG_NONNULL ((1, 4)));  #  endif  _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, -                                  int (*compare) (void const *, void const *, -                                                  void *), +                                  _gl_qsort_r_compar_fn compare,                                    void *arg));  # endif  _GL_CXXALIASWARN (qsort_r); @@ -581,10 +881,21 @@ _GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - "  #if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ +# if @REPLACE_RANDOM@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef random +#   define random rpl_random +#  endif +_GL_FUNCDECL_RPL (random, long, (void)); +_GL_CXXALIAS_RPL (random, long, (void)); +# else +#  if !@HAVE_RANDOM@  _GL_FUNCDECL_SYS (random, long, (void)); +#  endif +/* Need to cast, because on Haiku, the return type is +                               int.  */ +_GL_CXXALIAS_SYS_CAST (random, long, (void));  # endif -_GL_CXXALIAS_SYS (random, long, (void));  _GL_CXXALIASWARN (random);  #elif defined GNULIB_POSIXCHECK  # undef random @@ -595,10 +906,21 @@ _GL_WARN_ON_USE (random, "random is unportable - "  #endif  #if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ +# if @REPLACE_RANDOM@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef srandom +#   define srandom rpl_srandom +#  endif +_GL_FUNCDECL_RPL (srandom, void, (unsigned int seed)); +_GL_CXXALIAS_RPL (srandom, void, (unsigned int seed)); +# else +#  if !@HAVE_RANDOM@  _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); +#  endif +/* Need to cast, because on FreeBSD, the first parameter is +                                       unsigned long seed.  */ +_GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed));  # endif -_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed));  _GL_CXXALIASWARN (srandom);  #elif defined GNULIB_POSIXCHECK  # undef srandom @@ -609,31 +931,56 @@ _GL_WARN_ON_USE (srandom, "srandom is unportable - "  #endif  #if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ || !@HAVE_DECL_INITSTATE@ +# if @REPLACE_INITSTATE@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef initstate +#   define initstate rpl_initstate +#  endif +_GL_FUNCDECL_RPL (initstate, char *, +                  (unsigned int seed, char *buf, size_t buf_size) +                  _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (initstate, char *, +                  (unsigned int seed, char *buf, size_t buf_size)); +# else +#  if !@HAVE_INITSTATE@ || !@HAVE_DECL_INITSTATE@  _GL_FUNCDECL_SYS (initstate, char *,                    (unsigned int seed, char *buf, size_t buf_size)                    _GL_ARG_NONNULL ((2))); +#  endif +/* Need to cast, because on FreeBSD, the first parameter is +                        unsigned long seed.  */ +_GL_CXXALIAS_SYS_CAST (initstate, char *, +                       (unsigned int seed, char *buf, size_t buf_size));  # endif -_GL_CXXALIAS_SYS (initstate, char *, -                  (unsigned int seed, char *buf, size_t buf_size));  _GL_CXXALIASWARN (initstate);  #elif defined GNULIB_POSIXCHECK  # undef initstate -# if HAVE_RAW_DECL_INITSTATE_R +# if HAVE_RAW_DECL_INITSTATE  _GL_WARN_ON_USE (initstate, "initstate is unportable - "                   "use gnulib module random for portability");  # endif  #endif  #if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ || !@HAVE_DECL_SETSTATE@ +# if @REPLACE_SETSTATE@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef setstate +#   define setstate rpl_setstate +#  endif +_GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setstate, char *, (char *arg_state)); +# else +#  if !@HAVE_SETSTATE@ || !@HAVE_DECL_SETSTATE@  _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +#  endif +/* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter +   is                                     const char *arg_state.  */ +_GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state));  # endif -_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state));  _GL_CXXALIASWARN (setstate);  #elif defined GNULIB_POSIXCHECK  # undef setstate -# if HAVE_RAW_DECL_SETSTATE_R +# if HAVE_RAW_DECL_SETSTATE  _GL_WARN_ON_USE (setstate, "setstate is unportable - "                   "use gnulib module random for portability");  # endif @@ -714,9 +1061,11 @@ _GL_FUNCDECL_SYS (initstate_r, int,                     struct random_data *rand_state)                    _GL_ARG_NONNULL ((2, 4)));  #  endif -_GL_CXXALIAS_SYS (initstate_r, int, -                  (unsigned int seed, char *buf, size_t buf_size, -                   struct random_data *rand_state)); +/* Need to cast, because on Haiku, the third parameter is +                                                     unsigned long buf_size.  */ +_GL_CXXALIAS_SYS_CAST (initstate_r, int, +                       (unsigned int seed, char *buf, size_t buf_size, +                        struct random_data *rand_state));  # endif  _GL_CXXALIASWARN (initstate_r);  #elif defined GNULIB_POSIXCHECK @@ -744,8 +1093,10 @@ _GL_FUNCDECL_SYS (setstate_r, int,                    (char *arg_state, struct random_data *rand_state)                    _GL_ARG_NONNULL ((1, 2)));  #  endif -_GL_CXXALIAS_SYS (setstate_r, int, -                  (char *arg_state, struct random_data *rand_state)); +/* Need to cast, because on Haiku, the first parameter is +                        void *arg_state.  */ +_GL_CXXALIAS_SYS_CAST (setstate_r, int, +                       (char *arg_state, struct random_data *rand_state));  # endif  _GL_CXXALIASWARN (setstate_r);  #elif defined GNULIB_POSIXCHECK @@ -758,33 +1109,60 @@ _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "  #if @GNULIB_REALLOC_POSIX@ -# if @REPLACE_REALLOC@ +# if (@GNULIB_REALLOC_POSIX@ && @REPLACE_REALLOC_FOR_REALLOC_POSIX@) \ +     || (@GNULIB_REALLOC_GNU@ && @REPLACE_REALLOC_FOR_REALLOC_GNU@)  #  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \          || _GL_USE_STDLIB_ALLOC)  #   undef realloc  #   define realloc rpl_realloc  #  endif -_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); +_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size) +                                   _GL_ATTRIBUTE_DEALLOC_FREE);  _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));  # else +#  if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free.  */ +_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) +                                   _GL_ATTRIBUTE_DEALLOC_FREE); +#  endif  _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (realloc); -#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC -# undef realloc +# endif +#else +# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined realloc +/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free.  */ +_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) +                                   _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +#  undef realloc  /* Assume realloc is always declared.  */  _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "                   "use gnulib module realloc-posix for portability"); +# endif  #endif  #if @GNULIB_REALLOCARRAY@ -# if ! @HAVE_REALLOCARRAY@ +# if @REPLACE_REALLOCARRAY@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef reallocarray +#   define reallocarray rpl_reallocarray +#  endif +_GL_FUNCDECL_RPL (reallocarray, void *, +                  (void *ptr, size_t nmemb, size_t size)); +_GL_CXXALIAS_RPL (reallocarray, void *, +                  (void *ptr, size_t nmemb, size_t size)); +# else +#  if ! @HAVE_REALLOCARRAY@  _GL_FUNCDECL_SYS (reallocarray, void *,                    (void *ptr, size_t nmemb, size_t size)); -# endif +#  endif  _GL_CXXALIAS_SYS (reallocarray, void *,                    (void *ptr, size_t nmemb, size_t size)); +# endif  _GL_CXXALIASWARN (reallocarray);  #elif defined GNULIB_POSIXCHECK  # undef reallocarray @@ -799,15 +1177,19 @@ _GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - "  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)  #   define realpath rpl_realpath  #  endif -_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) -                                    _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); +_GL_FUNCDECL_RPL (realpath, char *, +                  (const char *restrict name, char *restrict resolved) +                  _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (realpath, char *, +                  (const char *restrict name, char *restrict resolved));  # else  #  if !@HAVE_REALPATH@ -_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) -                                    _GL_ARG_NONNULL ((1))); +_GL_FUNCDECL_SYS (realpath, char *, +                  (const char *restrict name, char *restrict resolved) +                  _GL_ARG_NONNULL ((1)));  #  endif -_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); +_GL_CXXALIAS_SYS (realpath, char *, +                  (const char *restrict name, char *restrict resolved));  # endif  _GL_CXXALIASWARN (realpath);  #elif defined GNULIB_POSIXCHECK @@ -889,17 +1271,24 @@ _GL_WARN_ON_USE (setenv, "setenv is unportable - "  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)  #   define strtod rpl_strtod  #  endif -_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) -                                  _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); +#  define GNULIB_defined_strtod_function 1 +_GL_FUNCDECL_RPL (strtod, double, +                  (const char *restrict str, char **restrict endp) +                  _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtod, double, +                  (const char *restrict str, char **restrict endp));  # else  #  if !@HAVE_STRTOD@ -_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) -                                  _GL_ARG_NONNULL ((1))); +_GL_FUNCDECL_SYS (strtod, double, +                  (const char *restrict str, char **restrict endp) +                  _GL_ARG_NONNULL ((1)));  #  endif -_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); +_GL_CXXALIAS_SYS (strtod, double, +                  (const char *restrict str, char **restrict endp));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (strtod); +# endif  #elif defined GNULIB_POSIXCHECK  # undef strtod  # if HAVE_RAW_DECL_STRTOD @@ -908,6 +1297,77 @@ _GL_WARN_ON_USE (strtod, "strtod is unportable - "  # endif  #endif +#if @GNULIB_STRTOLD@ + /* Parse a 'long double' from STRING, updating ENDP if appropriate.  */ +# if @REPLACE_STRTOLD@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   define strtold rpl_strtold +#  endif +#  define GNULIB_defined_strtold_function 1 +_GL_FUNCDECL_RPL (strtold, long double, +                  (const char *restrict str, char **restrict endp) +                  _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtold, long double, +                  (const char *restrict str, char **restrict endp)); +# else +#  if !@HAVE_STRTOLD@ +_GL_FUNCDECL_SYS (strtold, long double, +                  (const char *restrict str, char **restrict endp) +                  _GL_ARG_NONNULL ((1))); +#  endif +_GL_CXXALIAS_SYS (strtold, long double, +                  (const char *restrict str, char **restrict endp)); +# endif +_GL_CXXALIASWARN (strtold); +#elif defined GNULIB_POSIXCHECK +# undef strtold +# if HAVE_RAW_DECL_STRTOLD +_GL_WARN_ON_USE (strtold, "strtold is unportable - " +                 "use gnulib module strtold for portability"); +# endif +#endif + +#if @GNULIB_STRTOL@ +/* Parse a signed integer whose textual representation starts at STRING. +   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, +   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix +   "0x"). +   If ENDPTR is not NULL, the address of the first byte after the integer is +   stored in *ENDPTR. +   Upon overflow, the return value is LONG_MAX or LONG_MIN, and errno is set +   to ERANGE.  */ +# if @REPLACE_STRTOL@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   define strtol rpl_strtol +#  endif +#  define GNULIB_defined_strtol_function 1 +_GL_FUNCDECL_RPL (strtol, long, +                  (const char *restrict string, char **restrict endptr, +                   int base) +                  _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtol, long, +                  (const char *restrict string, char **restrict endptr, +                   int base)); +# else +#  if !@HAVE_STRTOL@ +_GL_FUNCDECL_SYS (strtol, long, +                  (const char *restrict string, char **restrict endptr, +                   int base) +                  _GL_ARG_NONNULL ((1))); +#  endif +_GL_CXXALIAS_SYS (strtol, long, +                  (const char *restrict string, char **restrict endptr, +                   int base)); +# endif +_GL_CXXALIASWARN (strtol); +#elif defined GNULIB_POSIXCHECK +# undef strtol +# if HAVE_RAW_DECL_STRTOL +_GL_WARN_ON_USE (strtol, "strtol is unportable - " +                 "use gnulib module strtol for portability"); +# endif +#endif +  #if @GNULIB_STRTOLL@  /* Parse a signed integer whose textual representation starts at STRING.     The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, @@ -917,13 +1377,29 @@ _GL_WARN_ON_USE (strtod, "strtod is unportable - "     stored in *ENDPTR.     Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set     to ERANGE.  */ -# if !@HAVE_STRTOLL@ +# if @REPLACE_STRTOLL@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   define strtoll rpl_strtoll +#  endif +#  define GNULIB_defined_strtoll_function 1 +_GL_FUNCDECL_RPL (strtoll, long long, +                  (const char *restrict string, char **restrict endptr, +                   int base) +                  _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoll, long long, +                  (const char *restrict string, char **restrict endptr, +                   int base)); +# else +#  if !@HAVE_STRTOLL@  _GL_FUNCDECL_SYS (strtoll, long long, -                  (const char *string, char **endptr, int base) +                  (const char *restrict string, char **restrict endptr, +                   int base)                    _GL_ARG_NONNULL ((1))); -# endif +#  endif  _GL_CXXALIAS_SYS (strtoll, long long, -                  (const char *string, char **endptr, int base)); +                  (const char *restrict string, char **restrict endptr, +                   int base)); +# endif  _GL_CXXALIASWARN (strtoll);  #elif defined GNULIB_POSIXCHECK  # undef strtoll @@ -933,6 +1409,46 @@ _GL_WARN_ON_USE (strtoll, "strtoll is unportable - "  # endif  #endif +#if @GNULIB_STRTOUL@ +/* Parse an unsigned integer whose textual representation starts at STRING. +   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, +   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix +   "0x"). +   If ENDPTR is not NULL, the address of the first byte after the integer is +   stored in *ENDPTR. +   Upon overflow, the return value is ULONG_MAX, and errno is set to ERANGE.  */ +# if @REPLACE_STRTOUL@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   define strtoul rpl_strtoul +#  endif +#  define GNULIB_defined_strtoul_function 1 +_GL_FUNCDECL_RPL (strtoul, unsigned long, +                  (const char *restrict string, char **restrict endptr, +                   int base) +                  _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoul, unsigned long, +                  (const char *restrict string, char **restrict endptr, +                   int base)); +# else +#  if !@HAVE_STRTOUL@ +_GL_FUNCDECL_SYS (strtoul, unsigned long, +                  (const char *restrict string, char **restrict endptr, +                   int base) +                  _GL_ARG_NONNULL ((1))); +#  endif +_GL_CXXALIAS_SYS (strtoul, unsigned long, +                  (const char *restrict string, char **restrict endptr, +                   int base)); +# endif +_GL_CXXALIASWARN (strtoul); +#elif defined GNULIB_POSIXCHECK +# undef strtoul +# if HAVE_RAW_DECL_STRTOUL +_GL_WARN_ON_USE (strtoul, "strtoul is unportable - " +                 "use gnulib module strtoul for portability"); +# endif +#endif +  #if @GNULIB_STRTOULL@  /* Parse an unsigned integer whose textual representation starts at STRING.     The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, @@ -942,13 +1458,29 @@ _GL_WARN_ON_USE (strtoll, "strtoll is unportable - "     stored in *ENDPTR.     Upon overflow, the return value is ULLONG_MAX, and errno is set to     ERANGE.  */ -# if !@HAVE_STRTOULL@ +# if @REPLACE_STRTOULL@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   define strtoull rpl_strtoull +#  endif +#  define GNULIB_defined_strtoull_function 1 +_GL_FUNCDECL_RPL (strtoull, unsigned long long, +                  (const char *restrict string, char **restrict endptr, +                   int base) +                  _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoull, unsigned long long, +                  (const char *restrict string, char **restrict endptr, +                   int base)); +# else +#  if !@HAVE_STRTOULL@  _GL_FUNCDECL_SYS (strtoull, unsigned long long, -                  (const char *string, char **endptr, int base) +                  (const char *restrict string, char **restrict endptr, +                   int base)                    _GL_ARG_NONNULL ((1))); -# endif +#  endif  _GL_CXXALIAS_SYS (strtoull, unsigned long long, -                  (const char *string, char **endptr, int base)); +                  (const char *restrict string, char **restrict endptr, +                   int base)); +# endif  _GL_CXXALIASWARN (strtoull);  #elif defined GNULIB_POSIXCHECK  # undef strtoull @@ -1012,7 +1544,9 @@ _GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc));  # else  _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wctomb); +# endif  #endif  | 
