1 /*- 2 * Copyright (c) 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of the University nor the names of its contributors 14 * may be used to endorse or promote products derived from this software 15 * without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * @(#)stdlib.h 8.5 (Berkeley) 5/19/95 30 * $FreeBSD$ 31 */ 32 33 #ifndef _STDLIB_H_ 34 #define _STDLIB_H_ 35 36 #include <sys/cdefs.h> 37 #include <sys/_null.h> 38 #include <sys/_types.h> 39 40 #if __BSD_VISIBLE 41 #ifndef _RUNE_T_DECLARED 42 typedef __rune_t rune_t; 43 #define _RUNE_T_DECLARED 44 #endif 45 #endif 46 47 #ifndef _SIZE_T_DECLARED 48 typedef __size_t size_t; 49 #define _SIZE_T_DECLARED 50 #endif 51 52 #ifndef __cplusplus 53 #ifndef _WCHAR_T_DECLARED 54 typedef __wchar_t wchar_t; 55 #define _WCHAR_T_DECLARED 56 #endif 57 #endif 58 59 typedef struct { 60 int quot; /* quotient */ 61 int rem; /* remainder */ 62 } div_t; 63 64 typedef struct { 65 long quot; 66 long rem; 67 } ldiv_t; 68 69 #define EXIT_FAILURE 1 70 #define EXIT_SUCCESS 0 71 72 #define RAND_MAX 0x7fffffff 73 74 extern int __mb_cur_max; 75 #define MB_CUR_MAX __mb_cur_max 76 77 __BEGIN_DECLS 78 void abort(void) __dead2; 79 int abs(int) __pure2; 80 int atexit(void (*)(void)); 81 double atof(const char *); 82 int atoi(const char *); 83 long atol(const char *); 84 void *bsearch(const void *, const void *, size_t, 85 size_t, int (*)(const void *, const void *)); 86 void *calloc(size_t, size_t) __malloc_like; 87 div_t div(int, int) __pure2; 88 void exit(int) __dead2; 89 void free(void *); 90 char *getenv(const char *); 91 long labs(long) __pure2; 92 ldiv_t ldiv(long, long) __pure2; 93 void *malloc(size_t) __malloc_like; 94 int mblen(const char *, size_t); 95 size_t mbstowcs(wchar_t * __restrict , const char * __restrict, size_t); 96 int mbtowc(wchar_t * __restrict, const char * __restrict, size_t); 97 void qsort(void *, size_t, size_t, 98 int (*)(const void *, const void *)); 99 int rand(void); 100 void *realloc(void *, size_t); 101 void srand(unsigned); 102 double strtod(const char * __restrict, char ** __restrict); 103 float strtof(const char * __restrict, char ** __restrict); 104 long strtol(const char * __restrict, char ** __restrict, int); 105 long double 106 strtold(const char * __restrict, char ** __restrict); 107 unsigned long 108 strtoul(const char * __restrict, char ** __restrict, int); 109 int system(const char *); 110 int wctomb(char *, wchar_t); 111 size_t wcstombs(char * __restrict, const wchar_t * __restrict, size_t); 112 113 /* 114 * Functions added in C99 which we make conditionally available in the 115 * BSD^C89 namespace if the compiler supports `long long'. 116 * The #if test is more complicated than it ought to be because 117 * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long' 118 * is not supported in the compilation environment (which therefore means 119 * that it can't really be ISO C99). 120 * 121 * (The only other extension made by C99 in thie header is _Exit().) 122 */ 123 #if __ISO_C_VISIBLE >= 1999 124 #ifdef __LONG_LONG_SUPPORTED 125 /* LONGLONG */ 126 typedef struct { 127 long long quot; 128 long long rem; 129 } lldiv_t; 130 131 /* LONGLONG */ 132 long long 133 atoll(const char *); 134 /* LONGLONG */ 135 long long 136 llabs(long long) __pure2; 137 /* LONGLONG */ 138 lldiv_t lldiv(long long, long long) __pure2; 139 /* LONGLONG */ 140 long long 141 strtoll(const char * __restrict, char ** __restrict, int); 142 /* LONGLONG */ 143 unsigned long long 144 strtoull(const char * __restrict, char ** __restrict, int); 145 #endif /* __LONG_LONG_SUPPORTED */ 146 147 void _Exit(int) __dead2; 148 #endif /* __ISO_C_VISIBLE >= 1999 */ 149 150 /* 151 * Extensions made by POSIX relative to C. We don't know yet which edition 152 * of POSIX made these extensions, so assume they've always been there until 153 * research can be done. 154 */ 155 #if __POSIX_VISIBLE /* >= ??? */ 156 int posix_memalign(void **, size_t, size_t); /* (ADV) */ 157 int rand_r(unsigned *); /* (TSF) */ 158 char *realpath(const char * __restrict, char * __restrict); 159 int setenv(const char *, const char *, int); 160 int unsetenv(const char *); 161 #endif 162 163 #if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE 164 int getsubopt(char **, char *const *, char **); 165 #ifndef _MKDTEMP_DECLARED 166 char *mkdtemp(char *); 167 #define _MKDTEMP_DECLARED 168 #endif 169 #ifndef _MKSTEMP_DECLARED 170 int mkstemp(char *); 171 #define _MKSTEMP_DECLARED 172 #endif 173 #endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */ 174 175 /* 176 * The only changes to the XSI namespace in revision 6 were the deletion 177 * of the ttyslot() and valloc() functions, which FreeBSD never declared 178 * in this header. For revision 7, ecvt(), fcvt(), and gcvt(), which 179 * FreeBSD also does not have, and mktemp(), are to be deleted. 180 */ 181 #if __XSI_VISIBLE 182 /* XXX XSI requires pollution from <sys/wait.h> here. We'd rather not. */ 183 long a64l(const char *); 184 double drand48(void); 185 /* char *ecvt(double, int, int * __restrict, int * __restrict); */ 186 double erand48(unsigned short[3]); 187 /* char *fcvt(double, int, int * __restrict, int * __restrict); */ 188 /* char *gcvt(double, int, int * __restrict, int * __restrict); */ 189 int grantpt(int); 190 char *initstate(unsigned long /* XSI requires u_int */, char *, long); 191 long jrand48(unsigned short[3]); 192 char *l64a(long); 193 void lcong48(unsigned short[7]); 194 long lrand48(void); 195 #if !defined(_MKTEMP_DECLARED) && (__BSD_VISIBLE || __XSI_VISIBLE <= 600) 196 char *mktemp(char *); 197 #define _MKTEMP_DECLARED 198 #endif 199 long mrand48(void); 200 long nrand48(unsigned short[3]); 201 int posix_openpt(int); 202 char *ptsname(int); 203 int putenv(char *); 204 long random(void); 205 unsigned short 206 *seed48(unsigned short[3]); 207 #ifndef _SETKEY_DECLARED 208 int setkey(const char *); 209 #define _SETKEY_DECLARED 210 #endif 211 char *setstate(/* const */ char *); 212 void srand48(long); 213 void srandom(unsigned long); 214 int unlockpt(int); 215 #endif /* __XSI_VISIBLE */ 216 217 #if __BSD_VISIBLE 218 extern const char *_malloc_options; 219 extern void (*_malloc_message)(const char *, const char *, const char *, 220 const char *); 221 222 /* 223 * The alloca() function can't be implemented in C, and on some 224 * platforms it can't be implemented at all as a callable function. 225 * The GNU C compiler provides a built-in alloca() which we can use; 226 * in all other cases, provide a prototype, mainly to pacify various 227 * incarnations of lint. On platforms where alloca() is not in libc, 228 * programs which use it will fail to link when compiled with non-GNU 229 * compilers. 230 */ 231 #if __GNUC__ >= 2 || defined(__INTEL_COMPILER) 232 #undef alloca /* some GNU bits try to get cute and define this on their own */ 233 #define alloca(sz) __builtin_alloca(sz) 234 #elif defined(lint) 235 void *alloca(size_t); 236 #endif 237 238 void abort2(const char *, int, void **) __dead2; 239 __uint32_t 240 arc4random(void); 241 void arc4random_addrandom(unsigned char *, int); 242 void arc4random_buf(void *, size_t); 243 void arc4random_stir(void); 244 __uint32_t 245 arc4random_uniform(__uint32_t); 246 char *getbsize(int *, long *); 247 /* getcap(3) functions */ 248 char *cgetcap(char *, const char *, int); 249 int cgetclose(void); 250 int cgetent(char **, char **, const char *); 251 int cgetfirst(char **, char **); 252 int cgetmatch(const char *, const char *); 253 int cgetnext(char **, char **); 254 int cgetnum(char *, const char *, long *); 255 int cgetset(const char *); 256 int cgetstr(char *, const char *, char **); 257 int cgetustr(char *, const char *, char **); 258 259 int daemon(int, int); 260 char *devname(__dev_t, __mode_t); 261 char *devname_r(__dev_t, __mode_t, char *, int); 262 char *fdevname(int); 263 char *fdevname_r(int, char *, int); 264 int getloadavg(double [], int); 265 __const char * 266 getprogname(void); 267 268 int heapsort(void *, size_t, size_t, int (*)(const void *, const void *)); 269 int l64a_r(long, char *, int); 270 int mergesort(void *, size_t, size_t, int (*)(const void *, const void *)); 271 void qsort_r(void *, size_t, size_t, void *, 272 int (*)(void *, const void *, const void *)); 273 int radixsort(const unsigned char **, int, const unsigned char *, 274 unsigned); 275 void *reallocf(void *, size_t); 276 int rpmatch(const char *); 277 void setprogname(const char *); 278 int sradixsort(const unsigned char **, int, const unsigned char *, 279 unsigned); 280 void sranddev(void); 281 void srandomdev(void); 282 long long 283 strtonum(const char *, long long, long long, const char **); 284 285 /* Deprecated interfaces, to be removed in FreeBSD 6.0. */ 286 __int64_t 287 strtoq(const char *, char **, int); 288 __uint64_t 289 strtouq(const char *, char **, int); 290 291 extern char *suboptarg; /* getsubopt(3) external variable */ 292 #endif /* __BSD_VISIBLE */ 293 __END_DECLS 294 295 #endif /* !_STDLIB_H_ */ 296