stdlib.h revision 232971
123353Sdfr/*-
223353Sdfr * Copyright (c) 1990, 1993
323353Sdfr *	The Regents of the University of California.  All rights reserved.
423353Sdfr *
523353Sdfr * Redistribution and use in source and binary forms, with or without
623353Sdfr * modification, are permitted provided that the following conditions
723353Sdfr * are met:
823353Sdfr * 1. Redistributions of source code must retain the above copyright
923353Sdfr *    notice, this list of conditions and the following disclaimer.
1023353Sdfr * 2. Redistributions in binary form must reproduce the above copyright
1123353Sdfr *    notice, this list of conditions and the following disclaimer in the
1223353Sdfr *    documentation and/or other materials provided with the distribution.
1323353Sdfr * 3. Neither the name of the University nor the names of its contributors
1423353Sdfr *    may be used to endorse or promote products derived from this software
1523353Sdfr *    without specific prior written permission.
1623353Sdfr *
1723353Sdfr * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
1823353Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1923353Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2023353Sdfr * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2123353Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2223353Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2323353Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2423353Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2523353Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2623353Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2723353Sdfr * SUCH DAMAGE.
2823353Sdfr *
2950476Speter *	@(#)stdlib.h	8.5 (Berkeley) 5/19/95
3023353Sdfr * $FreeBSD: head/include/stdlib.h 232971 2012-03-14 14:39:07Z theraven $
3131370Sbde */
32206622Suqs
3379538Sru#ifndef _STDLIB_H_
3423353Sdfr#define	_STDLIB_H_
3523353Sdfr
3623353Sdfr#include <sys/cdefs.h>
3723353Sdfr#include <sys/_null.h>
3884306Sru#include <sys/_types.h>
3984306Sru
4084306Sru#if __BSD_VISIBLE
4123353Sdfr#ifndef _RUNE_T_DECLARED
4223353Sdfrtypedef	__rune_t	rune_t;
4323353Sdfr#define	_RUNE_T_DECLARED
4463232Sben#endif
4523353Sdfr#endif
4623353Sdfr
4723353Sdfr#ifndef _SIZE_T_DECLARED
48115440Shmptypedef	__size_t	size_t;
49140931Sru#define	_SIZE_T_DECLARED
50115440Shmp#endif
51140931Sru
52115440Shmp#ifndef	__cplusplus
53140931Sru#ifndef _WCHAR_T_DECLARED
5423353Sdfrtypedef	__wchar_t	wchar_t;
5523353Sdfr#define	_WCHAR_T_DECLARED
5623353Sdfr#endif
5723353Sdfr#endif
5823353Sdfr
5923353Sdfrtypedef struct {
6023353Sdfr	int	quot;		/* quotient */
6123353Sdfr	int	rem;		/* remainder */
6223353Sdfr} div_t;
6323353Sdfr
6423353Sdfrtypedef struct {
65131771Salfred	long	quot;
6623353Sdfr	long	rem;
6723353Sdfr} ldiv_t;
6823353Sdfr
6923353Sdfr#define	EXIT_FAILURE	1
7023353Sdfr#define	EXIT_SUCCESS	0
7123353Sdfr
7223353Sdfr#define	RAND_MAX	0x7fffffff
7323353Sdfr
7423353Sdfr__BEGIN_DECLS
7523353Sdfrextern int __mb_cur_max;
7623353Sdfrextern int ___mb_cur_max(void);
7723353Sdfr#define	MB_CUR_MAX	(___mb_cur_max())
7823353Sdfr
7923353Sdfr_Noreturn void	 abort(void);
80107788Sruint	 abs(int) __pure2;
8123353Sdfrint	 atexit(void (*)(void));
8223353Sdfrdouble	 atof(const char *);
8323353Sdfrint	 atoi(const char *);
8423353Sdfrlong	 atol(const char *);
8523353Sdfrvoid	*bsearch(const void *, const void *, size_t,
8623353Sdfr	    size_t, int (*)(const void *, const void *));
8723353Sdfrvoid	*calloc(size_t, size_t) __malloc_like;
8823353Sdfrdiv_t	 div(int, int) __pure2;
8923353Sdfr_Noreturn void	 exit(int);
9023353Sdfrvoid	 free(void *);
9123353Sdfrchar	*getenv(const char *);
9223353Sdfrlong	 labs(long) __pure2;
9323353Sdfrldiv_t	 ldiv(long, long) __pure2;
9423353Sdfrvoid	*malloc(size_t) __malloc_like;
9523353Sdfrint	 mblen(const char *, size_t);
9623353Sdfrsize_t	 mbstowcs(wchar_t * __restrict , const char * __restrict, size_t);
9723353Sdfrint	 mbtowc(wchar_t * __restrict, const char * __restrict, size_t);
9823353Sdfrvoid	 qsort(void *, size_t, size_t,
9923353Sdfr	    int (*)(const void *, const void *));
10023353Sdfrint	 rand(void);
10172126Sruvoid	*realloc(void *, size_t);
10223353Sdfrvoid	 srand(unsigned);
10323353Sdfrdouble	 strtod(const char * __restrict, char ** __restrict);
10423353Sdfrfloat	 strtof(const char * __restrict, char ** __restrict);
10523353Sdfrlong	 strtol(const char * __restrict, char ** __restrict, int);
10623353Sdfrlong double
10723353Sdfr	 strtold(const char * __restrict, char ** __restrict);
10872126Sruunsigned long
10923353Sdfr	 strtoul(const char * __restrict, char ** __restrict, int);
11023353Sdfrint	 system(const char *);
11169052Sruint	 wctomb(char *, wchar_t);
11223353Sdfrsize_t	 wcstombs(char * __restrict, const wchar_t * __restrict, size_t);
11369052Sru
11423353Sdfr/*
11523353Sdfr * Functions added in C99 which we make conditionally available in the
11623353Sdfr * BSD^C89 namespace if the compiler supports `long long'.
11772126Sru * The #if test is more complicated than it ought to be because
11823353Sdfr * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long'
11923353Sdfr * is not supported in the compilation environment (which therefore means
12023353Sdfr * that it can't really be ISO C99).
12123353Sdfr *
12223353Sdfr * (The only other extension made by C99 in thie header is _Exit().)
12323353Sdfr */
12423353Sdfr#if __ISO_C_VISIBLE >= 1999
12523353Sdfr#ifdef __LONG_LONG_SUPPORTED
12623353Sdfr/* LONGLONG */
12723353Sdfrtypedef struct {
12823353Sdfr	long long quot;
12969052Sru	long long rem;
13023353Sdfr} lldiv_t;
13123353Sdfr
13223353Sdfr/* LONGLONG */
13323353Sdfrlong long
13423353Sdfr	 atoll(const char *);
13523353Sdfr/* LONGLONG */
13623353Sdfrlong long
13723353Sdfr	 llabs(long long) __pure2;
13823353Sdfr/* LONGLONG */
13923353Sdfrlldiv_t	 lldiv(long long, long long) __pure2;
14023353Sdfr/* LONGLONG */
14123353Sdfrlong long
14223353Sdfr	 strtoll(const char * __restrict, char ** __restrict, int);
14323353Sdfr/* LONGLONG */
14423353Sdfrunsigned long long
14523353Sdfr	 strtoull(const char * __restrict, char ** __restrict, int);
14623353Sdfr#endif /* __LONG_LONG_SUPPORTED */
14723353Sdfr
14823353Sdfr_Noreturn void	 _Exit(int);
14923353Sdfr#endif /* __ISO_C_VISIBLE >= 1999 */
15023353Sdfr
15123353Sdfr/*
15223353Sdfr * If we're in a mode greater than C99, expose C11 functions.
15323353Sdfr */
15423353Sdfr#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
15523353Sdfrvoid *	aligned_alloc(size_t, size_t);
15669052Sruint	at_quick_exit(void (*)(void));
15723353Sdfr_Noreturn void
15823353Sdfr	quick_exit(int);
15923353Sdfr#endif /* __ISO_C_VISIBLE >= 2011 */
16023467Smpp/*
16123353Sdfr * Extensions made by POSIX relative to C.  We don't know yet which edition
16223353Sdfr * of POSIX made these extensions, so assume they've always been there until
16323353Sdfr * research can be done.
16423353Sdfr */
16523353Sdfr#if __POSIX_VISIBLE /* >= ??? */
16623353Sdfrint	 posix_memalign(void **, size_t, size_t); /* (ADV) */
16723353Sdfrint	 rand_r(unsigned *);			/* (TSF) */
16823353Sdfrchar	*realpath(const char * __restrict, char * __restrict);
16931370Sbdeint	 setenv(const char *, const char *, int);
170103534Struckmanint	 unsetenv(const char *);
17123353Sdfr#endif
172103534Struckman
17323353Sdfr#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE
17423353Sdfrint	 getsubopt(char **, char *const *, char **);
17523353Sdfr#ifndef _MKDTEMP_DECLARED
176103534Struckmanchar	*mkdtemp(char *);
17723353Sdfr#define	_MKDTEMP_DECLARED
17823353Sdfr#endif
179140411Sru#ifndef _MKSTEMP_DECLARED
18023353Sdfrint	 mkstemp(char *);
18123353Sdfr#define	_MKSTEMP_DECLARED
18229966Swosch#endif
18323353Sdfr#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */
18423353Sdfr
18529966Swosch/*
18623353Sdfr * The only changes to the XSI namespace in revision 6 were the deletion
18723353Sdfr * of the ttyslot() and valloc() functions, which FreeBSD never declared
18823353Sdfr * in this header.  For revision 7, ecvt(), fcvt(), and gcvt(), which
18923467Smpp * FreeBSD also does not have, and mktemp(), are to be deleted.
19023467Smpp */
19123353Sdfr#if __XSI_VISIBLE
192147647Shmp/* XXX XSI requires pollution from <sys/wait.h> here.  We'd rather not. */
19334504Scharnierlong	 a64l(const char *);
19434504Scharnierdouble	 drand48(void);
19534504Scharnier/* char	*ecvt(double, int, int * __restrict, int * __restrict); */
196double	 erand48(unsigned short[3]);
197/* char	*fcvt(double, int, int * __restrict, int * __restrict); */
198/* char	*gcvt(double, int, int * __restrict, int * __restrict); */
199int	 grantpt(int);
200char	*initstate(unsigned long /* XSI requires u_int */, char *, long);
201long	 jrand48(unsigned short[3]);
202char	*l64a(long);
203void	 lcong48(unsigned short[7]);
204long	 lrand48(void);
205#if !defined(_MKTEMP_DECLARED) && (__BSD_VISIBLE || __XSI_VISIBLE <= 600)
206char	*mktemp(char *);
207#define	_MKTEMP_DECLARED
208#endif
209long	 mrand48(void);
210long	 nrand48(unsigned short[3]);
211int	 posix_openpt(int);
212char	*ptsname(int);
213int	 putenv(char *);
214long	 random(void);
215unsigned short
216	*seed48(unsigned short[3]);
217#ifndef _SETKEY_DECLARED
218int	 setkey(const char *);
219#define	_SETKEY_DECLARED
220#endif
221char	*setstate(/* const */ char *);
222void	 srand48(long);
223void	 srandom(unsigned long);
224int	 unlockpt(int);
225#endif /* __XSI_VISIBLE */
226
227#if __BSD_VISIBLE
228extern const char *_malloc_options;
229extern void (*_malloc_message)(const char *, const char *, const char *,
230	    const char *);
231
232/*
233 * The alloca() function can't be implemented in C, and on some
234 * platforms it can't be implemented at all as a callable function.
235 * The GNU C compiler provides a built-in alloca() which we can use;
236 * in all other cases, provide a prototype, mainly to pacify various
237 * incarnations of lint.  On platforms where alloca() is not in libc,
238 * programs which use it will fail to link when compiled with non-GNU
239 * compilers.
240 */
241#if __GNUC__ >= 2 || defined(__INTEL_COMPILER)
242#undef  alloca	/* some GNU bits try to get cute and define this on their own */
243#define alloca(sz) __builtin_alloca(sz)
244#elif defined(lint)
245void	*alloca(size_t);
246#endif
247
248void	 abort2(const char *, int, void **) __dead2;
249__uint32_t
250	 arc4random(void);
251void	 arc4random_addrandom(unsigned char *, int);
252void	 arc4random_buf(void *, size_t);
253void	 arc4random_stir(void);
254__uint32_t
255	 arc4random_uniform(__uint32_t);
256char	*getbsize(int *, long *);
257					/* getcap(3) functions */
258char	*cgetcap(char *, const char *, int);
259int	 cgetclose(void);
260int	 cgetent(char **, char **, const char *);
261int	 cgetfirst(char **, char **);
262int	 cgetmatch(const char *, const char *);
263int	 cgetnext(char **, char **);
264int	 cgetnum(char *, const char *, long *);
265int	 cgetset(const char *);
266int	 cgetstr(char *, const char *, char **);
267int	 cgetustr(char *, const char *, char **);
268
269int	 daemon(int, int);
270char	*devname(__dev_t, __mode_t);
271char 	*devname_r(__dev_t, __mode_t, char *, int);
272char	*fdevname(int);
273char 	*fdevname_r(int, char *, int);
274int	 getloadavg(double [], int);
275const char *
276	 getprogname(void);
277
278int	 heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
279int	 l64a_r(long, char *, int);
280int	 mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
281void	 qsort_r(void *, size_t, size_t, void *,
282	    int (*)(void *, const void *, const void *));
283int	 radixsort(const unsigned char **, int, const unsigned char *,
284	    unsigned);
285void    *reallocf(void *, size_t);
286int	 rpmatch(const char *);
287void	 setprogname(const char *);
288int	 sradixsort(const unsigned char **, int, const unsigned char *,
289	    unsigned);
290void	 sranddev(void);
291void	 srandomdev(void);
292long long
293	strtonum(const char *, long long, long long, const char **);
294
295/* Deprecated interfaces, to be removed in FreeBSD 6.0. */
296__int64_t
297	 strtoq(const char *, char **, int);
298__uint64_t
299	 strtouq(const char *, char **, int);
300
301extern char *suboptarg;			/* getsubopt(3) external variable */
302#endif /* __BSD_VISIBLE */
303__END_DECLS
304
305#endif /* !_STDLIB_H_ */
306