]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - stdlib/stdlib.h
support: Expose sbindir as support_sbindir_prefix
[thirdparty/glibc.git] / stdlib / stdlib.h
index 5c0c982ccf2ca908b25d593fe19cce1c9307b794..a9fd989d3987f1901f4a6f607c7a2dd9b83b550d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 #ifndef        _STDLIB_H
 
-#include <features.h>
+#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
+#include <bits/libc-header-start.h>
 
 /* Get size_t, wchar_t and NULL from <stddef.h>.  */
-#define                __need_size_t
-#ifndef __need_malloc_and_calloc
-# define       __need_wchar_t
-# define       __need_NULL
-#endif
+#define __need_size_t
+#define __need_wchar_t
+#define __need_NULL
 #include <stddef.h>
 
 __BEGIN_DECLS
 
-#ifndef __need_malloc_and_calloc
 #define        _STDLIB_H       1
 
 #if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H
@@ -53,7 +51,9 @@ __BEGIN_DECLS
 # endif
 #endif /* X/Open or XPG7 and <sys/wait.h> not included.  */
 
-__BEGIN_NAMESPACE_STD
+/* _FloatN API tests for enablement.  */
+#include <bits/floatn.h>
+
 /* Returned by `div'.  */
 typedef struct
   {
@@ -70,10 +70,8 @@ typedef struct
   } ldiv_t;
 # define __ldiv_t_defined      1
 #endif
-__END_NAMESPACE_STD
 
 #if defined __USE_ISOC99 && !defined __lldiv_t_defined
-__BEGIN_NAMESPACE_C99
 /* Returned by `lldiv'.  */
 __extension__ typedef struct
   {
@@ -81,7 +79,6 @@ __extension__ typedef struct
     long long int rem;         /* Remainder.  */
   } lldiv_t;
 # define __lldiv_t_defined     1
-__END_NAMESPACE_C99
 #endif
 
 
@@ -100,7 +97,6 @@ __END_NAMESPACE_C99
 extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
 
 
-__BEGIN_NAMESPACE_STD
 /* Convert a string to a floating-point number.  */
 extern double atof (const char *__nptr)
      __THROW __attribute_pure__ __nonnull ((1)) __wur;
@@ -110,25 +106,19 @@ extern int atoi (const char *__nptr)
 /* Convert a string to a long integer.  */
 extern long int atol (const char *__nptr)
      __THROW __attribute_pure__ __nonnull ((1)) __wur;
-__END_NAMESPACE_STD
 
 #ifdef __USE_ISOC99
-__BEGIN_NAMESPACE_C99
 /* Convert a string to a long long integer.  */
 __extension__ extern long long int atoll (const char *__nptr)
      __THROW __attribute_pure__ __nonnull ((1)) __wur;
-__END_NAMESPACE_C99
 #endif
 
-__BEGIN_NAMESPACE_STD
 /* Convert a string to a floating-point number.  */
 extern double strtod (const char *__restrict __nptr,
                      char **__restrict __endptr)
      __THROW __nonnull ((1));
-__END_NAMESPACE_STD
 
 #ifdef __USE_ISOC99
-__BEGIN_NAMESPACE_C99
 /* Likewise for `float' and `long double' sizes of floating-point numbers.  */
 extern float strtof (const char *__restrict __nptr,
                     char **__restrict __endptr) __THROW __nonnull ((1));
