kernel: Adjust some comments to the unionfs removal.
[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
3b63b459
SW
179#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE
180int getsubopt(char **, char *const *, char **);
330f6769
SW
181#ifndef _MKDTEMP_DECLARED
182char *mkdtemp(char *);
183#define _MKDTEMP_DECLARED
184#endif
185#ifndef _MKSTEMP_DECLARED
186int mkstemp(char *);
187#define _MKSTEMP_DECLARED
188#endif
189#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */
190
5d0641a4
PA
191/*
192 * The only changes to the XSI namespace in revision 6 were the deletion
193 * of the ttyslot() and valloc() functions, which we never declared
194 * in this header. For revision 7, ecvt(), fcvt(), and gcvt(), which
195 * we also do not have, and mktemp(), are to be deleted.
196 */
197#if __XSI_VISIBLE
198/* XXX XSI requires pollution from <sys/wait.h> here. We'd rather not. */
199long a64l(const char *);
5baeefc7
JS
200double drand48(void);
201double erand48(unsigned short[3]);
f709978f
SW
202#if 0
203#if __BSD_VISIBLE || __XSI_VISIBLE <= 600
204char *ecvt(double, int, int * __restrict, int * __restrict); /* LEGACY */
205char *fcvt(double, int, int * __restrict, int * __restrict); /* LEGACY */
206char *gcvt(double, int, int * __restrict, int * __restrict); /* LEGACY */
207#endif
208#endif
c578a286 209int grantpt(int);
5d0641a4 210char *initstate(unsigned long /* XSI requires u_int */, char *, long);
5baeefc7 211long jrand48(unsigned short[3]);
5d0641a4 212char *l64a(long);
5baeefc7
JS
213void lcong48(unsigned short[7]);
214long lrand48(void);
330f6769 215#if !defined(_MKTEMP_DECLARED) && (__BSD_VISIBLE || __XSI_VISIBLE <= 600)
f709978f 216char *mktemp(char *); /* LEGACY */
330f6769
SW
217#define _MKTEMP_DECLARED
218#endif
5baeefc7
JS
219long mrand48(void);
220long nrand48(unsigned short[3]);
c578a286
AH
221int posix_openpt(int);
222char *ptsname(int);
5d0641a4
PA
223int putenv(char *);
224long random(void);
dcd5dd2e 225char *realpath(const char * __restrict, char * __restrict);
5d0641a4
PA
226unsigned short
227 *seed48(unsigned short[3]);
228int setkey(const char *);
229char *setstate(/* const */ char *);
5baeefc7 230void srand48(long);
5d0641a4 231void srandom(unsigned long);
c578a286 232int unlockpt(int);
5d0641a4 233#endif /* __XSI_VISIBLE */
5baeefc7 234
5d0641a4
PA
235#if __BSD_VISIBLE
236/* extern const char *_malloc_options;
237extern void (*_malloc_message)(const char *, const char *, const char *,
238 const char *); */
239
240/*
241 * The alloca() function can't be implemented in C, and on some
242 * platforms it can't be implemented at all as a callable function.
243 * The GNU C compiler provides a built-in alloca() which we can use;
244 * in all other cases, provide a prototype, mainly to pacify various
245 * incarnations of lint. On platforms where alloca() is not in libc,
246 * programs which use it will fail to link when compiled with non-GNU
247 * compilers.
248 */
249#if __GNUC__ >= 2 || defined(__INTEL_COMPILER)
250#undef alloca /* some GNU bits try to get cute and define this on their own */
251#define alloca(sz) __builtin_alloca(sz)
252#elif defined(lint)
253void *alloca(size_t);
254#endif
255
256__uint32_t
257 arc4random(void);
d82b6b65 258void arc4random_addrandom(__uint8_t *, size_t);
5d0641a4 259void arc4random_buf(void *, size_t);
5baeefc7 260void arc4random_stir(void);
5d0641a4
PA
261__uint32_t
262 arc4random_uniform(__uint32_t);
5baeefc7 263char *getbsize(int *, long *);
f736c3f8
SW
264
265/* getcap(3) functions */
6a7eb1f6 266char *cgetcap(char *, const char *, int);
5baeefc7 267int cgetclose(void);
6a7eb1f6 268int cgetent(char **, char **, const char *);
5baeefc7 269int cgetfirst(char **, char **);
6a7eb1f6 270int cgetmatch(const char *, const char *);
5baeefc7 271int cgetnext(char **, char **);
6a7eb1f6
PA
272int cgetnum(char *, const char *, long *);
273int cgetset(const char *);
274int cgetstr(char *, const char *, char **);
275int cgetustr(char *, const char *, char **);
5baeefc7
JS
276
277int daemon(int, int);
24d00e84
JS
278char *devname(dev_t, mode_t);
279char *devname_r(dev_t, mode_t, char *, size_t);
f736c3f8
SW
280char *fdevname(int);
281int fdevname_r(int, char *, size_t);
3eaaad2c 282int getloadavg(double [], int);
b27f3669 283const char *
5d0641a4 284 getprogname(void);
5baeefc7 285
5baeefc7 286int heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
5d0641a4 287int l64a_r(long, char *, int);
5baeefc7 288int mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
5d0641a4
PA
289void qsort_r(void *, size_t, size_t, void *,
290 int (*)(void *, const void *, const void *));
5baeefc7
JS
291int radixsort(const unsigned char **, int, const unsigned char *,
292 unsigned int);
9d20c0f5 293void *reallocf(void *, size_t) __heedresult;
5d0641a4 294int rpmatch(const char *);
5baeefc7 295void setprogname(const char *);
5d0641a4
PA
296int sradixsort(const unsigned char **, int, const unsigned char *,
297 unsigned int);
298void sranddev(void);
5baeefc7 299void srandomdev(void);
5d0641a4 300long long
f736c3f8 301 strtonum(const char *, long long, long long, const char **);
44a09dd6 302
5d0641a4
PA
303/* Deprecated interfaces. */
304#if !defined(_KERNEL_VIRTUAL)
305__int64_t
306 strtoq(const char *, char **, int);
307__uint64_t
308 strtouq(const char *, char **, int);
44a09dd6 309#endif
70e9d14e 310
5d0641a4
PA
311extern char *suboptarg; /* getsubopt(3) external variable */
312#endif /* __BSD_VISIBLE */
b8b8fcfe
SW
313
314/*
315 * C11 functions.
316 */
05eaf8a2 317#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
b8b8fcfe 318int at_quick_exit(void (*func)(void));
1e6da6a6
SW
319_Noreturn void
320 quick_exit(int);
9d20c0f5 321void *aligned_alloc(size_t, size_t) __heedresult;
b8b8fcfe
SW
322#endif /* __ISO_C_VISIBLE >= 2011 */
323
984263bc
MD
324__END_DECLS
325
326#endif /* !_STDLIB_H_ */