glibc (2.38)

(root)/
include/
stdlib.h
       1  /* Copyright (C) 1991-2023 Free Software Foundation, Inc.
       2     Copyright The GNU Toolchain Authors.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  /*
      20   *	ISO C99 Standard: 7.20 General utilities	<stdlib.h>
      21   */
      22  
      23  #ifndef	_STDLIB_H
      24  
      25  #define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
      26  #include <bits/libc-header-start.h>
      27  
      28  /* Get size_t, wchar_t and NULL from <stddef.h>.  */
      29  #define __need_size_t
      30  #define __need_wchar_t
      31  #define __need_NULL
      32  #include <stddef.h>
      33  
      34  __BEGIN_DECLS
      35  
      36  #define	_STDLIB_H	1
      37  
      38  #if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H
      39  /* XPG requires a few symbols from <sys/wait.h> being defined.  */
      40  # include <bits/waitflags.h>
      41  # include <bits/waitstatus.h>
      42  
      43  /* Define the macros <sys/wait.h> also would define this way.  */
      44  # define WEXITSTATUS(status)	__WEXITSTATUS (status)
      45  # define WTERMSIG(status)	__WTERMSIG (status)
      46  # define WSTOPSIG(status)	__WSTOPSIG (status)
      47  # define WIFEXITED(status)	__WIFEXITED (status)
      48  # define WIFSIGNALED(status)	__WIFSIGNALED (status)
      49  # define WIFSTOPPED(status)	__WIFSTOPPED (status)
      50  # ifdef __WIFCONTINUED
      51  #  define WIFCONTINUED(status)	__WIFCONTINUED (status)
      52  # endif
      53  #endif	/* X/Open or XPG7 and <sys/wait.h> not included.  */
      54  
      55  /* _FloatN API tests for enablement.  */
      56  #include <bits/floatn.h>
      57  
      58  /* Returned by `div'.  */
      59  typedef struct
      60    {
      61      int quot;			/* Quotient.  */
      62      int rem;			/* Remainder.  */
      63    } div_t;
      64  
      65  /* Returned by `ldiv'.  */
      66  #ifndef __ldiv_t_defined
      67  typedef struct
      68    {
      69      long int quot;		/* Quotient.  */
      70      long int rem;		/* Remainder.  */
      71    } ldiv_t;
      72  # define __ldiv_t_defined	1
      73  #endif
      74  
      75  #if defined __USE_ISOC99 && !defined __lldiv_t_defined
      76  /* Returned by `lldiv'.  */
      77  __extension__ typedef struct
      78    {
      79      long long int quot;		/* Quotient.  */
      80      long long int rem;		/* Remainder.  */
      81    } lldiv_t;
      82  # define __lldiv_t_defined	1
      83  #endif
      84  
      85  
      86  /* The largest number rand will return (same as INT_MAX).  */
      87  #define	RAND_MAX	2147483647
      88  
      89  
      90  /* We define these the same for all machines.
      91     Changes from this to the outside world should be done in `_exit'.  */
      92  #define	EXIT_FAILURE	1	/* Failing exit status.  */
      93  #define	EXIT_SUCCESS	0	/* Successful exit status.  */
      94  
      95  
      96  /* Maximum length of a multibyte character in the current locale.  */
      97  #define	MB_CUR_MAX	(__ctype_get_mb_cur_max ())
      98  extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
      99  
     100  
     101  /* Convert a string to a floating-point number.  */
     102  extern double atof (const char *__nptr)
     103       __THROW __attribute_pure__ __nonnull ((1)) __wur;
     104  /* Convert a string to an integer.  */
     105  extern int atoi (const char *__nptr)
     106       __THROW __attribute_pure__ __nonnull ((1)) __wur;
     107  /* Convert a string to a long integer.  */
     108  extern long int atol (const char *__nptr)
     109       __THROW __attribute_pure__ __nonnull ((1)) __wur;
     110  
     111  #ifdef __USE_ISOC99
     112  /* Convert a string to a long long integer.  */
     113  __extension__ extern long long int atoll (const char *__nptr)
     114       __THROW __attribute_pure__ __nonnull ((1)) __wur;
     115  #endif
     116  
     117  /* Convert a string to a floating-point number.  */
     118  extern double strtod (const char *__restrict __nptr,
     119  		      char **__restrict __endptr)
     120       __THROW __nonnull ((1));
     121  
     122  #ifdef	__USE_ISOC99
     123  /* Likewise for `float' and `long double' sizes of floating-point numbers.  */
     124  extern float strtof (const char *__restrict __nptr,
     125  		     char **__restrict __endptr) __THROW __nonnull ((1));
     126  
     127  extern long double strtold (const char *__restrict __nptr,
     128  			    char **__restrict __endptr)
     129       __THROW __nonnull ((1));
     130  #endif
     131  
     132  /* Likewise for '_FloatN' and '_FloatNx'.  */
     133  
     134  #if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT)
     135  extern _Float16 strtof16 (const char *__restrict __nptr,
     136  			  char **__restrict __endptr)
     137       __THROW __nonnull ((1));
     138  #endif
     139  
     140  #if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT)
     141  extern _Float32 strtof32 (const char *__restrict __nptr,
     142  			  char **__restrict __endptr)
     143       __THROW __nonnull ((1));
     144  #endif
     145  
     146  #if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT)
     147  extern _Float64 strtof64 (const char *__restrict __nptr,
     148  			  char **__restrict __endptr)
     149       __THROW __nonnull ((1));
     150  #endif
     151  
     152  #if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
     153  extern _Float128 strtof128 (const char *__restrict __nptr,
     154  			    char **__restrict __endptr)
     155       __THROW __nonnull ((1));
     156  #endif
     157  
     158  #if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT)
     159  extern _Float32x strtof32x (const char *__restrict __nptr,
     160  			    char **__restrict __endptr)
     161       __THROW __nonnull ((1));
     162  #endif
     163  
     164  #if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT)
     165  extern _Float64x strtof64x (const char *__restrict __nptr,
     166  			    char **__restrict __endptr)
     167       __THROW __nonnull ((1));
     168  #endif
     169  
     170  #if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT)
     171  extern _Float128x strtof128x (const char *__restrict __nptr,
     172  			      char **__restrict __endptr)
     173       __THROW __nonnull ((1));
     174  #endif
     175  
     176  /* Convert a string to a long integer.  */
     177  extern long int strtol (const char *__restrict __nptr,
     178  			char **__restrict __endptr, int __base)
     179       __THROW __nonnull ((1));
     180  /* Convert a string to an unsigned long integer.  */
     181  extern unsigned long int strtoul (const char *__restrict __nptr,
     182  				  char **__restrict __endptr, int __base)
     183       __THROW __nonnull ((1));
     184  
     185  #ifdef __USE_MISC
     186  /* Convert a string to a quadword integer.  */
     187  __extension__
     188  extern long long int strtoq (const char *__restrict __nptr,
     189  			     char **__restrict __endptr, int __base)
     190       __THROW __nonnull ((1));
     191  /* Convert a string to an unsigned quadword integer.  */
     192  __extension__
     193  extern unsigned long long int strtouq (const char *__restrict __nptr,
     194  				       char **__restrict __endptr, int __base)
     195       __THROW __nonnull ((1));
     196  #endif /* Use misc.  */
     197  
     198  #ifdef __USE_ISOC99
     199  /* Convert a string to a quadword integer.  */
     200  __extension__
     201  extern long long int strtoll (const char *__restrict __nptr,
     202  			      char **__restrict __endptr, int __base)
     203       __THROW __nonnull ((1));
     204  /* Convert a string to an unsigned quadword integer.  */
     205  __extension__
     206  extern unsigned long long int strtoull (const char *__restrict __nptr,
     207  					char **__restrict __endptr, int __base)
     208       __THROW __nonnull ((1));
     209  #endif /* ISO C99 or use MISC.  */
     210  
     211  /* Versions of the above functions that handle '0b' and '0B' prefixes
     212     in base 0 or 2.  */
     213  #if __GLIBC_USE (C2X_STRTOL)
     214  # ifdef __REDIRECT
     215  extern long int __REDIRECT_NTH (strtol, (const char *__restrict __nptr,
     216  					 char **__restrict __endptr,
     217  					 int __base), __isoc23_strtol)
     218       __nonnull ((1));
     219  extern unsigned long int __REDIRECT_NTH (strtoul,
     220  					 (const char *__restrict __nptr,
     221  					  char **__restrict __endptr,
     222  					  int __base), __isoc23_strtoul)
     223       __nonnull ((1));
     224  #  ifdef __USE_MISC
     225  __extension__
     226  extern long long int __REDIRECT_NTH (strtoq, (const char *__restrict __nptr,
     227  					      char **__restrict __endptr,
     228  					      int __base), __isoc23_strtoll)
     229       __nonnull ((1));
     230  __extension__
     231  extern unsigned long long int __REDIRECT_NTH (strtouq,
     232  					      (const char *__restrict __nptr,
     233  					       char **__restrict __endptr,
     234  					       int __base), __isoc23_strtoull)
     235       __nonnull ((1));
     236  #  endif
     237  __extension__
     238  extern long long int __REDIRECT_NTH (strtoll, (const char *__restrict __nptr,
     239  					       char **__restrict __endptr,
     240  					       int __base), __isoc23_strtoll)
     241       __nonnull ((1));
     242  __extension__
     243  extern unsigned long long int __REDIRECT_NTH (strtoull,
     244  					      (const char *__restrict __nptr,
     245  					       char **__restrict __endptr,
     246  					       int __base), __isoc23_strtoull)
     247       __nonnull ((1));
     248  # else
     249  extern long int __isoc23_strtol (const char *__restrict __nptr,
     250  				 char **__restrict __endptr, int __base)
     251       __THROW __nonnull ((1));
     252  extern unsigned long int __isoc23_strtoul (const char *__restrict __nptr,
     253  					   char **__restrict __endptr,
     254  					   int __base)
     255       __THROW __nonnull ((1));
     256  __extension__
     257  extern long long int __isoc23_strtoll (const char *__restrict __nptr,
     258  				       char **__restrict __endptr, int __base)
     259       __THROW __nonnull ((1));
     260  __extension__
     261  extern unsigned long long int __isoc23_strtoull (const char *__restrict __nptr,
     262  						 char **__restrict __endptr,
     263  						 int __base)
     264       __THROW __nonnull ((1));
     265  #  define strtol __isoc23_strtol
     266  #  define strtoul __isoc23_strtoul
     267  #  ifdef __USE_MISC
     268  #   define strtoq __isoc23_strtoll
     269  #   define strtouq __isoc23_strtoull
     270  #  endif
     271  #  define strtoll __isoc23_strtoll
     272  #  define strtoull __isoc23_strtoull
     273  # endif
     274  #endif
     275  
     276  /* Convert a floating-point number to a string.  */
     277  #if __GLIBC_USE (IEC_60559_BFP_EXT_C2X)
     278  extern int strfromd (char *__dest, size_t __size, const char *__format,
     279  		     double __f)
     280       __THROW __nonnull ((3));
     281  
     282  extern int strfromf (char *__dest, size_t __size, const char *__format,
     283  		     float __f)
     284       __THROW __nonnull ((3));
     285  
     286  extern int strfroml (char *__dest, size_t __size, const char *__format,
     287  		     long double __f)
     288       __THROW __nonnull ((3));
     289  #endif
     290  
     291  #if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT)
     292  extern int strfromf16 (char *__dest, size_t __size, const char * __format,
     293  		       _Float16 __f)
     294       __THROW __nonnull ((3));
     295  #endif
     296  
     297  #if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT)
     298  extern int strfromf32 (char *__dest, size_t __size, const char * __format,
     299  		       _Float32 __f)
     300       __THROW __nonnull ((3));
     301  #endif
     302  
     303  #if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT)
     304  extern int strfromf64 (char *__dest, size_t __size, const char * __format,
     305  		       _Float64 __f)
     306       __THROW __nonnull ((3));
     307  #endif
     308  
     309  #if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
     310  extern int strfromf128 (char *__dest, size_t __size, const char * __format,
     311  			_Float128 __f)
     312       __THROW __nonnull ((3));
     313  #endif
     314  
     315  #if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT)
     316  extern int strfromf32x (char *__dest, size_t __size, const char * __format,
     317  			_Float32x __f)
     318       __THROW __nonnull ((3));
     319  #endif
     320  
     321  #if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT)
     322  extern int strfromf64x (char *__dest, size_t __size, const char * __format,
     323  			_Float64x __f)
     324       __THROW __nonnull ((3));
     325  #endif
     326  
     327  #if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT)
     328  extern int strfromf128x (char *__dest, size_t __size, const char * __format,
     329  			 _Float128x __f)
     330       __THROW __nonnull ((3));
     331  #endif
     332  
     333  
     334  #ifdef __USE_GNU
     335  /* Parallel versions of the functions above which take the locale to
     336     use as an additional parameter.  These are GNU extensions inspired
     337     by the POSIX.1-2008 extended locale API.  */
     338  # include <bits/types/locale_t.h>
     339  
     340  extern long int strtol_l (const char *__restrict __nptr,
     341  			  char **__restrict __endptr, int __base,
     342  			  locale_t __loc) __THROW __nonnull ((1, 4));
     343  
     344  extern unsigned long int strtoul_l (const char *__restrict __nptr,
     345  				    char **__restrict __endptr,
     346  				    int __base, locale_t __loc)
     347       __THROW __nonnull ((1, 4));
     348  
     349  __extension__
     350  extern long long int strtoll_l (const char *__restrict __nptr,
     351  				char **__restrict __endptr, int __base,
     352  				locale_t __loc)
     353       __THROW __nonnull ((1, 4));
     354  
     355  __extension__
     356  extern unsigned long long int strtoull_l (const char *__restrict __nptr,
     357  					  char **__restrict __endptr,
     358  					  int __base, locale_t __loc)
     359       __THROW __nonnull ((1, 4));
     360  
     361  /* Versions of the above functions that handle '0b' and '0B' prefixes
     362     in base 0 or 2.  */
     363  # if __GLIBC_USE (C2X_STRTOL)
     364  #  ifdef __REDIRECT
     365  extern long int __REDIRECT_NTH (strtol_l, (const char *__restrict __nptr,
     366  					   char **__restrict __endptr,
     367  					   int __base, locale_t __loc),
     368  				__isoc23_strtol_l)
     369       __nonnull ((1, 4));
     370  extern unsigned long int __REDIRECT_NTH (strtoul_l,
     371  					 (const char *__restrict __nptr,
     372  					  char **__restrict __endptr,
     373  					  int __base, locale_t __loc),
     374  					 __isoc23_strtoul_l)
     375       __nonnull ((1, 4));
     376  __extension__
     377  extern long long int __REDIRECT_NTH (strtoll_l, (const char *__restrict __nptr,
     378  						 char **__restrict __endptr,
     379  						 int __base,
     380  						 locale_t __loc),
     381  				     __isoc23_strtoll_l)
     382       __nonnull ((1, 4));
     383  __extension__
     384  extern unsigned long long int __REDIRECT_NTH (strtoull_l,
     385  					      (const char *__restrict __nptr,
     386  					       char **__restrict __endptr,
     387  					       int __base, locale_t __loc),
     388  					      __isoc23_strtoull_l)
     389       __nonnull ((1, 4));
     390  #  else
     391  extern long int __isoc23_strtol_l (const char *__restrict __nptr,
     392  				   char **__restrict __endptr, int __base,
     393  				   locale_t __loc) __THROW __nonnull ((1, 4));
     394  extern unsigned long int __isoc23_strtoul_l (const char *__restrict __nptr,
     395  					     char **__restrict __endptr,
     396  					     int __base, locale_t __loc)
     397       __THROW __nonnull ((1, 4));
     398  __extension__
     399  extern long long int __isoc23_strtoll_l (const char *__restrict __nptr,
     400  					 char **__restrict __endptr,
     401  					 int __base, locale_t __loc)
     402       __THROW __nonnull ((1, 4));
     403  __extension__
     404  extern unsigned long long int __isoc23_strtoull_l (const char *__restrict __nptr,
     405  						   char **__restrict __endptr,
     406  						   int __base, locale_t __loc)
     407       __THROW __nonnull ((1, 4));
     408  #   define strtol_l __isoc23_strtol_l
     409  #   define strtoul_l __isoc23_strtoul_l
     410  #   define strtoll_l __isoc23_strtoll_l
     411  #   define strtoull_l __isoc23_strtoull_l
     412  #  endif
     413  # endif
     414  
     415  extern double strtod_l (const char *__restrict __nptr,
     416  			char **__restrict __endptr, locale_t __loc)
     417       __THROW __nonnull ((1, 3));
     418  
     419  extern float strtof_l (const char *__restrict __nptr,
     420  		       char **__restrict __endptr, locale_t __loc)
     421       __THROW __nonnull ((1, 3));
     422  
     423  extern long double strtold_l (const char *__restrict __nptr,
     424  			      char **__restrict __endptr,
     425  			      locale_t __loc)
     426       __THROW __nonnull ((1, 3));
     427  
     428  # if __HAVE_FLOAT16
     429  extern _Float16 strtof16_l (const char *__restrict __nptr,
     430  			    char **__restrict __endptr,
     431  			    locale_t __loc)
     432       __THROW __nonnull ((1, 3));
     433  # endif
     434  
     435  # if __HAVE_FLOAT32
     436  extern _Float32 strtof32_l (const char *__restrict __nptr,
     437  			    char **__restrict __endptr,
     438  			    locale_t __loc)
     439       __THROW __nonnull ((1, 3));
     440  # endif
     441  
     442  # if __HAVE_FLOAT64
     443  extern _Float64 strtof64_l (const char *__restrict __nptr,
     444  			    char **__restrict __endptr,
     445  			    locale_t __loc)
     446       __THROW __nonnull ((1, 3));
     447  # endif
     448  
     449  # if __HAVE_FLOAT128
     450  extern _Float128 strtof128_l (const char *__restrict __nptr,
     451  			      char **__restrict __endptr,
     452  			      locale_t __loc)
     453       __THROW __nonnull ((1, 3));
     454  # endif
     455  
     456  # if __HAVE_FLOAT32X
     457  extern _Float32x strtof32x_l (const char *__restrict __nptr,
     458  			      char **__restrict __endptr,
     459  			      locale_t __loc)
     460       __THROW __nonnull ((1, 3));
     461  # endif
     462  
     463  # if __HAVE_FLOAT64X
     464  extern _Float64x strtof64x_l (const char *__restrict __nptr,
     465  			      char **__restrict __endptr,
     466  			      locale_t __loc)
     467       __THROW __nonnull ((1, 3));
     468  # endif
     469  
     470  # if __HAVE_FLOAT128X
     471  extern _Float128x strtof128x_l (const char *__restrict __nptr,
     472  				char **__restrict __endptr,
     473  				locale_t __loc)
     474       __THROW __nonnull ((1, 3));
     475  # endif
     476  #endif /* GNU */
     477  
     478  
     479  #ifdef __USE_EXTERN_INLINES
     480  __extern_inline int
     481  __NTH (atoi (const char *__nptr))
     482  {
     483    return (int) strtol (__nptr, (char **) NULL, 10);
     484  }
     485  __extern_inline long int
     486  __NTH (atol (const char *__nptr))
     487  {
     488    return strtol (__nptr, (char **) NULL, 10);
     489  }
     490  
     491  # ifdef __USE_ISOC99
     492  __extension__ __extern_inline long long int
     493  __NTH (atoll (const char *__nptr))
     494  {
     495    return strtoll (__nptr, (char **) NULL, 10);
     496  }
     497  # endif
     498  #endif /* Optimizing and Inlining.  */
     499  
     500  
     501  #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
     502  /* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant
     503     digit first.  Returns a pointer to static storage overwritten by the
     504     next call.  */
     505  extern char *l64a (long int __n) __THROW __wur;
     506  
     507  /* Read a number from a string S in base 64 as above.  */
     508  extern long int a64l (const char *__s)
     509       __THROW __attribute_pure__ __nonnull ((1)) __wur;
     510  
     511  #endif	/* Use misc || extended X/Open.  */
     512  
     513  #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
     514  # include <sys/types.h>	/* we need int32_t... */
     515  
     516  /* These are the functions that actually do things.  The `random', `srandom',
     517     `initstate' and `setstate' functions are those from BSD Unices.
     518     The `rand' and `srand' functions are required by the ANSI standard.
     519     We provide both interfaces to the same random number generator.  */
     520  /* Return a random long integer between 0 and 2^31-1 inclusive.  */
     521  extern long int random (void) __THROW;
     522  
     523  /* Seed the random number generator with the given number.  */
     524  extern void srandom (unsigned int __seed) __THROW;
     525  
     526  /* Initialize the random number generator to use state buffer STATEBUF,
     527     of length STATELEN, and seed it with SEED.  Optimal lengths are 8, 16,
     528     32, 64, 128 and 256, the bigger the better; values less than 8 will
     529     cause an error and values greater than 256 will be rounded down.  */
     530  extern char *initstate (unsigned int __seed, char *__statebuf,
     531  			size_t __statelen) __THROW __nonnull ((2));
     532  
     533  /* Switch the random number generator to state buffer STATEBUF,
     534     which should have been previously initialized by `initstate'.  */
     535  extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
     536  
     537  
     538  # ifdef __USE_MISC
     539  /* Reentrant versions of the `random' family of functions.
     540     These functions all use the following data structure to contain
     541     state, rather than global state variables.  */
     542  
     543  struct random_data
     544    {
     545      int32_t *fptr;		/* Front pointer.  */
     546      int32_t *rptr;		/* Rear pointer.  */
     547      int32_t *state;		/* Array of state values.  */
     548      int rand_type;		/* Type of random number generator.  */
     549      int rand_deg;		/* Degree of random number generator.  */
     550      int rand_sep;		/* Distance between front and rear.  */
     551      int32_t *end_ptr;		/* Pointer behind state table.  */
     552    };
     553  
     554  extern int random_r (struct random_data *__restrict __buf,
     555  		     int32_t *__restrict __result) __THROW __nonnull ((1, 2));
     556  
     557  extern int srandom_r (unsigned int __seed, struct random_data *__buf)
     558       __THROW __nonnull ((2));
     559  
     560  extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
     561  			size_t __statelen,
     562  			struct random_data *__restrict __buf)
     563       __THROW __nonnull ((2, 4));
     564  
     565  extern int setstate_r (char *__restrict __statebuf,
     566  		       struct random_data *__restrict __buf)
     567       __THROW __nonnull ((1, 2));
     568  # endif	/* Use misc.  */
     569  #endif	/* Use extended X/Open || misc. */
     570  
     571  
     572  /* Return a random integer between 0 and RAND_MAX inclusive.  */
     573  extern int rand (void) __THROW;
     574  /* Seed the random number generator with the given number.  */
     575  extern void srand (unsigned int __seed) __THROW;
     576  
     577  #ifdef __USE_POSIX199506
     578  /* Reentrant interface according to POSIX.1.  */
     579  extern int rand_r (unsigned int *__seed) __THROW;
     580  #endif
     581  
     582  
     583  #if defined __USE_MISC || defined __USE_XOPEN
     584  /* System V style 48-bit random number generator functions.  */
     585  
     586  /* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
     587  extern double drand48 (void) __THROW;
     588  extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
     589  
     590  /* Return non-negative, long integer in [0,2^31).  */
     591  extern long int lrand48 (void) __THROW;
     592  extern long int nrand48 (unsigned short int __xsubi[3])
     593       __THROW __nonnull ((1));
     594  
     595  /* Return signed, long integers in [-2^31,2^31).  */
     596  extern long int mrand48 (void) __THROW;
     597  extern long int jrand48 (unsigned short int __xsubi[3])
     598       __THROW __nonnull ((1));
     599  
     600  /* Seed random number generator.  */
     601  extern void srand48 (long int __seedval) __THROW;
     602  extern unsigned short int *seed48 (unsigned short int __seed16v[3])
     603       __THROW __nonnull ((1));
     604  extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
     605  
     606  # ifdef __USE_MISC
     607  /* Data structure for communication with thread safe versions.  This
     608     type is to be regarded as opaque.  It's only exported because users
     609     have to allocate objects of this type.  */
     610  struct drand48_data
     611    {
     612      unsigned short int __x[3];	/* Current state.  */
     613      unsigned short int __old_x[3]; /* Old state.  */
     614      unsigned short int __c;	/* Additive const. in congruential formula.  */
     615      unsigned short int __init;	/* Flag for initializing.  */
     616      __extension__ unsigned long long int __a;	/* Factor in congruential
     617  						   formula.  */
     618    };
     619  
     620  /* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
     621  extern int drand48_r (struct drand48_data *__restrict __buffer,
     622  		      double *__restrict __result) __THROW __nonnull ((1, 2));
     623  extern int erand48_r (unsigned short int __xsubi[3],
     624  		      struct drand48_data *__restrict __buffer,
     625  		      double *__restrict __result) __THROW __nonnull ((1, 2));
     626  
     627  /* Return non-negative, long integer in [0,2^31).  */
     628  extern int lrand48_r (struct drand48_data *__restrict __buffer,
     629  		      long int *__restrict __result)
     630       __THROW __nonnull ((1, 2));
     631  extern int nrand48_r (unsigned short int __xsubi[3],
     632  		      struct drand48_data *__restrict __buffer,
     633  		      long int *__restrict __result)
     634       __THROW __nonnull ((1, 2));
     635  
     636  /* Return signed, long integers in [-2^31,2^31).  */
     637  extern int mrand48_r (struct drand48_data *__restrict __buffer,
     638  		      long int *__restrict __result)
     639       __THROW __nonnull ((1, 2));
     640  extern int jrand48_r (unsigned short int __xsubi[3],
     641  		      struct drand48_data *__restrict __buffer,
     642  		      long int *__restrict __result)
     643       __THROW __nonnull ((1, 2));
     644  
     645  /* Seed random number generator.  */
     646  extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     647       __THROW __nonnull ((2));
     648  
     649  extern int seed48_r (unsigned short int __seed16v[3],
     650  		     struct drand48_data *__buffer) __THROW __nonnull ((1, 2));
     651  
     652  extern int lcong48_r (unsigned short int __param[7],
     653  		      struct drand48_data *__buffer)
     654       __THROW __nonnull ((1, 2));
     655  
     656  /* Return a random integer between zero and 2**32-1 (inclusive).  */
     657  extern __uint32_t arc4random (void)
     658       __THROW __wur;
     659  
     660  /* Fill the buffer with random data.  */
     661  extern void arc4random_buf (void *__buf, size_t __size)
     662       __THROW __nonnull ((1));
     663  
     664  /* Return a random number between zero (inclusive) and the specified
     665     limit (exclusive).  */
     666  extern __uint32_t arc4random_uniform (__uint32_t __upper_bound)
     667       __THROW __wur;
     668  # endif	/* Use misc.  */
     669  #endif	/* Use misc or X/Open.  */
     670  
     671  /* Allocate SIZE bytes of memory.  */
     672  extern void *malloc (size_t __size) __THROW __attribute_malloc__
     673       __attribute_alloc_size__ ((1)) __wur;
     674  /* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
     675  extern void *calloc (size_t __nmemb, size_t __size)
     676       __THROW __attribute_malloc__ __attribute_alloc_size__ ((1, 2)) __wur;
     677  
     678  /* Re-allocate the previously allocated block
     679     in PTR, making the new block SIZE bytes long.  */
     680  /* __attribute_malloc__ is not used, because if realloc returns
     681     the same pointer that was passed to it, aliasing needs to be allowed
     682     between objects pointed by the old and new pointers.  */
     683  extern void *realloc (void *__ptr, size_t __size)
     684       __THROW __attribute_warn_unused_result__ __attribute_alloc_size__ ((2));
     685  
     686  /* Free a block allocated by `malloc', `realloc' or `calloc'.  */
     687  extern void free (void *__ptr) __THROW;
     688  
     689  #ifdef __USE_MISC
     690  /* Re-allocate the previously allocated block in PTR, making the new
     691     block large enough for NMEMB elements of SIZE bytes each.  */
     692  /* __attribute_malloc__ is not used, because if reallocarray returns
     693     the same pointer that was passed to it, aliasing needs to be allowed
     694     between objects pointed by the old and new pointers.  */
     695  extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
     696       __THROW __attribute_warn_unused_result__
     697       __attribute_alloc_size__ ((2, 3))
     698      __attr_dealloc_free;
     699  
     700  /* Add reallocarray as its own deallocator.  */
     701  extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
     702       __THROW __attr_dealloc (reallocarray, 1);
     703  #endif
     704  
     705  #ifdef __USE_MISC
     706  # include <alloca.h>
     707  #endif /* Use misc.  */
     708  
     709  #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
     710      || defined __USE_MISC
     711  /* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */
     712  extern void *valloc (size_t __size) __THROW __attribute_malloc__
     713       __attribute_alloc_size__ ((1)) __wur;
     714  #endif
     715  
     716  #ifdef __USE_XOPEN2K
     717  /* Allocate memory of SIZE bytes with an alignment of ALIGNMENT.  */
     718  extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
     719       __THROW __nonnull ((1)) __wur;
     720  #endif
     721  
     722  #ifdef __USE_ISOC11
     723  /* ISO C variant of aligned allocation.  */
     724  extern void *aligned_alloc (size_t __alignment, size_t __size)
     725       __THROW __attribute_malloc__ __attribute_alloc_align__ ((1))
     726       __attribute_alloc_size__ ((2)) __wur;
     727  #endif
     728  
     729  /* Abort execution and generate a core-dump.  */
     730  extern void abort (void) __THROW __attribute__ ((__noreturn__));
     731  
     732  
     733  /* Register a function to be called when `exit' is called.  */
     734  extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
     735  
     736  #if defined __USE_ISOC11 || defined __USE_ISOCXX11
     737  /* Register a function to be called when `quick_exit' is called.  */
     738  # ifdef __cplusplus
     739  extern "C++" int at_quick_exit (void (*__func) (void))
     740       __THROW __asm ("at_quick_exit") __nonnull ((1));
     741  # else
     742  extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1));
     743  # endif
     744  #endif
     745  
     746  #ifdef	__USE_MISC
     747  /* Register a function to be called with the status
     748     given to `exit' and the given argument.  */
     749  extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     750       __THROW __nonnull ((1));
     751  #endif
     752  
     753  /* Call all functions registered with `atexit' and `on_exit',
     754     in the reverse of the order in which they were registered,
     755     perform stdio cleanup, and terminate program execution with STATUS.  */
     756  extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
     757  
     758  #if defined __USE_ISOC11 || defined __USE_ISOCXX11
     759  /* Call all functions registered with `at_quick_exit' in the reverse
     760     of the order in which they were registered and terminate program
     761     execution with STATUS.  */
     762  extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__));
     763  #endif
     764  
     765  #ifdef __USE_ISOC99
     766  /* Terminate the program with STATUS without calling any of the
     767     functions registered with `atexit' or `on_exit'.  */
     768  extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
     769  #endif
     770  
     771  
     772  /* Return the value of envariable NAME, or NULL if it doesn't exist.  */
     773  extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
     774  
     775  #ifdef __USE_GNU
     776  /* This function is similar to the above but returns NULL if the
     777     programs is running with SUID or SGID enabled.  */
     778  extern char *secure_getenv (const char *__name)
     779       __THROW __nonnull ((1)) __wur;
     780  #endif
     781  
     782  #if defined __USE_MISC || defined __USE_XOPEN
     783  /* The SVID says this is in <stdio.h>, but this seems a better place.	*/
     784  /* Put STRING, which is of the form "NAME=VALUE", in the environment.
     785     If there is no `=', remove NAME from the environment.  */
     786  extern int putenv (char *__string) __THROW __nonnull ((1));
     787  #endif
     788  
     789  #ifdef __USE_XOPEN2K
     790  /* Set NAME to VALUE in the environment.
     791     If REPLACE is nonzero, overwrite an existing value.  */
     792  extern int setenv (const char *__name, const char *__value, int __replace)
     793       __THROW __nonnull ((2));
     794  
     795  /* Remove the variable NAME from the environment.  */
     796  extern int unsetenv (const char *__name) __THROW __nonnull ((1));
     797  #endif
     798  
     799  #ifdef	__USE_MISC
     800  /* The `clearenv' was planned to be added to POSIX.1 but probably
     801     never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
     802     for Fortran 77) requires this function.  */
     803  extern int clearenv (void) __THROW;
     804  #endif
     805  
     806  
     807  #if defined __USE_MISC \
     808      || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8)
     809  /* Generate a unique temporary file name from TEMPLATE.
     810     The last six characters of TEMPLATE must be "XXXXXX";
     811     they are replaced with a string that makes the file name unique.
     812     Always returns TEMPLATE, it's either a temporary file name or a null
     813     string if it cannot get a unique file name.  */
     814  extern char *mktemp (char *__template) __THROW __nonnull ((1));
     815  #endif
     816  
     817  #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
     818  /* Generate a unique temporary file name from TEMPLATE.
     819     The last six characters of TEMPLATE must be "XXXXXX";
     820     they are replaced with a string that makes the filename unique.
     821     Returns a file descriptor open on the file for reading and writing,
     822     or -1 if it cannot create a uniquely-named file.
     823  
     824     This function is a possible cancellation point and therefore not
     825     marked with __THROW.  */
     826  # ifndef __USE_FILE_OFFSET64
     827  extern int mkstemp (char *__template) __nonnull ((1)) __wur;
     828  # else
     829  #  ifdef __REDIRECT
     830  extern int __REDIRECT (mkstemp, (char *__template), mkstemp64)
     831       __nonnull ((1)) __wur;
     832  #  else
     833  #   define mkstemp mkstemp64
     834  #  endif
     835  # endif
     836  # ifdef __USE_LARGEFILE64
     837  extern int mkstemp64 (char *__template) __nonnull ((1)) __wur;
     838  # endif
     839  #endif
     840  
     841  #ifdef __USE_MISC
     842  /* Similar to mkstemp, but the template can have a suffix after the
     843     XXXXXX.  The length of the suffix is specified in the second
     844     parameter.
     845  
     846     This function is a possible cancellation point and therefore not
     847     marked with __THROW.  */
     848  # ifndef __USE_FILE_OFFSET64
     849  extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur;
     850  # else
     851  #  ifdef __REDIRECT
     852  extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen),
     853  		       mkstemps64) __nonnull ((1)) __wur;
     854  #  else
     855  #   define mkstemps mkstemps64
     856  #  endif
     857  # endif
     858  # ifdef __USE_LARGEFILE64
     859  extern int mkstemps64 (char *__template, int __suffixlen)
     860       __nonnull ((1)) __wur;
     861  # endif
     862  #endif
     863  
     864  #ifdef __USE_XOPEN2K8
     865  /* Create a unique temporary directory from TEMPLATE.
     866     The last six characters of TEMPLATE must be "XXXXXX";
     867     they are replaced with a string that makes the directory name unique.
     868     Returns TEMPLATE, or a null pointer if it cannot get a unique name.
     869     The directory is created mode 700.  */
     870  extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
     871  #endif
     872  
     873  #ifdef __USE_GNU
     874  /* Generate a unique temporary file name from TEMPLATE similar to
     875     mkstemp.  But allow the caller to pass additional flags which are
     876     used in the open call to create the file..
     877  
     878     This function is a possible cancellation point and therefore not
     879     marked with __THROW.  */
     880  # ifndef __USE_FILE_OFFSET64
     881  extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
     882  # else
     883  #  ifdef __REDIRECT
     884  extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
     885       __nonnull ((1)) __wur;
     886  #  else
     887  #   define mkostemp mkostemp64
     888  #  endif
     889  # endif
     890  # ifdef __USE_LARGEFILE64
     891  extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
     892  # endif
     893  
     894  /* Similar to mkostemp, but the template can have a suffix after the
     895     XXXXXX.  The length of the suffix is specified in the second
     896     parameter.
     897  
     898     This function is a possible cancellation point and therefore not
     899     marked with __THROW.  */
     900  # ifndef __USE_FILE_OFFSET64
     901  extern int mkostemps (char *__template, int __suffixlen, int __flags)
     902       __nonnull ((1)) __wur;
     903  # else
     904  #  ifdef __REDIRECT
     905  extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen,
     906  				   int __flags), mkostemps64)
     907       __nonnull ((1)) __wur;
     908  #  else
     909  #   define mkostemps mkostemps64
     910  #  endif
     911  # endif
     912  # ifdef __USE_LARGEFILE64
     913  extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
     914       __nonnull ((1)) __wur;
     915  # endif
     916  #endif
     917  
     918  
     919  /* Execute the given line as a shell command.
     920  
     921     This function is a cancellation point and therefore not marked with
     922     __THROW.  */
     923  extern int system (const char *__command) __wur;
     924  
     925  
     926  #ifdef	__USE_GNU
     927  /* Return a malloc'd string containing the canonical absolute name of the
     928     existing named file.  */
     929  extern char *canonicalize_file_name (const char *__name)
     930       __THROW __nonnull ((1)) __attribute_malloc__
     931       __attr_dealloc_free __wur;
     932  #endif
     933  
     934  #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
     935  /* Return the canonical absolute name of file NAME.  If RESOLVED is
     936     null, the result is malloc'd; otherwise, if the canonical name is
     937     PATH_MAX chars or more, returns null with `errno' set to
     938     ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
     939     returns the name in RESOLVED.  */
     940  extern char *realpath (const char *__restrict __name,
     941  		       char *__restrict __resolved) __THROW __wur;
     942  #endif
     943  
     944  
     945  /* Shorthand for type of comparison functions.  */
     946  #ifndef __COMPAR_FN_T
     947  # define __COMPAR_FN_T
     948  typedef int (*__compar_fn_t) (const void *, const void *);
     949  
     950  # ifdef	__USE_GNU
     951  typedef __compar_fn_t comparison_fn_t;
     952  # endif
     953  #endif
     954  #ifdef __USE_GNU
     955  typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
     956  #endif
     957  
     958  /* Do a binary search for KEY in BASE, which consists of NMEMB elements
     959     of SIZE bytes each, using COMPAR to perform the comparisons.  */
     960  extern void *bsearch (const void *__key, const void *__base,
     961  		      size_t __nmemb, size_t __size, __compar_fn_t __compar)
     962       __nonnull ((1, 2, 5)) __wur;
     963  
     964  #ifdef __USE_EXTERN_INLINES
     965  # include <bits/stdlib-bsearch.h>
     966  #endif
     967  
     968  /* Sort NMEMB elements of BASE, of SIZE bytes each,
     969     using COMPAR to perform the comparisons.  */
     970  extern void qsort (void *__base, size_t __nmemb, size_t __size,
     971  		   __compar_fn_t __compar) __nonnull ((1, 4));
     972  #ifdef __USE_GNU
     973  extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
     974  		     __compar_d_fn_t __compar, void *__arg)
     975    __nonnull ((1, 4));
     976  #endif
     977  
     978  
     979  /* Return the absolute value of X.  */
     980  extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
     981  extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
     982  
     983  #ifdef __USE_ISOC99
     984  __extension__ extern long long int llabs (long long int __x)
     985       __THROW __attribute__ ((__const__)) __wur;
     986  #endif
     987  
     988  
     989  /* Return the `div_t', `ldiv_t' or `lldiv_t' representation
     990     of the value of NUMER over DENOM. */
     991  /* GCC may have built-ins for these someday.  */
     992  extern div_t div (int __numer, int __denom)
     993       __THROW __attribute__ ((__const__)) __wur;
     994  extern ldiv_t ldiv (long int __numer, long int __denom)
     995       __THROW __attribute__ ((__const__)) __wur;
     996  
     997  #ifdef __USE_ISOC99
     998  __extension__ extern lldiv_t lldiv (long long int __numer,
     999  				    long long int __denom)
    1000       __THROW __attribute__ ((__const__)) __wur;
    1001  #endif
    1002  
    1003  
    1004  #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
    1005      || defined __USE_MISC
    1006  /* Convert floating point numbers to strings.  The returned values are
    1007     valid only until another call to the same function.  */
    1008  
    1009  /* Convert VALUE to a string with NDIGIT digits and return a pointer to
    1010     this.  Set *DECPT with the position of the decimal character and *SIGN
    1011     with the sign of the number.  */
    1012  extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
    1013  		   int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
    1014  
    1015  /* Convert VALUE to a string rounded to NDIGIT decimal digits.  Set *DECPT
    1016     with the position of the decimal character and *SIGN with the sign of
    1017     the number.  */
    1018  extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
    1019  		   int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
    1020  
    1021  /* If possible convert VALUE to a string with NDIGIT significant digits.
    1022     Otherwise use exponential representation.  The resulting string will
    1023     be written to BUF.  */
    1024  extern char *gcvt (double __value, int __ndigit, char *__buf)
    1025       __THROW __nonnull ((3)) __wur;
    1026  #endif
    1027  
    1028  #ifdef __USE_MISC
    1029  /* Long double versions of above functions.  */
    1030  extern char *qecvt (long double __value, int __ndigit,
    1031  		    int *__restrict __decpt, int *__restrict __sign)
    1032       __THROW __nonnull ((3, 4)) __wur;
    1033  extern char *qfcvt (long double __value, int __ndigit,
    1034  		    int *__restrict __decpt, int *__restrict __sign)
    1035       __THROW __nonnull ((3, 4)) __wur;
    1036  extern char *qgcvt (long double __value, int __ndigit, char *__buf)
    1037       __THROW __nonnull ((3)) __wur;
    1038  
    1039  
    1040  /* Reentrant version of the functions above which provide their own
    1041     buffers.  */
    1042  extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
    1043  		   int *__restrict __sign, char *__restrict __buf,
    1044  		   size_t __len) __THROW __nonnull ((3, 4, 5));
    1045  extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
    1046  		   int *__restrict __sign, char *__restrict __buf,
    1047  		   size_t __len) __THROW __nonnull ((3, 4, 5));
    1048  
    1049  extern int qecvt_r (long double __value, int __ndigit,
    1050  		    int *__restrict __decpt, int *__restrict __sign,
    1051  		    char *__restrict __buf, size_t __len)
    1052       __THROW __nonnull ((3, 4, 5));
    1053  extern int qfcvt_r (long double __value, int __ndigit,
    1054  		    int *__restrict __decpt, int *__restrict __sign,
    1055  		    char *__restrict __buf, size_t __len)
    1056       __THROW __nonnull ((3, 4, 5));
    1057  #endif	/* misc */
    1058  
    1059  
    1060  /* Return the length of the multibyte character
    1061     in S, which is no longer than N.  */
    1062  extern int mblen (const char *__s, size_t __n) __THROW;
    1063  /* Return the length of the given multibyte character,
    1064     putting its `wchar_t' representation in *PWC.  */
    1065  extern int mbtowc (wchar_t *__restrict __pwc,
    1066  		   const char *__restrict __s, size_t __n) __THROW;
    1067  /* Put the multibyte character represented
    1068     by WCHAR in S, returning its length.  */
    1069  extern int wctomb (char *__s, wchar_t __wchar) __THROW;
    1070  
    1071  
    1072  /* Convert a multibyte string to a wide char string.  */
    1073  extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
    1074  			const char *__restrict __s, size_t __n) __THROW
    1075      __attr_access ((__read_only__, 2));
    1076  /* Convert a wide char string to multibyte string.  */
    1077  extern size_t wcstombs (char *__restrict __s,
    1078  			const wchar_t *__restrict __pwcs, size_t __n)
    1079       __THROW
    1080    __fortified_attr_access (__write_only__, 1, 3)
    1081    __attr_access ((__read_only__, 2));
    1082  
    1083  #ifdef __USE_MISC
    1084  /* Determine whether the string value of RESPONSE matches the affirmation
    1085     or negative response expression as specified by the LC_MESSAGES category
    1086     in the program's current locale.  Returns 1 if affirmative, 0 if
    1087     negative, and -1 if not matching.  */
    1088  extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur;
    1089  #endif
    1090  
    1091  
    1092  #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
    1093  /* Parse comma separated suboption from *OPTIONP and match against
    1094     strings in TOKENS.  If found return index and set *VALUEP to
    1095     optional value introduced by an equal sign.  If the suboption is
    1096     not part of TOKENS return in *VALUEP beginning of unknown
    1097     suboption.  On exit *OPTIONP is set to the beginning of the next
    1098     token or at the terminating NUL character.  */
    1099  extern int getsubopt (char **__restrict __optionp,
    1100  		      char *const *__restrict __tokens,
    1101  		      char **__restrict __valuep)
    1102       __THROW __nonnull ((1, 2, 3)) __wur;
    1103  #endif
    1104  
    1105  
    1106  /* X/Open pseudo terminal handling.  */
    1107  
    1108  #ifdef __USE_XOPEN2KXSI
    1109  /* Return a master pseudo-terminal handle.  */
    1110  extern int posix_openpt (int __oflag) __wur;
    1111  #endif
    1112  
    1113  #ifdef __USE_XOPEN_EXTENDED
    1114  /* The next four functions all take a master pseudo-tty fd and
    1115     perform an operation on the associated slave:  */
    1116  
    1117  /* Chown the slave to the calling user.  */
    1118  extern int grantpt (int __fd) __THROW;
    1119  
    1120  /* Release an internal lock so the slave can be opened.
    1121     Call after grantpt().  */
    1122  extern int unlockpt (int __fd) __THROW;
    1123  
    1124  /* Return the pathname of the pseudo terminal slave associated with
    1125     the master FD is open on, or NULL on errors.
    1126     The returned storage is good until the next call to this function.  */
    1127  extern char *ptsname (int __fd) __THROW __wur;
    1128  #endif
    1129  
    1130  #ifdef __USE_GNU
    1131  /* Store at most BUFLEN characters of the pathname of the slave pseudo
    1132     terminal associated with the master FD is open on in BUF.
    1133     Return 0 on success, otherwise an error number.  */
    1134  extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
    1135       __THROW __nonnull ((2)) __fortified_attr_access (__write_only__, 2, 3);
    1136  
    1137  /* Open a master pseudo terminal and return its file descriptor.  */
    1138  extern int getpt (void);
    1139  #endif
    1140  
    1141  #ifdef __USE_MISC
    1142  /* Put the 1 minute, 5 minute and 15 minute load averages into the first
    1143     NELEM elements of LOADAVG.  Return the number written (never more than
    1144     three, but may be less than NELEM), or -1 if an error occurred.  */
    1145  extern int getloadavg (double __loadavg[], int __nelem)
    1146       __THROW __nonnull ((1));
    1147  #endif
    1148  
    1149  #if defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K
    1150  /* Return the index into the active-logins file (utmp) for
    1151     the controlling terminal.  */
    1152  extern int ttyslot (void) __THROW;
    1153  #endif
    1154  
    1155  #include <bits/stdlib-float.h>
    1156  
    1157  /* Define some macros helping to catch buffer overflows.  */
    1158  #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
    1159  # include <bits/stdlib.h>
    1160  #endif
    1161  
    1162  #include <bits/floatn.h>
    1163  #if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
    1164  # include <bits/stdlib-ldbl.h>
    1165  #endif
    1166  
    1167  __END_DECLS
    1168  
    1169  #endif /* stdlib.h  */