@@ -136,10 +126,52 @@ extern float strtof (const char *__restrict __nptr,
 extern long double strtold (const char *__restrict __nptr,
                            char **__restrict __endptr)
      __THROW __nonnull ((1));
-__END_NAMESPACE_C99
 #endif
 
-__BEGIN_NAMESPACE_STD
+/* Likewise for '_FloatN' and '_FloatNx'.  */
+
+#if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern _Float16 strtof16 (const char *__restrict __nptr,
+                         char **__restrict __endptr)
+     __THROW __nonnull ((1));
+#endif
+
+#if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern _Float32 strtof32 (const char *__restrict __nptr,
+                         char **__restrict __endptr)
+     __THROW __nonnull ((1));
+#endif
+
+#if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern _Float64 strtof64 (const char *__restrict __nptr,
+                         char **__restrict __endptr)
+     __THROW __nonnull ((1));
+#endif
+
+#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern _Float128 strtof128 (const char *__restrict __nptr,
+                           char **__restrict __endptr)
+     __THROW __nonnull ((1));
+#endif
+
+#if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern _Float32x strtof32x (const char *__restrict __nptr,
+                           char **__restrict __endptr)
+     __THROW __nonnull ((1));
+#endif
+
+#if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern _Float64x strtof64x (const char *__restrict __nptr,
+                           char **__restrict __endptr)
+     __THROW __nonnull ((1));
+#endif
+
+#if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern _Float128x strtof128x (const char *__restrict __nptr,
+                             char **__restrict __endptr)
+     __THROW __nonnull ((1));
+#endif
+
 /* Convert a string to a long integer.  */
 extern long int strtol (const char *__restrict __nptr,
                        char **__restrict __endptr, int __base)
@@ -148,7 +180,6 @@ extern long int strtol (const char *__restrict __nptr,
 extern unsigned long int strtoul (const char *__restrict __nptr,
                                  char **__restrict __endptr, int __base)
      __THROW __nonnull ((1));
-__END_NAMESPACE_STD
 
 #ifdef __USE_MISC
 /* Convert a string to a quadword integer.  */
@@ -164,7 +195,6 @@ extern unsigned long long int strtouq (const char *__restrict __nptr,
 #endif /* Use misc.  */
 
 #ifdef __USE_ISOC99
-__BEGIN_NAMESPACE_C99
 /* Convert a string to a quadword integer.  */
 __extension__
 extern long long int strtoll (const char *__restrict __nptr,
@@ -175,66 +205,158 @@ __extension__
 extern unsigned long long int strtoull (const char *__restrict __nptr,
                                        char **__restrict __endptr, int __base)
      __THROW __nonnull ((1));
-__END_NAMESPACE_C99
 #endif /* ISO C99 or use MISC.  */
 
+/* Convert a floating-point number to a string.  */
+#if __GLIBC_USE (IEC_60559_BFP_EXT)
+extern int strfromd (char *__dest, size_t __size, const char *__format,
+                    double __f)
+     __THROW __nonnull ((3));
+
+extern int strfromf (char *__dest, size_t __size, const char *__format,
+                    float __f)
+     __THROW __nonnull ((3));
+
+extern int strfroml (char *__dest, size_t __size, const char *__format,
+                    long double __f)
+     __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf16 (char *__dest, size_t __size, const char * __format,
+                      _Float16 __f)
+     __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf32 (char *__dest, size_t __size, const char * __format,
+                      _Float32 __f)
+     __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf64 (char *__dest, size_t __size, const char * __format,
+                      _Float64 __f)
+     __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf128 (char *__dest, size_t __size, const char * __format,
+                       _Float128 __f)
+     __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf32x (char *__dest, size_t __size, const char * __format,
+                       _Float32x __f)
+     __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf64x (char *__dest, size_t __size, const char * __format,
+                       _Float64x __f)
+     __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf128x (char *__dest, size_t __size, const char * __format,
+                        _Float128x __f)
+     __THROW __nonnull ((3));
+#endif
+
 
 #ifdef __USE_GNU
-/* The concept of one static locale per category is not very well
-   thought out.  Many applications will need to process its data using
-   information from several different locales.  Another problem is
-   the implementation of the internationalization handling in the
-   ISO C++ standard library.  To support this another set of
-   the functions using locale data exist which take an additional
-   argument.
-
-   Attention: even though several *_l interfaces are part of POSIX:2008,
-   these are not.  */
-
-/* Structure for reentrant locale using functions.  This is an
-   (almost) opaque type for the user level programs.  */
-# include <xlocale.h>
-
-/* Special versions of the functions above which take the locale to
-   use as an additional parameter.  */
+/* Parallel versions of the functions above which take the locale to
+   use as an additional parameter.  These are GNU extensions inspired
+   by the POSIX.1-2008 extended locale API.  */
+# include <bits/types/locale_t.h>
+
 extern long int strtol_l (const char *__restrict __nptr,
                          char **__restrict __endptr, int __base,
-                         __locale_t __loc) __THROW __nonnull ((1, 4));
+                         locale_t __loc) __THROW __nonnull ((1, 4));
 
 extern unsigned long int strtoul_l (const char *__restrict __nptr,
                                    char **__restrict __endptr,
-                                   int __base, __locale_t __loc)
+                                   int __base, locale_t __loc)
      __THROW __nonnull ((1, 4));
 
 __extension__
 extern long long int strtoll_l (const char *__restrict __nptr,
                                char **__restrict __endptr, int __base,
-                               __locale_t __loc)
+                               locale_t __loc)
      __THROW __nonnull ((1, 4));
 
 __extension__
 extern unsigned long long int strtoull_l (const char *__restrict __nptr,
                                          char **__restrict __endptr,
-                                         int __base, __locale_t __loc)
+                                         int __base, locale_t __loc)
      __THROW __nonnull ((1, 4));
 
 extern double strtod_l (const char *__restrict __nptr,
-                       char **__restrict __endptr, __locale_t __loc)
+                       char **__restrict __endptr, locale_t __loc)
      __THROW __nonnull ((1, 3));
 
 extern float strtof_l (const char *__restrict __nptr,
-                      char **__restrict __endptr, __locale_t __loc)
+                      char **__restrict __endptr, locale_t __loc)
      __THROW __nonnull ((1, 3));
 
 extern long double strtold_l (const char *__restrict __nptr,
                              char **__restrict __endptr,
-                             __locale_t __loc)
+                             locale_t __loc)
+     __THROW __nonnull ((1, 3));
+
+# if __HAVE_FLOAT16
+extern _Float16 strtof16_l (const char *__restrict __nptr,
+                           char **__restrict __endptr,
+                           locale_t __loc)
+     __THROW __nonnull ((1, 3));
+# endif
+
+# if __HAVE_FLOAT32
+extern _Float32 strtof32_l (const char *__restrict __nptr,
+                           char **__restrict __endptr,
+                           locale_t __loc)
+     __THROW __nonnull ((1, 3));
+# endif
+
+# if __HAVE_FLOAT64
+extern _Float64 strtof64_l (const char *__restrict __nptr,
+                           char **__restrict __endptr,
+                           locale_t __loc)
+     __THROW __nonnull ((1, 3));
+# endif
+
+# if __HAVE_FLOAT128
+extern _Float128 strtof128_l (const char *__restrict __nptr,
+                             char **__restrict __endptr,
+                             locale_t __loc)
+     __THROW __nonnull ((1, 3));
+# endif
+
+# if __HAVE_FLOAT32X
+extern _Float32x strtof32x_l (const char *__restrict __nptr,
+                             char **__restrict __endptr,
+                             locale_t __loc)
+     __THROW __nonnull ((1, 3));
+# endif
+
+# if __HAVE_FLOAT64X
+extern _Float64x strtof64x_l (const char *__restrict __nptr,
+                             char **__restrict __endptr,
+                             locale_t __loc)
+     __THROW __nonnull ((1, 3));
+# endif
+
+# if __HAVE_FLOAT128X
+extern _Float128x strtof128x_l (const char *__restrict __nptr,
+                               char **__restrict __endptr,
+                               locale_t __loc)
      __THROW __nonnull ((1, 3));
