1 /* 2 * stdlib.h 3 * 4 * Definitions for common types, variables, and functions. 5 */ 6 7 #ifndef _STDLIB_H_ 8 #define _STDLIB_H_ 9 10 #include <machine/ieeefp.h> 11 #include "_ansi.h" 12 13 #define __need_size_t 14 #define __need_wchar_t 15 #define __need_NULL 16 #include <stddef.h> 17 18 #include <sys/reent.h> 19 #include <sys/cdefs.h> 20 #include <machine/stdlib.h> 21 #ifndef __STRICT_ANSI__ 22 #include <alloca.h> 23 #endif 24 25 #ifdef __CYGWIN__ 26 #include <cygwin/stdlib.h> 27 #endif 28 29 _BEGIN_STD_C 30 31 typedef struct 32 { 33 int quot; /* quotient */ 34 int rem; /* remainder */ 35 } div_t; 36 37 typedef struct 38 { 39 long quot; /* quotient */ 40 long rem; /* remainder */ 41 } ldiv_t; 42 43 #if __ISO_C_VISIBLE >= 1999 44 typedef struct 45 { 46 long long int quot; /* quotient */ 47 long long int rem; /* remainder */ 48 } lldiv_t; 49 #endif 50 51 #ifndef __compar_fn_t_defined 52 #define __compar_fn_t_defined 53 typedef int (*__compar_fn_t) (const _PTR, const _PTR); 54 #endif 55 56 #define EXIT_FAILURE 1 57 #define EXIT_SUCCESS 0 58 59 #define RAND_MAX __RAND_MAX 60 61 int _EXFUN(__locale_mb_cur_max,(_VOID)); 62 63 #define MB_CUR_MAX __locale_mb_cur_max() 64 65 _VOID _EXFUN(abort,(_VOID) _ATTRIBUTE ((__noreturn__))); 66 int _EXFUN(abs,(int)); 67 #if __BSD_VISIBLE 68 __uint32_t _EXFUN(arc4random, (void)); 69 __uint32_t _EXFUN(arc4random_uniform, (__uint32_t)); 70 void _EXFUN(arc4random_buf, (void *, size_t)); 71 #endif 72 int _EXFUN(atexit,(_VOID (*__func)(_VOID))); 73 double _EXFUN(atof,(const char *__nptr)); 74 #if __MISC_VISIBLE 75 float _EXFUN(atoff,(const char *__nptr)); 76 #endif 77 int _EXFUN(atoi,(const char *__nptr)); 78 int _EXFUN(_atoi_r,(struct _reent *, const char *__nptr)); 79 long _EXFUN(atol,(const char *__nptr)); 80 long _EXFUN(_atol_r,(struct _reent *, const char *__nptr)); 81 _PTR _EXFUN(bsearch,(const _PTR __key, 82 const _PTR __base, 83 size_t __nmemb, 84 size_t __size, 85 __compar_fn_t _compar)); 86 _PTR _EXFUN_NOTHROW(calloc,(size_t __nmemb, size_t __size)); 87 div_t _EXFUN(div,(int __numer, int __denom)); 88 _VOID _EXFUN(exit,(int __status) _ATTRIBUTE ((__noreturn__))); 89 _VOID _EXFUN_NOTHROW(free,(_PTR)); 90 char * _EXFUN(getenv,(const char *__string)); 91 char * _EXFUN(_getenv_r,(struct _reent *, const char *__string)); 92 char * _EXFUN(_findenv,(_CONST char *, int *)); 93 char * _EXFUN(_findenv_r,(struct _reent *, _CONST char *, int *)); 94 #if __POSIX_VISIBLE >= 200809 95 extern char *suboptarg; /* getsubopt(3) external variable */ 96 int _EXFUN(getsubopt,(char **, char * const *, char **)); 97 #endif 98 long _EXFUN(labs,(long)); 99 ldiv_t _EXFUN(ldiv,(long __numer, long __denom)); 100 _PTR _EXFUN_NOTHROW(malloc,(size_t __size)); 101 int _EXFUN(mblen,(const char *, size_t)); 102 int _EXFUN(_mblen_r,(struct _reent *, const char *, size_t, _mbstate_t *)); 103 int _EXFUN(mbtowc,(wchar_t *__restrict, const char *__restrict, size_t)); 104 int _EXFUN(_mbtowc_r,(struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *)); 105 int _EXFUN(wctomb,(char *, wchar_t)); 106 int _EXFUN(_wctomb_r,(struct _reent *, char *, wchar_t, _mbstate_t *)); 107 size_t _EXFUN(mbstowcs,(wchar_t *__restrict, const char *__restrict, size_t)); 108 size_t _EXFUN(_mbstowcs_r,(struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *)); 109 size_t _EXFUN(wcstombs,(char *__restrict, const wchar_t *__restrict, size_t)); 110 size_t _EXFUN(_wcstombs_r,(struct _reent *, char *__restrict, const wchar_t *__restrict, size_t, _mbstate_t *)); 111 #ifndef _REENT_ONLY 112 #if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 113 char * _EXFUN(mkdtemp,(char *)); 114 #endif 115 #if __GNU_VISIBLE 116 int _EXFUN(mkostemp,(char *, int)); 117 int _EXFUN(mkostemps,(char *, int, int)); 118 #endif 119 #if __MISC_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 4 120 int _EXFUN(mkstemp,(char *)); 121 #endif 122 #if __MISC_VISIBLE 123 int _EXFUN(mkstemps,(char *, int)); 124 #endif 125 #if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112) 126 char * _EXFUN(mktemp,(char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")))); 127 #endif 128 #endif /* !_REENT_ONLY */ 129 char * _EXFUN(_mkdtemp_r, (struct _reent *, char *)); 130 int _EXFUN(_mkostemp_r, (struct _reent *, char *, int)); 131 int _EXFUN(_mkostemps_r, (struct _reent *, char *, int, int)); 132 int _EXFUN(_mkstemp_r, (struct _reent *, char *)); 133 int _EXFUN(_mkstemps_r, (struct _reent *, char *, int)); 134 char * _EXFUN(_mktemp_r, (struct _reent *, char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")))); 135 _VOID _EXFUN(qsort,(_PTR __base, size_t __nmemb, size_t __size, __compar_fn_t _compar)); 136 int _EXFUN(rand,(_VOID)); 137 _PTR _EXFUN_NOTHROW(realloc,(_PTR __r, size_t __size)); 138 #if __BSD_VISIBLE 139 _PTR _EXFUN(reallocf,(_PTR __r, size_t __size)); 140 #endif 141 #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 142 char * _EXFUN(realpath, (const char *__restrict path, char *__restrict resolved_path)); 143 #endif 144 #if __BSD_VISIBLE 145 int _EXFUN(rpmatch, (const char *response)); 146 #endif 147 _VOID _EXFUN(srand,(unsigned __seed)); 148 double _EXFUN(strtod,(const char *__restrict __n, char **__restrict __end_PTR)); 149 double _EXFUN(_strtod_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR)); 150 #if __ISO_C_VISIBLE >= 1999 151 float _EXFUN(strtof,(const char *__restrict __n, char **__restrict __end_PTR)); 152 #endif 153 #if __MISC_VISIBLE 154 /* the following strtodf interface is deprecated...use strtof instead */ 155 # ifndef strtodf 156 # define strtodf strtof 157 # endif 158 #endif 159 long _EXFUN(strtol,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); 160 long _EXFUN(_strtol_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base)); 161 unsigned long _EXFUN(strtoul,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); 162 unsigned long _EXFUN(_strtoul_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base)); 163 164 int _EXFUN(system,(const char *__string)); 165 166 #if __SVID_VISIBLE || __XSI_VISIBLE >= 4 167 long _EXFUN(a64l,(const char *__input)); 168 char * _EXFUN(l64a,(long __input)); 169 char * _EXFUN(_l64a_r,(struct _reent *,long __input)); 170 #endif 171 #if __MISC_VISIBLE 172 int _EXFUN(on_exit,(_VOID (*__func)(int, _PTR),_PTR __arg)); 173 #endif 174 #if __ISO_C_VISIBLE >= 1999 175 _VOID _EXFUN(_Exit,(int __status) _ATTRIBUTE ((__noreturn__))); 176 #endif 177 #if __SVID_VISIBLE || __XSI_VISIBLE 178 int _EXFUN(putenv,(char *__string)); 179 #endif 180 int _EXFUN(_putenv_r,(struct _reent *, char *__string)); 181 _PTR _EXFUN(_reallocf_r,(struct _reent *, _PTR, size_t)); 182 #if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 183 int _EXFUN(setenv,(const char *__string, const char *__value, int __overwrite)); 184 #endif 185 int _EXFUN(_setenv_r,(struct _reent *, const char *__string, const char *__value, int __overwrite)); 186 187 #if __XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112 188 char * _EXFUN(gcvt,(double,int,char *)); 189 char * _EXFUN(gcvtf,(float,int,char *)); 190 char * _EXFUN(fcvt,(double,int,int *,int *)); 191 char * _EXFUN(fcvtf,(float,int,int *,int *)); 192 char * _EXFUN(ecvt,(double,int,int *,int *)); 193 char * _EXFUN(ecvtbuf,(double, int, int*, int*, char *)); 194 char * _EXFUN(fcvtbuf,(double, int, int*, int*, char *)); 195 char * _EXFUN(ecvtf,(float,int,int *,int *)); 196 #endif 197 char * _EXFUN(__itoa,(int, char *, int)); 198 char * _EXFUN(__utoa,(unsigned, char *, int)); 199 #if __MISC_VISIBLE 200 char * _EXFUN(itoa,(int, char *, int)); 201 char * _EXFUN(utoa,(unsigned, char *, int)); 202 #endif 203 #if __POSIX_VISIBLE 204 int _EXFUN(rand_r,(unsigned *__seed)); 205 #endif 206 207 #if __SVID_VISIBLE || __XSI_VISIBLE 208 double _EXFUN(drand48,(_VOID)); 209 double _EXFUN(_drand48_r,(struct _reent *)); 210 double _EXFUN(erand48,(unsigned short [3])); 211 double _EXFUN(_erand48_r,(struct _reent *, unsigned short [3])); 212 long _EXFUN(jrand48,(unsigned short [3])); 213 long _EXFUN(_jrand48_r,(struct _reent *, unsigned short [3])); 214 _VOID _EXFUN(lcong48,(unsigned short [7])); 215 _VOID _EXFUN(_lcong48_r,(struct _reent *, unsigned short [7])); 216 long _EXFUN(lrand48,(_VOID)); 217 long _EXFUN(_lrand48_r,(struct _reent *)); 218 long _EXFUN(mrand48,(_VOID)); 219 long _EXFUN(_mrand48_r,(struct _reent *)); 220 long _EXFUN(nrand48,(unsigned short [3])); 221 long _EXFUN(_nrand48_r,(struct _reent *, unsigned short [3])); 222 unsigned short * 223 _EXFUN(seed48,(unsigned short [3])); 224 unsigned short * 225 _EXFUN(_seed48_r,(struct _reent *, unsigned short [3])); 226 _VOID _EXFUN(srand48,(long)); 227 _VOID _EXFUN(_srand48_r,(struct _reent *, long)); 228 #endif /* __SVID_VISIBLE || __XSI_VISIBLE */ 229 #if __SVID_VISIBLE || __XSI_VISIBLE >= 4 || __BSD_VISIBLE 230 char * _EXFUN(initstate,(unsigned, char *, size_t)); 231 long _EXFUN(random,(_VOID)); 232 char * _EXFUN(setstate,(char *)); 233 _VOID _EXFUN(srandom,(unsigned)); 234 #endif 235 #if __ISO_C_VISIBLE >= 1999 236 long long _EXFUN(atoll,(const char *__nptr)); 237 #endif 238 long long _EXFUN(_atoll_r,(struct _reent *, const char *__nptr)); 239 #if __ISO_C_VISIBLE >= 1999 240 long long _EXFUN(llabs,(long long)); 241 lldiv_t _EXFUN(lldiv,(long long __numer, long long __denom)); 242 long long _EXFUN(strtoll,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); 243 #endif 244 long long _EXFUN(_strtoll_r,(struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base)); 245 #if __ISO_C_VISIBLE >= 1999 246 unsigned long long _EXFUN(strtoull,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); 247 #endif 248 unsigned long long _EXFUN(_strtoull_r,(struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base)); 249 250 #ifndef __CYGWIN__ 251 #if __MISC_VISIBLE 252 _VOID _EXFUN(cfree,(_PTR)); 253 #endif 254 #if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 255 int _EXFUN(unsetenv,(const char *__string)); 256 #endif 257 int _EXFUN(_unsetenv_r,(struct _reent *, const char *__string)); 258 #endif /* !__CYGWIN__ */ 259 260 #if __POSIX_VISIBLE >= 200112 261 int _EXFUN(__nonnull (1) posix_memalign,(void **, size_t, size_t)); 262 #endif 263 264 char * _EXFUN(_dtoa_r,(struct _reent *, double, int, int, int *, int*, char**)); 265 #ifndef __CYGWIN__ 266 _PTR _EXFUN_NOTHROW(_malloc_r,(struct _reent *, size_t)); 267 _PTR _EXFUN_NOTHROW(_calloc_r,(struct _reent *, size_t, size_t)); 268 _VOID _EXFUN_NOTHROW(_free_r,(struct _reent *, _PTR)); 269 _PTR _EXFUN_NOTHROW(_realloc_r,(struct _reent *, _PTR, size_t)); 270 _VOID _EXFUN(_mstats_r,(struct _reent *, char *)); 271 #endif 272 int _EXFUN(_system_r,(struct _reent *, const char *)); 273 274 _VOID _EXFUN(__eprintf,(const char *, const char *, unsigned int, const char *)); 275 276 /* There are two common qsort_r variants. If you request 277 _BSD_SOURCE, you get the BSD version; otherwise you get the GNU 278 version. We want that #undef qsort_r will still let you 279 invoke the underlying function, but that requires gcc support. */ 280 #if __GNU_VISIBLE 281 _VOID _EXFUN(qsort_r,(_PTR __base, size_t __nmemb, size_t __size, int (*_compar)(const _PTR, const _PTR, _PTR), _PTR __thunk)); 282 #elif __BSD_VISIBLE 283 # ifdef __GNUC__ 284 _VOID _EXFUN(qsort_r,(_PTR __base, size_t __nmemb, size_t __size, _PTR __thunk, int (*_compar)(_PTR, const _PTR, const _PTR))) 285 __asm__ (__ASMNAME ("__bsd_qsort_r")); 286 # else 287 _VOID _EXFUN(__bsd_qsort_r,(_PTR __base, size_t __nmemb, size_t __size, _PTR __thunk, int (*_compar)(_PTR, const _PTR, const _PTR))); 288 # define qsort_r __bsd_qsort_r 289 # endif 290 #endif 291 292 /* On platforms where long double equals double. */ 293 #ifdef _HAVE_LONG_DOUBLE 294 extern long double _strtold_r (struct _reent *, const char *__restrict, char **__restrict); 295 #if __ISO_C_VISIBLE >= 1999 296 extern long double strtold (const char *__restrict, char **__restrict); 297 #endif 298 #endif /* _HAVE_LONG_DOUBLE */ 299 300 /* 301 * If we're in a mode greater than C99, expose C11 functions. 302 */ 303 #if __ISO_C_VISIBLE >= 2011 304 void * aligned_alloc(size_t, size_t) __malloc_like __alloc_align(1) 305 __alloc_size(2); 306 int at_quick_exit(void (*)(void)); 307 _Noreturn void 308 quick_exit(int); 309 #endif /* __ISO_C_VISIBLE >= 2011 */ 310 311 _END_STD_C 312 313 #endif /* _STDLIB_H_ */ 314