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