+# endif
 #endif /* GNU */
 
 
 #ifdef __USE_EXTERN_INLINES
-__BEGIN_NAMESPACE_STD
 __extern_inline int
 __NTH (atoi (const char *__nptr))
 {
@@ -245,16 +367,13 @@ __NTH (atol (const char *__nptr))
 {
   return strtol (__nptr, (char **) NULL, 10);
 }
-__END_NAMESPACE_STD
 
 # ifdef __USE_ISOC99
-__BEGIN_NAMESPACE_C99
 __extension__ __extern_inline long long int
 __NTH (atoll (const char *__nptr))
 {
   return strtoll (__nptr, (char **) NULL, 10);
 }
-__END_NAMESPACE_C99
 # endif
 #endif /* Optimizing and Inlining.  */
 
@@ -330,14 +449,12 @@ extern int setstate_r (char *__restrict __statebuf,
 #endif /* Use extended X/Open || misc. */
 
 
-__BEGIN_NAMESPACE_STD
 /* Return a random integer between 0 and RAND_MAX inclusive.  */
 extern int rand (void) __THROW;
 /* Seed the random number generator with the given number.  */
 extern void srand (unsigned int __seed) __THROW;
-__END_NAMESPACE_STD
 
-#ifdef __USE_POSIX
+#ifdef __USE_POSIX199506
 /* Reentrant interface according to POSIX.1.  */
 extern int rand_r (unsigned int *__seed) __THROW;
 #endif
@@ -418,36 +535,34 @@ extern int lcong48_r (unsigned short int __param[7],
 # endif        /* Use misc.  */
 #endif /* Use misc or X/Open.  */
 
-#endif /* don't just need malloc and calloc */
-
-#ifndef __malloc_and_calloc_defined
-# define __malloc_and_calloc_defined
-__BEGIN_NAMESPACE_STD
 /* Allocate SIZE bytes of memory.  */
-extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
+extern void *malloc (size_t __size) __THROW __attribute_malloc__
+     __attribute_alloc_size__ ((1)) __wur;
 /* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
 extern void *calloc (size_t __nmemb, size_t __size)
-     __THROW __attribute_malloc__ __wur;
-__END_NAMESPACE_STD
-#endif
+     __THROW __attribute_malloc__ __attribute_alloc_size__ ((1, 2)) __wur;
 
-#ifndef __need_malloc_and_calloc
-__BEGIN_NAMESPACE_STD
 /* Re-allocate the previously allocated block
    in PTR, making the new block SIZE bytes long.  */
 /* __attribute_malloc__ is not used, because if realloc returns
    the same pointer that was passed to it, aliasing needs to be allowed
    between objects pointed by the old and new pointers.  */
 extern void *realloc (void *__ptr, size_t __size)
-     __THROW __attribute_warn_unused_result__;
+     __THROW __attribute_warn_unused_result__ __attribute_alloc_size__ ((2));
+
+#ifdef __USE_MISC
+/* Re-allocate the previously allocated block in PTR, making the new
+   block large enough for NMEMB elements of SIZE bytes each.  */
+/* __attribute_malloc__ is not used, because if reallocarray returns
+   the same pointer that was passed to it, aliasing needs to be allowed
+   between objects pointed by the old and new pointers.  */
+extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
+     __THROW __attribute_warn_unused_result__
+     __attribute_alloc_size__ ((2, 3));
+#endif
+
 /* Free a block allocated by `malloc', `realloc' or `calloc'.  */
 extern void free (void *__ptr) __THROW;
-__END_NAMESPACE_STD
-
-#ifdef __USE_MISC
-/* Free a block.  An alias for `free'. (Sun Unices).  */
-extern void cfree (void *__ptr) __THROW;
-#endif /* Use misc.  */
 
 #ifdef __USE_MISC
 # include <alloca.h>
@@ -456,7 +571,8 @@ extern void cfree (void *__ptr) __THROW;
 #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
     || defined __USE_MISC
 /* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */
-extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
+extern void *valloc (size_t __size) __THROW __attribute_malloc__
+     __attribute_alloc_size__ ((1)) __wur;
 #endif
 
 #ifdef __USE_XOPEN2K
@@ -471,7 +587,6 @@ extern void *aligned_alloc (size_t __alignment, size_t __size)
      __THROW __attribute_malloc__ __attribute_alloc_size__ ((2)) __wur;
 #endif
 
-__BEGIN_NAMESPACE_STD
 /* Abort execution and generate a core-dump.  */
 extern void abort (void) __THROW __attribute__ ((__noreturn__));
 
@@ -488,7 +603,6 @@ extern "C++" int at_quick_exit (void (*__func) (void))
 extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1));
 # endif
 #endif
-__END_NAMESPACE_STD
 
 #ifdef __USE_MISC
 /* Register a function to be called with the status
@@ -497,7 +611,6 @@ extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
      __THROW __nonnull ((1));
 #endif
 
-__BEGIN_NAMESPACE_STD
 /* Call all functions registered with `atexit' and `on_exit',
    in the reverse of the order in which they were registered,
    perform stdio cleanup, and terminate program execution with STATUS.  */
@@ -509,21 +622,16 @@ extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
    execution with STATUS.  */
 extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__));
 #endif
