|  | /* Copyright (C) 1991-2014 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 | 
|  | 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 C Library 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 | 
|  | Lesser General Public License for more details. | 
|  |  | 
|  | You should have received a copy of the GNU Lesser General Public | 
|  | License along with the GNU C Library; if not, see | 
|  | <http://www.gnu.org/licenses/>.  */ | 
|  |  | 
|  | /* | 
|  | *	ISO C99 Standard: 7.20 General utilities	<stdlib.h> | 
|  | */ | 
|  |  | 
|  | #ifndef	_STDLIB_H | 
|  |  | 
|  | #include <features.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 | 
|  | #include <stddef.h> | 
|  |  | 
|  | __BEGIN_DECLS | 
|  |  | 
|  | #ifdef __ros__ | 
|  | #include <bits/stdlib-akaros.h> | 
|  | #endif | 
|  |  | 
|  | #ifndef __need_malloc_and_calloc | 
|  | #define	_STDLIB_H	1 | 
|  |  | 
|  | #if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H | 
|  | /* XPG requires a few symbols from <sys/wait.h> being defined.  */ | 
|  | # include <bits/waitflags.h> | 
|  | # include <bits/waitstatus.h> | 
|  |  | 
|  | # ifdef __USE_BSD | 
|  |  | 
|  | /* Lots of hair to allow traditional BSD use of `union wait' | 
|  | as well as POSIX.1 use of `int' for the status word.  */ | 
|  |  | 
|  | #  if defined __GNUC__ && !defined __cplusplus | 
|  | #   define __WAIT_INT(status) \ | 
|  | (__extension__ (((union { __typeof(status) __in; int __i; }) \ | 
|  | { .__in = (status) }).__i)) | 
|  | #  else | 
|  | #   define __WAIT_INT(status)	(*(int *) &(status)) | 
|  | #  endif | 
|  |  | 
|  | /* This is the type of the argument to `wait'.  The funky union | 
|  | causes redeclarations with either `int *' or `union wait *' to be | 
|  | allowed without complaint.  __WAIT_STATUS_DEFN is the type used in | 
|  | the actual function definitions.  */ | 
|  |  | 
|  | #  if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus | 
|  | #   define __WAIT_STATUS	void * | 
|  | #   define __WAIT_STATUS_DEFN	void * | 
|  | #  else | 
|  | /* This works in GCC 2.6.1 and later.  */ | 
|  | typedef union | 
|  | { | 
|  | union wait *__uptr; | 
|  | int *__iptr; | 
|  | } __WAIT_STATUS __attribute__ ((__transparent_union__)); | 
|  | #   define __WAIT_STATUS_DEFN	int * | 
|  | #  endif | 
|  |  | 
|  | # else /* Don't use BSD.  */ | 
|  |  | 
|  | #  define __WAIT_INT(status)	(status) | 
|  | #  define __WAIT_STATUS		int * | 
|  | #  define __WAIT_STATUS_DEFN	int * | 
|  |  | 
|  | # endif /* Use BSD.  */ | 
|  |  | 
|  | /* Define the macros <sys/wait.h> also would define this way.  */ | 
|  | # define WEXITSTATUS(status)	__WEXITSTATUS (__WAIT_INT (status)) | 
|  | # define WTERMSIG(status)	__WTERMSIG (__WAIT_INT (status)) | 
|  | # define WSTOPSIG(status)	__WSTOPSIG (__WAIT_INT (status)) | 
|  | # define WIFEXITED(status)	__WIFEXITED (__WAIT_INT (status)) | 
|  | # define WIFSIGNALED(status)	__WIFSIGNALED (__WAIT_INT (status)) | 
|  | # define WIFSTOPPED(status)	__WIFSTOPPED (__WAIT_INT (status)) | 
|  | # ifdef __WIFCONTINUED | 
|  | #  define WIFCONTINUED(status)	__WIFCONTINUED (__WAIT_INT (status)) | 
|  | # endif | 
|  | #endif	/* X/Open or XPG7 and <sys/wait.h> not included.  */ | 
|  |  | 
|  | __BEGIN_NAMESPACE_STD | 
|  | /* Returned by `div'.  */ | 
|  | typedef struct | 
|  | { | 
|  | int quot;			/* Quotient.  */ | 
|  | int rem;			/* Remainder.  */ | 
|  | } div_t; | 
|  |  | 
|  | /* Returned by `ldiv'.  */ | 
|  | #ifndef __ldiv_t_defined | 
|  | typedef struct | 
|  | { | 
|  | long int quot;		/* Quotient.  */ | 
|  | long int rem;		/* Remainder.  */ | 
|  | } 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 | 
|  | { | 
|  | long long int quot;		/* Quotient.  */ | 
|  | long long int rem;		/* Remainder.  */ | 
|  | } lldiv_t; | 
|  | # define __lldiv_t_defined	1 | 
|  | __END_NAMESPACE_C99 | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* The largest number rand will return (same as INT_MAX).  */ | 
|  | #define	RAND_MAX	2147483647 | 
|  |  | 
|  |  | 
|  | /* We define these the same for all machines. | 
|  | Changes from this to the outside world should be done in `_exit'.  */ | 
|  | #define	EXIT_FAILURE	1	/* Failing exit status.  */ | 
|  | #define	EXIT_SUCCESS	0	/* Successful exit status.  */ | 
|  |  | 
|  |  | 
|  | /* Maximum length of a multibyte character in the current locale.  */ | 
|  | #define	MB_CUR_MAX	(__ctype_get_mb_cur_max ()) | 
|  | 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; | 
|  | /* Convert a string to an integer.  */ | 
|  | extern int atoi (const char *__nptr) | 
|  | __THROW __attribute_pure__ __nonnull ((1)) __wur; | 
|  | /* Convert a string to a long integer.  */ | 
|  | extern long int atol (const char *__nptr) | 
|  | __THROW __attribute_pure__ __nonnull ((1)) __wur; | 
|  | __END_NAMESPACE_STD | 
|  |  | 
|  | #if defined __USE_ISOC99 || defined __USE_MISC | 
|  | __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)); | 
|  |  | 
|  | extern long double strtold (const char *__restrict __nptr, | 
|  | char **__restrict __endptr) | 
|  | __THROW __nonnull ((1)); | 
|  | __END_NAMESPACE_C99 | 
|  | #endif | 
|  |  | 
|  | __BEGIN_NAMESPACE_STD | 
|  | /* Convert a string to a long integer.  */ | 
|  | extern long int strtol (const char *__restrict __nptr, | 
|  | char **__restrict __endptr, int __base) | 
|  | __THROW __nonnull ((1)); | 
|  | /* Convert a string to an unsigned long integer.  */ | 
|  | extern unsigned long int strtoul (const char *__restrict __nptr, | 
|  | char **__restrict __endptr, int __base) | 
|  | __THROW __nonnull ((1)); | 
|  | __END_NAMESPACE_STD | 
|  |  | 
|  | #ifdef __USE_BSD | 
|  | /* Convert a string to a quadword integer.  */ | 
|  | __extension__ | 
|  | extern long long int strtoq (const char *__restrict __nptr, | 
|  | char **__restrict __endptr, int __base) | 
|  | __THROW __nonnull ((1)); | 
|  | /* Convert a string to an unsigned quadword integer.  */ | 
|  | __extension__ | 
|  | extern unsigned long long int strtouq (const char *__restrict __nptr, | 
|  | char **__restrict __endptr, int __base) | 
|  | __THROW __nonnull ((1)); | 
|  | #endif /* Use BSD.  */ | 
|  |  | 
|  | #if defined __USE_ISOC99 || defined __USE_MISC | 
|  | __BEGIN_NAMESPACE_C99 | 
|  | /* Convert a string to a quadword integer.  */ | 
|  | __extension__ | 
|  | extern long long int strtoll (const char *__restrict __nptr, | 
|  | char **__restrict __endptr, int __base) | 
|  | __THROW __nonnull ((1)); | 
|  | /* Convert a string to an unsigned quadword integer.  */ | 
|  | __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.  */ | 
|  |  | 
|  |  | 
|  | #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.  */ | 
|  | extern long int strtol_l (const char *__restrict __nptr, | 
|  | char **__restrict __endptr, int __base, | 
|  | __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) | 
|  | __THROW __nonnull ((1, 4)); | 
|  |  | 
|  | __extension__ | 
|  | extern long long int strtoll_l (const char *__restrict __nptr, | 
|  | char **__restrict __endptr, int __base, | 
|  | __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) | 
|  | __THROW __nonnull ((1, 4)); | 
|  |  | 
|  | extern double strtod_l (const char *__restrict __nptr, | 
|  | char **__restrict __endptr, __locale_t __loc) | 
|  | __THROW __nonnull ((1, 3)); | 
|  |  | 
|  | extern float strtof_l (const char *__restrict __nptr, | 
|  | 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) | 
|  | __THROW __nonnull ((1, 3)); | 
|  | #endif /* GNU */ | 
|  |  | 
|  |  | 
|  | #ifdef __USE_EXTERN_INLINES | 
|  | __BEGIN_NAMESPACE_STD | 
|  | __extern_inline int | 
|  | __NTH (atoi (const char *__nptr)) | 
|  | { | 
|  | return (int) strtol (__nptr, (char **) NULL, 10); | 
|  | } | 
|  | __extern_inline long int | 
|  | __NTH (atol (const char *__nptr)) | 
|  | { | 
|  | return strtol (__nptr, (char **) NULL, 10); | 
|  | } | 
|  | __END_NAMESPACE_STD | 
|  |  | 
|  | # if defined __USE_MISC || defined __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.  */ | 
|  |  | 
|  |  | 
|  | #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED | 
|  | /* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant | 
|  | digit first.  Returns a pointer to static storage overwritten by the | 
|  | next call.  */ | 
|  | extern char *l64a (long int __n) __THROW __wur; | 
|  |  | 
|  | /* Read a number from a string S in base 64 as above.  */ | 
|  | extern long int a64l (const char *__s) | 
|  | __THROW __attribute_pure__ __nonnull ((1)) __wur; | 
|  |  | 
|  | #endif	/* Use SVID || extended X/Open.  */ | 
|  |  | 
|  | #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED || defined __USE_BSD | 
|  | # include <sys/types.h>	/* we need int32_t... */ | 
|  |  | 
|  | /* These are the functions that actually do things.  The `random', `srandom', | 
|  | `initstate' and `setstate' functions are those from BSD Unices. | 
|  | The `rand' and `srand' functions are required by the ANSI standard. | 
|  | We provide both interfaces to the same random number generator.  */ | 
|  | /* Return a random long integer between 0 and RAND_MAX inclusive.  */ | 
|  | extern long int random (void) __THROW; | 
|  |  | 
|  | /* Seed the random number generator with the given number.  */ | 
|  | extern void srandom (unsigned int __seed) __THROW; | 
|  |  | 
|  | /* Initialize the random number generator to use state buffer STATEBUF, | 
|  | of length STATELEN, and seed it with SEED.  Optimal lengths are 8, 16, | 
|  | 32, 64, 128 and 256, the bigger the better; values less than 8 will | 
|  | cause an error and values greater than 256 will be rounded down.  */ | 
|  | extern char *initstate (unsigned int __seed, char *__statebuf, | 
|  | size_t __statelen) __THROW __nonnull ((2)); | 
|  |  | 
|  | /* Switch the random number generator to state buffer STATEBUF, | 
|  | which should have been previously initialized by `initstate'.  */ | 
|  | extern char *setstate (char *__statebuf) __THROW __nonnull ((1)); | 
|  |  | 
|  |  | 
|  | # ifdef __USE_MISC | 
|  | /* Reentrant versions of the `random' family of functions. | 
|  | These functions all use the following data structure to contain | 
|  | state, rather than global state variables.  */ | 
|  |  | 
|  | struct random_data | 
|  | { | 
|  | int32_t *fptr;		/* Front pointer.  */ | 
|  | int32_t *rptr;		/* Rear pointer.  */ | 
|  | int32_t *state;		/* Array of state values.  */ | 
|  | int rand_type;		/* Type of random number generator.  */ | 
|  | int rand_deg;		/* Degree of random number generator.  */ | 
|  | int rand_sep;		/* Distance between front and rear.  */ | 
|  | int32_t *end_ptr;		/* Pointer behind state table.  */ | 
|  | }; | 
|  |  | 
|  | extern int random_r (struct random_data *__restrict __buf, | 
|  | int32_t *__restrict __result) __THROW __nonnull ((1, 2)); | 
|  |  | 
|  | extern int srandom_r (unsigned int __seed, struct random_data *__buf) | 
|  | __THROW __nonnull ((2)); | 
|  |  | 
|  | extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, | 
|  | size_t __statelen, | 
|  | struct random_data *__restrict __buf) | 
|  | __THROW __nonnull ((2, 4)); | 
|  |  | 
|  | extern int setstate_r (char *__restrict __statebuf, | 
|  | struct random_data *__restrict __buf) | 
|  | __THROW __nonnull ((1, 2)); | 
|  | # endif	/* Use misc.  */ | 
|  | #endif	/* Use SVID || extended X/Open || BSD. */ | 
|  |  | 
|  |  | 
|  | __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 | 
|  | /* Reentrant interface according to POSIX.1.  */ | 
|  | extern int rand_r (unsigned int *__seed) __THROW; | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #if defined __USE_SVID || defined __USE_XOPEN | 
|  | /* System V style 48-bit random number generator functions.  */ | 
|  |  | 
|  | /* Return non-negative, double-precision floating-point value in [0.0,1.0).  */ | 
|  | extern double drand48 (void) __THROW; | 
|  | extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1)); | 
|  |  | 
|  | /* Return non-negative, long integer in [0,2^31).  */ | 
|  | extern long int lrand48 (void) __THROW; | 
|  | extern long int nrand48 (unsigned short int __xsubi[3]) | 
|  | __THROW __nonnull ((1)); | 
|  |  | 
|  | /* Return signed, long integers in [-2^31,2^31).  */ | 
|  | extern long int mrand48 (void) __THROW; | 
|  | extern long int jrand48 (unsigned short int __xsubi[3]) | 
|  | __THROW __nonnull ((1)); | 
|  |  | 
|  | /* Seed random number generator.  */ | 
|  | extern void srand48 (long int __seedval) __THROW; | 
|  | extern unsigned short int *seed48 (unsigned short int __seed16v[3]) | 
|  | __THROW __nonnull ((1)); | 
|  | extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1)); | 
|  |  | 
|  | # ifdef __USE_MISC | 
|  | /* Data structure for communication with thread safe versions.  This | 
|  | type is to be regarded as opaque.  It's only exported because users | 
|  | have to allocate objects of this type.  */ | 
|  | struct drand48_data | 
|  | { | 
|  | unsigned short int __x[3];	/* Current state.  */ | 
|  | unsigned short int __old_x[3]; /* Old state.  */ | 
|  | unsigned short int __c;	/* Additive const. in congruential formula.  */ | 
|  | unsigned short int __init;	/* Flag for initializing.  */ | 
|  | __extension__ unsigned long long int __a;	/* Factor in congruential | 
|  | formula.  */ | 
|  | }; | 
|  |  | 
|  | /* Return non-negative, double-precision floating-point value in [0.0,1.0).  */ | 
|  | extern int drand48_r (struct drand48_data *__restrict __buffer, | 
|  | double *__restrict __result) __THROW __nonnull ((1, 2)); | 
|  | extern int erand48_r (unsigned short int __xsubi[3], | 
|  | struct drand48_data *__restrict __buffer, | 
|  | double *__restrict __result) __THROW __nonnull ((1, 2)); | 
|  |  | 
|  | /* Return non-negative, long integer in [0,2^31).  */ | 
|  | extern int lrand48_r (struct drand48_data *__restrict __buffer, | 
|  | long int *__restrict __result) | 
|  | __THROW __nonnull ((1, 2)); | 
|  | extern int nrand48_r (unsigned short int __xsubi[3], | 
|  | struct drand48_data *__restrict __buffer, | 
|  | long int *__restrict __result) | 
|  | __THROW __nonnull ((1, 2)); | 
|  |  | 
|  | /* Return signed, long integers in [-2^31,2^31).  */ | 
|  | extern int mrand48_r (struct drand48_data *__restrict __buffer, | 
|  | long int *__restrict __result) | 
|  | __THROW __nonnull ((1, 2)); | 
|  | extern int jrand48_r (unsigned short int __xsubi[3], | 
|  | struct drand48_data *__restrict __buffer, | 
|  | long int *__restrict __result) | 
|  | __THROW __nonnull ((1, 2)); | 
|  |  | 
|  | /* Seed random number generator.  */ | 
|  | extern int srand48_r (long int __seedval, struct drand48_data *__buffer) | 
|  | __THROW __nonnull ((2)); | 
|  |  | 
|  | extern int seed48_r (unsigned short int __seed16v[3], | 
|  | struct drand48_data *__buffer) __THROW __nonnull ((1, 2)); | 
|  |  | 
|  | extern int lcong48_r (unsigned short int __param[7], | 
|  | struct drand48_data *__buffer) | 
|  | __THROW __nonnull ((1, 2)); | 
|  | # endif	/* Use misc.  */ | 
|  | #endif	/* Use SVID 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; | 
|  | /* 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 | 
|  |  | 
|  | #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__; | 
|  | /* 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.  */ | 
|  |  | 
|  | #if defined __USE_GNU || defined __USE_BSD || defined __USE_MISC | 
|  | # include <alloca.h> | 
|  | #endif /* Use GNU, BSD, or misc.  */ | 
|  |  | 
|  | #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \ | 
|  | || defined __USE_BSD | 
|  | /* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */ | 
|  | extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur; | 
|  | #endif | 
|  |  | 
|  | #ifdef __USE_XOPEN2K | 
|  | /* Allocate memory of SIZE bytes with an alignment of ALIGNMENT.  */ | 
|  | extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) | 
|  | __THROW __nonnull ((1)) __wur; | 
|  | #endif | 
|  |  | 
|  | #ifdef __USE_ISOC11 | 
|  | /* ISO C variant of aligned allocation.  */ | 
|  | 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__)); | 
|  |  | 
|  |  | 
|  | /* Register a function to be called when `exit' is called.  */ | 
|  | extern int atexit (void (*__func) (void)) __THROW __nonnull ((1)); | 
|  |  | 
|  | #if defined __USE_ISOC11 || defined __USE_ISOCXX11 | 
|  | /* Register a function to be called when `quick_exit' is called.  */ | 
|  | # ifdef __cplusplus | 
|  | extern "C++" int at_quick_exit (void (*__func) (void)) | 
|  | __THROW __asm ("at_quick_exit") __nonnull ((1)); | 
|  | # else | 
|  | 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 | 
|  | given to `exit' and the given argument.  */ | 
|  | 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.  */ | 
|  | extern void exit (int __status) __THROW __attribute__ ((__noreturn__)); | 
|  |  | 
|  | #if defined __USE_ISOC11 || defined __USE_ISOCXX11 | 
|  | /* Call all functions registered with `at_quick_exit' in the reverse | 
|  | of the order in which they were registered and terminate program | 
|  | 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 | 
|  | programs is running with SUID or SGID enabled.  */ | 
|  | extern char *secure_getenv (const char *__name) | 
|  | __THROW __nonnull ((1)) __wur; | 
|  | #endif | 
|  |  | 
|  | #if defined __USE_SVID || defined __USE_XOPEN | 
|  | /* The SVID says this is in <stdio.h>, but this seems a better place.	*/ | 
|  | /* Put STRING, which is of the form "NAME=VALUE", in the environment. | 
|  | If there is no `=', remove NAME from the environment.  */ | 
|  | extern int putenv (char *__string) __THROW __nonnull ((1)); | 
|  | #endif | 
|  |  | 
|  | #if defined __USE_BSD || defined __USE_XOPEN2K | 
|  | /* Set NAME to VALUE in the environment. | 
|  | If REPLACE is nonzero, overwrite an existing value.  */ | 
|  | extern int setenv (const char *__name, const char *__value, int __replace) | 
|  | __THROW __nonnull ((2)); | 
|  |  | 
|  | /* Remove the variable NAME from the environment.  */ | 
|  | extern int unsetenv (const char *__name) __THROW __nonnull ((1)); | 
|  | #endif | 
|  |  | 
|  | #ifdef	__USE_MISC | 
|  | /* The `clearenv' was planned to be added to POSIX.1 but probably | 
|  | never made it.  Nevertheless the POSIX.9 standard (POSIX bindings | 
|  | for Fortran 77) requires this function.  */ | 
|  | extern int clearenv (void) __THROW; | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #if defined __USE_MISC \ | 
|  | || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) | 
|  | /* Generate a unique temporary file name from TEMPLATE. | 
|  | The last six characters of TEMPLATE must be "XXXXXX"; | 
|  | they are replaced with a string that makes the file name unique. | 
|  | Always returns TEMPLATE, it's either a temporary file name or a null | 
|  | string if it cannot get a unique file name.  */ | 
|  | extern char *mktemp (char *__template) __THROW __nonnull ((1)); | 
|  | #endif | 
|  |  | 
|  | #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED \ | 
|  | || defined __USE_XOPEN2K8 | 
|  | /* Generate a unique temporary file name from TEMPLATE. | 
|  | The last six characters of TEMPLATE must be "XXXXXX"; | 
|  | they are replaced with a string that makes the filename unique. | 
|  | Returns a file descriptor open on the file for reading and writing, | 
|  | or -1 if it cannot create a uniquely-named file. | 
|  |  | 
|  | This function is a possible cancellation point and therefore not | 
|  | marked with __THROW.  */ | 
|  | # ifndef __USE_FILE_OFFSET64 | 
|  | extern int mkstemp (char *__template) __nonnull ((1)) __wur; | 
|  | # else | 
|  | #  ifdef __REDIRECT | 
|  | extern int __REDIRECT (mkstemp, (char *__template), mkstemp64) | 
|  | __nonnull ((1)) __wur; | 
|  | #  else | 
|  | #   define mkstemp mkstemp64 | 
|  | #  endif | 
|  | # endif | 
|  | # ifdef __USE_LARGEFILE64 | 
|  | extern int mkstemp64 (char *__template) __nonnull ((1)) __wur; | 
|  | # endif | 
|  | #endif | 
|  |  | 
|  | #ifdef __USE_MISC | 
|  | /* Similar to mkstemp, but the template can have a suffix after the | 
|  | XXXXXX.  The length of the suffix is specified in the second | 
|  | parameter. | 
|  |  | 
|  | This function is a possible cancellation point and therefore not | 
|  | marked with __THROW.  */ | 
|  | # ifndef __USE_FILE_OFFSET64 | 
|  | extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur; | 
|  | # else | 
|  | #  ifdef __REDIRECT | 
|  | extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen), | 
|  | mkstemps64) __nonnull ((1)) __wur; | 
|  | #  else | 
|  | #   define mkstemps mkstemps64 | 
|  | #  endif | 
|  | # endif | 
|  | # ifdef __USE_LARGEFILE64 | 
|  | extern int mkstemps64 (char *__template, int __suffixlen) | 
|  | __nonnull ((1)) __wur; | 
|  | # endif | 
|  | #endif | 
|  |  | 
|  | #if defined __USE_BSD || defined __USE_XOPEN2K8 | 
|  | /* Create a unique temporary directory from TEMPLATE. | 
|  | The last six characters of TEMPLATE must be "XXXXXX"; | 
|  | they are replaced with a string that makes the directory name unique. | 
|  | Returns TEMPLATE, or a null pointer if it cannot get a unique name. | 
|  | The directory is created mode 700.  */ | 
|  | extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur; | 
|  | #endif | 
|  |  | 
|  | #ifdef __USE_GNU | 
|  | /* Generate a unique temporary file name from TEMPLATE similar to | 
|  | mkstemp.  But allow the caller to pass additional flags which are | 
|  | used in the open call to create the file.. | 
|  |  | 
|  | This function is a possible cancellation point and therefore not | 
|  | marked with __THROW.  */ | 
|  | # ifndef __USE_FILE_OFFSET64 | 
|  | extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur; | 
|  | # else | 
|  | #  ifdef __REDIRECT | 
|  | extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64) | 
|  | __nonnull ((1)) __wur; | 
|  | #  else | 
|  | #   define mkostemp mkostemp64 | 
|  | #  endif | 
|  | # endif | 
|  | # ifdef __USE_LARGEFILE64 | 
|  | extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur; | 
|  | # endif | 
|  |  | 
|  | /* Similar to mkostemp, but the template can have a suffix after the | 
|  | XXXXXX.  The length of the suffix is specified in the second | 
|  | parameter. | 
|  |  | 
|  | This function is a possible cancellation point and therefore not | 
|  | marked with __THROW.  */ | 
|  | # ifndef __USE_FILE_OFFSET64 | 
|  | extern int mkostemps (char *__template, int __suffixlen, int __flags) | 
|  | __nonnull ((1)) __wur; | 
|  | # else | 
|  | #  ifdef __REDIRECT | 
|  | extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen, | 
|  | int __flags), mkostemps64) | 
|  | __nonnull ((1)) __wur; | 
|  | #  else | 
|  | #   define mkostemps mkostemps64 | 
|  | #  endif | 
|  | # endif | 
|  | # ifdef __USE_LARGEFILE64 | 
|  | extern int mkostemps64 (char *__template, int __suffixlen, int __flags) | 
|  | __nonnull ((1)) __wur; | 
|  | # endif | 
|  | #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 | 
|  | /* Return a malloc'd string containing the canonical absolute name of the | 
|  | existing named file.  */ | 
|  | extern char *canonicalize_file_name (const char *__name) | 
|  | __THROW __nonnull ((1)) __wur; | 
|  | #endif | 
|  |  | 
|  | #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED | 
|  | /* Return the canonical absolute name of file NAME.  If RESOLVED is | 
|  | null, the result is malloc'd; otherwise, if the canonical name is | 
|  | PATH_MAX chars or more, returns null with `errno' set to | 
|  | ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars, | 
|  | returns the name in RESOLVED.  */ | 
|  | extern char *realpath (const char *__restrict __name, | 
|  | char *__restrict __resolved) __THROW __wur; | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* Shorthand for type of comparison functions.  */ | 
|  | #ifndef __COMPAR_FN_T | 
|  | # define __COMPAR_FN_T | 
|  | typedef int (*__compar_fn_t) (const void *, const void *); | 
|  |  | 
|  | # ifdef	__USE_GNU | 
|  | typedef __compar_fn_t comparison_fn_t; | 
|  | # endif | 
|  | #endif | 
|  | #ifdef __USE_GNU | 
|  | 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, | 
|  | size_t __nmemb, size_t __size, __compar_fn_t __compar) | 
|  | __nonnull ((1, 2, 5)) __wur; | 
|  |  | 
|  | #ifdef __USE_EXTERN_INLINES | 
|  | # include <bits/stdlib-bsearch.h> | 
|  | #endif | 
|  |  | 
|  | /* Sort NMEMB elements of BASE, of SIZE bytes each, | 
|  | using COMPAR to perform the comparisons.  */ | 
|  | extern void qsort (void *__base, size_t __nmemb, size_t __size, | 
|  | __compar_fn_t __compar) __nonnull ((1, 4)); | 
|  | #ifdef __USE_GNU | 
|  | extern void qsort_r (void *__base, size_t __nmemb, size_t __size, | 
|  | __compar_d_fn_t __compar, void *__arg) | 
|  | __nonnull ((1, 4)); | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* 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) | 
|  | __THROW __attribute__ ((__const__)) __wur; | 
|  | #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.  */ | 
|  | 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 | 
|  |  | 
|  |  | 
|  | #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \ | 
|  | || defined __USE_SVID | 
|  | /* Convert floating point numbers to strings.  The returned values are | 
|  | valid only until another call to the same function.  */ | 
|  |  | 
|  | /* Convert VALUE to a string with NDIGIT digits and return a pointer to | 
|  | this.  Set *DECPT with the position of the decimal character and *SIGN | 
|  | with the sign of the number.  */ | 
|  | extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, | 
|  | int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur; | 
|  |  | 
|  | /* Convert VALUE to a string rounded to NDIGIT decimal digits.  Set *DECPT | 
|  | with the position of the decimal character and *SIGN with the sign of | 
|  | the number.  */ | 
|  | extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, | 
|  | int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur; | 
|  |  | 
|  | /* If possible convert VALUE to a string with NDIGIT significant digits. | 
|  | Otherwise use exponential representation.  The resulting string will | 
|  | be written to BUF.  */ | 
|  | extern char *gcvt (double __value, int __ndigit, char *__buf) | 
|  | __THROW __nonnull ((3)) __wur; | 
|  | #endif | 
|  |  | 
|  | #ifdef __USE_MISC | 
|  | /* Long double versions of above functions.  */ | 
|  | extern char *qecvt (long double __value, int __ndigit, | 
|  | int *__restrict __decpt, int *__restrict __sign) | 
|  | __THROW __nonnull ((3, 4)) __wur; | 
|  | extern char *qfcvt (long double __value, int __ndigit, | 
|  | int *__restrict __decpt, int *__restrict __sign) | 
|  | __THROW __nonnull ((3, 4)) __wur; | 
|  | extern char *qgcvt (long double __value, int __ndigit, char *__buf) | 
|  | __THROW __nonnull ((3)) __wur; | 
|  |  | 
|  |  | 
|  | /* Reentrant version of the functions above which provide their own | 
|  | buffers.  */ | 
|  | extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, | 
|  | int *__restrict __sign, char *__restrict __buf, | 
|  | size_t __len) __THROW __nonnull ((3, 4, 5)); | 
|  | extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, | 
|  | int *__restrict __sign, char *__restrict __buf, | 
|  | size_t __len) __THROW __nonnull ((3, 4, 5)); | 
|  |  | 
|  | extern int qecvt_r (long double __value, int __ndigit, | 
|  | int *__restrict __decpt, int *__restrict __sign, | 
|  | char *__restrict __buf, size_t __len) | 
|  | __THROW __nonnull ((3, 4, 5)); | 
|  | extern int qfcvt_r (long double __value, int __ndigit, | 
|  | int *__restrict __decpt, int *__restrict __sign, | 
|  | char *__restrict __buf, size_t __len) | 
|  | __THROW __nonnull ((3, 4, 5)); | 
|  | #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; | 
|  | /* Return the length of the given multibyte character, | 
|  | putting its `wchar_t' representation in *PWC.  */ | 
|  | extern int mbtowc (wchar_t *__restrict __pwc, | 
|  | const char *__restrict __s, size_t __n) __THROW; | 
|  | /* Put the multibyte character represented | 
|  | by WCHAR in S, returning its length.  */ | 
|  | extern int wctomb (char *__s, wchar_t __wchar) __THROW; | 
|  |  | 
|  |  | 
|  | /* Convert a multibyte string to a wide char string.  */ | 
|  | extern size_t mbstowcs (wchar_t *__restrict  __pwcs, | 
|  | const char *__restrict __s, size_t __n) __THROW; | 
|  | /* Convert a wide char string to multibyte string.  */ | 
|  | extern size_t wcstombs (char *__restrict __s, | 
|  | const wchar_t *__restrict __pwcs, size_t __n) | 
|  | __THROW; | 
|  | __END_NAMESPACE_STD | 
|  |  | 
|  |  | 
|  | #ifdef __USE_SVID | 
|  | /* Determine whether the string value of RESPONSE matches the affirmation | 
|  | or negative response expression as specified by the LC_MESSAGES category | 
|  | in the program's current locale.  Returns 1 if affirmative, 0 if | 
|  | negative, and -1 if not matching.  */ | 
|  | extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur; | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 | 
|  | /* Parse comma separated suboption from *OPTIONP and match against | 
|  | strings in TOKENS.  If found return index and set *VALUEP to | 
|  | optional value introduced by an equal sign.  If the suboption is | 
|  | not part of TOKENS return in *VALUEP beginning of unknown | 
|  | suboption.  On exit *OPTIONP is set to the beginning of the next | 
|  | token or at the terminating NUL character.  */ | 
|  | extern int getsubopt (char **__restrict __optionp, | 
|  | char *const *__restrict __tokens, | 
|  | char **__restrict __valuep) | 
|  | __THROW __nonnull ((1, 2, 3)) __wur; | 
|  | #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 | 
|  | /* Return a master pseudo-terminal handle.  */ | 
|  | extern int posix_openpt (int __oflag) __wur; | 
|  | #endif | 
|  |  | 
|  | #ifdef __USE_XOPEN | 
|  | /* The next four functions all take a master pseudo-tty fd and | 
|  | perform an operation on the associated slave:  */ | 
|  |  | 
|  | /* Chown the slave to the calling user.  */ | 
|  | extern int grantpt (int __fd) __THROW; | 
|  |  | 
|  | /* Release an internal lock so the slave can be opened. | 
|  | Call after grantpt().  */ | 
|  | extern int unlockpt (int __fd) __THROW; | 
|  |  | 
|  | /* Return the pathname of the pseudo terminal slave associated with | 
|  | the master FD is open on, or NULL on errors. | 
|  | The returned storage is good until the next call to this function.  */ | 
|  | extern char *ptsname (int __fd) __THROW __wur; | 
|  | #endif | 
|  |  | 
|  | #ifdef __USE_GNU | 
|  | /* Store at most BUFLEN characters of the pathname of the slave pseudo | 
|  | terminal associated with the master FD is open on in BUF. | 
|  | Return 0 on success, otherwise an error number.  */ | 
|  | extern int ptsname_r (int __fd, char *__buf, size_t __buflen) | 
|  | __THROW __nonnull ((2)); | 
|  |  | 
|  | /* Open a master pseudo terminal and return its file descriptor.  */ | 
|  | extern int getpt (void); | 
|  | #endif | 
|  |  | 
|  | #ifdef __USE_BSD | 
|  | /* Put the 1 minute, 5 minute and 15 minute load averages into the first | 
|  | NELEM elements of LOADAVG.  Return the number written (never more than | 
|  | three, but may be less than NELEM), or -1 if an error occurred.  */ | 
|  | extern int getloadavg (double __loadavg[], int __nelem) | 
|  | __THROW __nonnull ((1)); | 
|  | #endif | 
|  |  | 
|  | #include <bits/stdlib-float.h> | 
|  |  | 
|  | /* Define some macros helping to catch buffer overflows.  */ | 
|  | #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function | 
|  | # include <bits/stdlib.h> | 
|  | #endif | 
|  | #ifdef __LDBL_COMPAT | 
|  | # include <bits/stdlib-ldbl.h> | 
|  | #endif | 
|  |  | 
|  | #endif /* don't just need malloc and calloc */ | 
|  | #undef __need_malloc_and_calloc | 
|  |  | 
|  | __END_DECLS | 
|  |  | 
|  | #endif /* stdlib.h  */ |