/* * stdlib.h * * Definitions for common types, variables, and functions. */ #ifndef _STDLIB_H_ #define _STDLIB_H_ #include #include "_ansi.h" #define __need_size_t #define __need_wchar_t #define __need_NULL #include "stddef.h" #include #include #include #ifndef __STRICT_ANSI__ #include #endif //#ifdef __CYGWIN__ //#include //#endif //#if __GNU_VISIBLE #include //#endif #ifdef __cplusplus extern "C" { #endif //################################################################################ //################################################################################ typedef struct { int quot; /* quotient */ int rem; /* remainder */ } div_t; typedef struct { long quot; /* quotient */ long rem; /* remainder */ } ldiv_t; //#if __ISO_C_VISIBLE >= 1999 typedef struct { long long int quot; /* quotient */ long long int rem; /* remainder */ } lldiv_t; //#endif //################################################################################ //################################################################################ #ifndef __compar_fn_t_defined #define __compar_fn_t_defined typedef int (*__compar_fn_t) (const void *, const void *); #endif #define EXIT_FAILURE 1 #define EXIT_SUCCESS 0 #define RAND_MAX __RAND_MAX int __locale_mb_cur_max (void); #define MB_CUR_MAX __locale_mb_cur_max() //################################################################################ //################################################################################ void abort (void);// _ATTRIBUTE ((__noreturn__)); int abs (int); //#if __BSD_VISIBLE __uint32_t arc4random (void); __uint32_t arc4random_uniform (__uint32_t); void arc4random_buf (void *, size_t); //#endif int atexit (void (*__func)(void)); double atof (const char *__nptr); //#if __MISC_VISIBLE float atoff (const char *__nptr); //#endif int atoi (const char *__nptr); int _atoi_r (struct _reent *, const char *__nptr); long atol (const char *__nptr); long _atol_r (struct _reent *, const char *__nptr); void * bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, __compar_fn_t _compar); void *calloc(size_t, size_t) __malloc_like __result_use_check __alloc_size2(1, 2) _NOTHROW; div_t div (int __numer, int __denom); void exit (int __status);// _ATTRIBUTE ((__noreturn__)); void free (void *) _NOTHROW; char * getenv (const char *__string); char * _getenv_r (struct _reent *, const char *__string); //#if __GNU_VISIBLE char * secure_getenv (const char *__string); //#endif char * _findenv (const char *, int *); char * _findenv_r (struct _reent *, const char *, int *); //#if __POSIX_VISIBLE >= 200809 extern char *suboptarg; /* getsubopt(3) external variable */ int getsubopt (char **, char * const *, char **); //#endif long labs (long); ldiv_t ldiv (long __numer, long __denom); void *malloc(size_t) __malloc_like __result_use_check __alloc_size(1) _NOTHROW; int mblen (const char *, size_t); int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *); int mbtowc (wchar_t *__restrict, const char *__restrict, size_t); int _mbtowc_r (struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *); int wctomb (char *, wchar_t); int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *); size_t mbstowcs (wchar_t *__restrict, const char *__restrict, size_t); size_t _mbstowcs_r (struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *); size_t wcstombs (char *__restrict, const wchar_t *__restrict, size_t); size_t _wcstombs_r (struct _reent *, char *__restrict, const wchar_t *__restrict, size_t, _mbstate_t *); //################################################################################################## /* convert an unsigned/signed integer to ASCII string */ extern void uitoa (unsigned int, char *, unsigned char); extern void itoa (int, char*, unsigned char); /* convert an unsigned/signed long integer to ASCII string */ extern void ultoa (unsigned long, char *, unsigned char); extern void ltoa (long, char*, unsigned char); /* ------------------------------------------------------------------------- * Non-standard C-like format specification for , to be combined * with the precision value: * * F format: [-]ddd.ddd rounded to 'prec' fractional digits (prec >= 0) * E format: [-]d.ddde+-dd rounded to 'prec' fractional digits (prec >= 0) * G format: use format E if exp < -4 or exp >= prec; format F otherwise * -------------------------------------------------------------------------*/ #define PREC_F 0x20 /* F format */ #define PREC_E 0x40 /* E format */ #define PREC_G 0x00 /* G format */ #define PREC_P 0x1f /* precision value (0..31) */ #define PREC_D 0x06 /* default precision when none specified */ #define PREC(f,p) ((f)|(p)) /* Combine format and precision */ extern void ftoa(float, char*, unsigned char); //################################################################################ //################################################################################ //################################################################################ #ifndef _REENT_ONLY // #if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 char * mkdtemp (char *); // #endif // #if __GNU_VISIBLE int mkostemp (char *, int); int mkostemps (char *, int, int); // #endif // #if __MISC_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 4 int mkstemp (char *); // #endif // #if __MISC_VISIBLE int mkstemps (char *, int); // #endif // #if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112) char * mktemp (char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead"))); // #endif #endif /* !_REENT_ONLY */ char * _mkdtemp_r (struct _reent *, char *); int _mkostemp_r (struct _reent *, char *, int); int _mkostemps_r (struct _reent *, char *, int, int); int _mkstemp_r (struct _reent *, char *); int _mkstemps_r (struct _reent *, char *, int); char * _mktemp_r (struct _reent *, char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead"))); void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t _compar); int rand (void); void * realloc(void *, size_t) __result_use_check __alloc_size(2) _NOTHROW; //#if __BSD_VISIBLE void * reallocarray(void *, size_t, size_t) __result_use_check __alloc_size2(2, 3); void * reallocf(void *, size_t) __result_use_check __alloc_size(2); //#endif //#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 char * realpath (const char *__restrict path, char *__restrict resolved_path); //#endif //#if __BSD_VISIBLE int rpmatch (const char *response); //#endif //#if __XSI_VISIBLE void setkey (const char *__key); //#endif void srand (unsigned __seed); double strtod (const char *__restrict __n, char **__restrict __end_PTR); double _strtod_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR); //#if __ISO_C_VISIBLE >= 1999 float strtof (const char *__restrict __n, char **__restrict __end_PTR); //#endif //#if __MISC_VISIBLE /* the following strtodf interface is deprecated...use strtof instead */ # ifndef strtodf # define strtodf strtof # endif //#endif long strtol (const char *__restrict __n, char **__restrict __end_PTR, int __base); long _strtol_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base); unsigned long strtoul (const char *__restrict __n, char **__restrict __end_PTR, int __base); unsigned long _strtoul_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base); //#if __GNU_VISIBLE double strtod_l (const char *__restrict, char **__restrict, locale_t); float strtof_l (const char *__restrict, char **__restrict, locale_t); //#ifdef _HAVE_LONG_DOUBLE extern long double strtold_l (const char *__restrict, char **__restrict, locale_t); //#endif /* _HAVE_LONG_DOUBLE */ long strtol_l (const char *__restrict, char **__restrict, int, locale_t); unsigned long strtoul_l (const char *__restrict, char **__restrict, int, locale_t __loc); long long strtoll_l (const char *__restrict, char **__restrict, int, locale_t); unsigned long long strtoull_l (const char *__restrict, char **__restrict, int, locale_t __loc); //#endif int system (const char *__string); //#if __SVID_VISIBLE || __XSI_VISIBLE >= 4 long a64l (const char *__input); char * l64a (long __input); char * _l64a_r (struct _reent *,long __input); //#endif //#if __MISC_VISIBLE int on_exit (void (*__func)(int, void *),void *__arg); //#endif //#if __ISO_C_VISIBLE >= 1999 void _Exit (int __status);// _ATTRIBUTE ((__noreturn__)); //#endif //#if __SVID_VISIBLE || __XSI_VISIBLE int putenv (char *__string); //#endif int _putenv_r (struct _reent *, char *__string); void * _reallocf_r (struct _reent *, void *, size_t); //#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 int setenv (const char *__string, const char *__value, int __overwrite); //#endif int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite); //#if __XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112 //char * gcvt (double,int,char *); //char * gcvtf (float,int,char *); //char * fcvt (double,int,int *,int *); //char * fcvtf (float,int,int *,int *); //char * ecvt (double,int,int *,int *); //char * ecvtbuf (double, int, int*, int*, char *); //char * fcvtbuf (double, int, int*, int*, char *); //char * ecvtf (float,int,int *,int *); //#endif char * __itoa (int, char *, int); char * __utoa (unsigned, char *, int); //#if __MISC_VISIBLE //char * itoa (int, char *, int); //char * utoa (unsigned, char *, int); //#endif //#if __POSIX_VISIBLE int rand_r (unsigned *__seed); //#endif //#if __SVID_VISIBLE || __XSI_VISIBLE double drand48 (void); double _drand48_r (struct _reent *); double erand48 (unsigned short [3]); double _erand48_r (struct _reent *, unsigned short [3]); long jrand48 (unsigned short [3]); long _jrand48_r (struct _reent *, unsigned short [3]); void lcong48 (unsigned short [7]); void _lcong48_r (struct _reent *, unsigned short [7]); long lrand48 (void); long _lrand48_r (struct _reent *); long mrand48 (void); long _mrand48_r (struct _reent *); long nrand48 (unsigned short [3]); long _nrand48_r (struct _reent *, unsigned short [3]); unsigned short * seed48 (unsigned short [3]); unsigned short * _seed48_r (struct _reent *, unsigned short [3]); void srand48 (long); void _srand48_r (struct _reent *, long); //#endif /* __SVID_VISIBLE || __XSI_VISIBLE */ //#if __SVID_VISIBLE || __XSI_VISIBLE >= 4 || __BSD_VISIBLE char * initstate (unsigned, char *, size_t); long random (void); char * setstate (char *); void srandom (unsigned); //#endif //#if __ISO_C_VISIBLE >= 1999 long long atoll (const char *__nptr); //#endif long long _atoll_r (struct _reent *, const char *__nptr); //#if __ISO_C_VISIBLE >= 1999 long long llabs (long long); lldiv_t lldiv (long long __numer, long long __denom); long long strtoll (const char *__restrict __n, char **__restrict __end_PTR, int __base); //#endif long long _strtoll_r (struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base); //#if __ISO_C_VISIBLE >= 1999 unsigned long long strtoull (const char *__restrict __n, char **__restrict __end_PTR, int __base); //#endif unsigned long long _strtoull_r (struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base); //#ifndef __CYGWIN__ //#if __MISC_VISIBLE void cfree (void *); //#endif //#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 int unsetenv (const char *__string); //#endif int _unsetenv_r (struct _reent *, const char *__string); //#endif /* !__CYGWIN__ */ //#if __POSIX_VISIBLE >= 200112 int posix_memalign (void **, size_t, size_t) __nonnull((1)) __result_use_check; //#endif char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**); //#ifndef __CYGWIN__ void * _malloc_r (struct _reent *, size_t) _NOTHROW; void * _calloc_r (struct _reent *, size_t, size_t) _NOTHROW; void _free_r (struct _reent *, void *) _NOTHROW; void * _realloc_r (struct _reent *, void *, size_t) _NOTHROW; void _mstats_r (struct _reent *, char *); //#endif int _system_r (struct _reent *, const char *); void __eprintf (const char *, const char *, unsigned int, const char *); /* There are two common qsort_r variants. If you request _BSD_SOURCE, you get the BSD version; otherwise you get the GNU version. We want that #undef qsort_r will still let you invoke the underlying function, but that requires gcc support. */ //#if __GNU_VISIBLE void qsort_r (void *__base, size_t __nmemb, size_t __size, int (*_compar)(const void *, const void *, void *), void *__thunk); //#elif __BSD_VISIBLE // # ifdef __GNUC__ // void qsort_r (void *__base, size_t __nmemb, size_t __size, void *__thunk, int (*_compar)(void *, const void *, const void *)) // __asm__ (__ASMNAME ("__bsd_qsort_r")); // # else // void __bsd_qsort_r (void *__base, size_t __nmemb, size_t __size, void *__thunk, int (*_compar)(void *, const void *, const void *)); // # define qsort_r __bsd_qsort_r // # endif //#endif /* On platforms where long double equals double. */ //#ifdef _HAVE_LONG_DOUBLE extern long double _strtold_r (struct _reent *, const char *__restrict, char **__restrict); //#if __ISO_C_VISIBLE >= 1999 extern long double strtold (const char *__restrict, char **__restrict); //#endif //#endif /* _HAVE_LONG_DOUBLE */ /* * If we're in a mode greater than C99, expose C11 functions. */ //#if __ISO_C_VISIBLE >= 2011 //void * aligned_alloc(size_t, size_t) __malloc_like __alloc_align(1) // __alloc_size(2) __result_use_check; //int at_quick_exit(void (*)(void)); //_Noreturn void // quick_exit(int); //#endif /* __ISO_C_VISIBLE >= 2011 */ #ifdef __cplusplus } #endif #if __SSP_FORTIFY_LEVEL > 0 #include #endif #endif /* _STDLIB_H_ */