-__END_NAMESPACE_STD
 
 #ifdef __USE_ISOC99
-__BEGIN_NAMESPACE_C99
 /* Terminate the program with STATUS without calling any of the
    functions registered with `atexit' or `on_exit'.  */
 extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
-__END_NAMESPACE_C99
 #endif
 
 
-__BEGIN_NAMESPACE_STD
 /* Return the value of envariable NAME, or NULL if it doesn't exist.  */
 extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
-__END_NAMESPACE_STD
 
 #ifdef __USE_GNU
 /* This function is similar to the above but returns NULL if the
@@ -669,13 +777,11 @@ extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
 #endif
 
 
-__BEGIN_NAMESPACE_STD
 /* Execute the given line as a shell command.
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
 extern int system (const char *__command) __wur;
-__END_NAMESPACE_STD
 
 
 #ifdef __USE_GNU
@@ -709,7 +815,6 @@ typedef __compar_fn_t comparison_fn_t;
 typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
 #endif
 
-__BEGIN_NAMESPACE_STD
 /* Do a binary search for KEY in BASE, which consists of NMEMB elements
    of SIZE bytes each, using COMPAR to perform the comparisons.  */
 extern void *bsearch (const void *__key, const void *__base,
@@ -734,7 +839,6 @@ extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
 /* Return the absolute value of X.  */
 extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
 extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
-__END_NAMESPACE_STD
 
 #ifdef __USE_ISOC99
 __extension__ extern long long int llabs (long long int __x)
@@ -742,7 +846,6 @@ __extension__ extern long long int llabs (long long int __x)
 #endif
 
 
-__BEGIN_NAMESPACE_STD
 /* Return the `div_t', `ldiv_t' or `lldiv_t' representation
    of the value of NUMER over DENOM. */
 /* GCC may have built-ins for these someday.  */
@@ -750,14 +853,11 @@ extern div_t div (int __numer, int __denom)
      __THROW __attribute__ ((__const__)) __wur;
 extern ldiv_t ldiv (long int __numer, long int __denom)
      __THROW __attribute__ ((__const__)) __wur;
-__END_NAMESPACE_STD
 
 #ifdef __USE_ISOC99
-__BEGIN_NAMESPACE_C99
 __extension__ extern lldiv_t lldiv (long long int __numer,
                                    long long int __denom)
      __THROW __attribute__ ((__const__)) __wur;
-__END_NAMESPACE_C99
 #endif
 
 
@@ -817,7 +917,6 @@ extern int qfcvt_r (long double __value, int __ndigit,
 #endif /* misc */
 
 
-__BEGIN_NAMESPACE_STD
 /* Return the length of the multibyte character
    in S, which is no longer than N.  */
 extern int mblen (const char *__s, size_t __n) __THROW;
@@ -837,7 +936,6 @@ extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
 extern size_t wcstombs (char *__restrict __s,
                        const wchar_t *__restrict __pwcs, size_t __n)
      __THROW;
-__END_NAMESPACE_STD
 
 
 #ifdef __USE_MISC
@@ -863,12 +961,6 @@ extern int getsubopt (char **__restrict __optionp,
 #endif
 
 
-#ifdef __USE_XOPEN
-/* Setup DES tables according KEY.  */
-extern void setkey (const char *__key) __THROW __nonnull ((1));
-#endif
-
-
 /* X/Open pseudo terminal handling.  */
 
 #ifdef __USE_XOPEN2KXSI
@@ -876,7 +968,7 @@ extern void setkey (const char *__key) __THROW __nonnull ((1));
 extern int posix_openpt (int __oflag) __wur;
 #endif
 
-#ifdef __USE_XOPEN
+#ifdef __USE_XOPEN_EXTENDED
 /* The next four functions all take a master pseudo-tty fd and
    perform an operation on the associated slave:  */
 
@@ -928,9 +1020,6 @@ extern int ttyslot (void) __THROW;
 # include <bits/stdlib-ldbl.h>
 #endif
 
-#endif /* don't just need malloc and calloc */
-#undef __need_malloc_and_calloc
-
 __END_DECLS
 
 #endif /* stdlib.h  */