stdlib.h revision 180689
139213Sgibbs/*-
239213Sgibbs * Copyright (c) 1990, 1993
343819Sken *	The Regents of the University of California.  All rights reserved.
439213Sgibbs *
539213Sgibbs * Redistribution and use in source and binary forms, with or without
639213Sgibbs * modification, are permitted provided that the following conditions
739213Sgibbs * are met:
839213Sgibbs * 1. Redistributions of source code must retain the above copyright
939213Sgibbs *    notice, this list of conditions and the following disclaimer.
1039213Sgibbs * 2. Redistributions in binary form must reproduce the above copyright
1139213Sgibbs *    notice, this list of conditions and the following disclaimer in the
1239213Sgibbs *    documentation and/or other materials provided with the distribution.
1339213Sgibbs * 3. All advertising materials mentioning features or use of this software
1439213Sgibbs *    must display the following acknowledgement:
1539213Sgibbs *	This product includes software developed by the University of
1639213Sgibbs *	California, Berkeley and its contributors.
1739213Sgibbs * 4. Neither the name of the University nor the names of its contributors
1839213Sgibbs *    may be used to endorse or promote products derived from this software
1939213Sgibbs *    without specific prior written permission.
2039213Sgibbs *
2139213Sgibbs * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2239213Sgibbs * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2339213Sgibbs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2439213Sgibbs * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2539213Sgibbs * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2639213Sgibbs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2746747Sken * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2839213Sgibbs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2939213Sgibbs * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3039213Sgibbs * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3139213Sgibbs * SUCH DAMAGE.
3239213Sgibbs *
3339213Sgibbs *	@(#)stdlib.h	8.5 (Berkeley) 5/19/95
3439213Sgibbs * $FreeBSD: head/include/stdlib.h 180689 2008-07-22 11:40:42Z ache $
3539213Sgibbs */
3639213Sgibbs
3739213Sgibbs#ifndef _STDLIB_H_
3839213Sgibbs#define	_STDLIB_H_
3939213Sgibbs
4039213Sgibbs#include <sys/cdefs.h>
4139213Sgibbs#include <sys/_null.h>
4239213Sgibbs#include <sys/_types.h>
4339213Sgibbs
4439213Sgibbs#if __BSD_VISIBLE
4539213Sgibbs#ifndef _RUNE_T_DECLARED
4639213Sgibbstypedef	__rune_t	rune_t;
4739213Sgibbs#define	_RUNE_T_DECLARED
4839213Sgibbs#endif
4940020Sken#endif
5039213Sgibbs
5139213Sgibbs#ifndef _SIZE_T_DECLARED
5239213Sgibbstypedef	__size_t	size_t;
5339213Sgibbs#define	_SIZE_T_DECLARED
5439213Sgibbs#endif
5539213Sgibbs
5639213Sgibbs#ifndef	__cplusplus
5739213Sgibbs#ifndef _WCHAR_T_DECLARED
5839213Sgibbstypedef	__wchar_t	wchar_t;
5939213Sgibbs#define	_WCHAR_T_DECLARED
6039213Sgibbs#endif
6139213Sgibbs#endif
6239213Sgibbs
6339213Sgibbstypedef struct {
6439213Sgibbs	int	quot;		/* quotient */
6539213Sgibbs	int	rem;		/* remainder */
6639213Sgibbs} div_t;
6739213Sgibbs
6839213Sgibbstypedef struct {
6939213Sgibbs	long	quot;
7039213Sgibbs	long	rem;
7139213Sgibbs} ldiv_t;
7239213Sgibbs
7339213Sgibbs#define	EXIT_FAILURE	1
7439213Sgibbs#define	EXIT_SUCCESS	0
7539213Sgibbs
7639213Sgibbs#define	RAND_MAX	0x7fffffff
7739213Sgibbs
7839213Sgibbsextern int __mb_cur_max;
7939213Sgibbs#define	MB_CUR_MAX	__mb_cur_max
8039213Sgibbs
8139213Sgibbs__BEGIN_DECLS
8239213Sgibbsvoid	 abort(void) __dead2;
8339213Sgibbsvoid	 abort2(const char *, int, void **) __dead2;
8439213Sgibbsint	 abs(int) __pure2;
8539213Sgibbsint	 atexit(void (*)(void));
8639213Sgibbsdouble	 atof(const char *);
8739213Sgibbsint	 atoi(const char *);
8839213Sgibbslong	 atol(const char *);
8939213Sgibbsvoid	*bsearch(const void *, const void *, size_t,
9039213Sgibbs	    size_t, int (*)(const void *, const void *));
9139213Sgibbsvoid	*calloc(size_t, size_t);
9239213Sgibbsdiv_t	 div(int, int) __pure2;
9339213Sgibbsvoid	 exit(int) __dead2;
9439213Sgibbsvoid	 free(void *);
9539213Sgibbschar	*getenv(const char *);
9639213Sgibbslong	 labs(long) __pure2;
9739213Sgibbsldiv_t	 ldiv(long, long) __pure2;
9839213Sgibbsvoid	*malloc(size_t);
9939213Sgibbsint	 mblen(const char *, size_t);
10039213Sgibbssize_t	 mbstowcs(wchar_t * __restrict , const char * __restrict, size_t);
10139213Sgibbsint	 mbtowc(wchar_t * __restrict, const char * __restrict, size_t);
10239213Sgibbsvoid	 qsort(void *, size_t, size_t,
10339213Sgibbs	    int (*)(const void *, const void *));
10439213Sgibbsint	 rand(void);
10539213Sgibbsvoid	*realloc(void *, size_t);
10639213Sgibbsvoid	 srand(unsigned);
10739213Sgibbsdouble	 strtod(const char * __restrict, char ** __restrict);
10839213Sgibbsfloat	 strtof(const char * __restrict, char ** __restrict);
10939213Sgibbslong	 strtol(const char * __restrict, char ** __restrict, int);
11039213Sgibbslong double
11139213Sgibbs	 strtold(const char * __restrict, char ** __restrict);
11239213Sgibbsunsigned long
11339213Sgibbs	 strtoul(const char * __restrict, char ** __restrict, int);
11439213Sgibbsint	 system(const char *);
11539213Sgibbsint	 wctomb(char *, wchar_t);
11639213Sgibbssize_t	 wcstombs(char * __restrict, const wchar_t * __restrict, size_t);
11739213Sgibbs
11839213Sgibbs/*
11939213Sgibbs * Functions added in C99 which we make conditionally available in the
12039213Sgibbs * BSD^C89 namespace if the compiler supports `long long'.
12139213Sgibbs * The #if test is more complicated than it ought to be because
12239213Sgibbs * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long'
12339213Sgibbs * is not supported in the compilation environment (which therefore means
12439213Sgibbs * that it can't really be ISO C99).
12539213Sgibbs *
12639213Sgibbs * (The only other extension made by C99 in thie header is _Exit().)
12739213Sgibbs */
12839213Sgibbs#if __ISO_C_VISIBLE >= 1999
12946581Sken#ifdef __LONG_LONG_SUPPORTED
13039213Sgibbs/* LONGLONG */
13139213Sgibbstypedef struct {
13239213Sgibbs	long long quot;
13339213Sgibbs	long long rem;
13439213Sgibbs} lldiv_t;
13539213Sgibbs
13639213Sgibbs/* LONGLONG */
13739213Sgibbslong long
13839213Sgibbs	 atoll(const char *);
13939213Sgibbs/* LONGLONG */
14039213Sgibbslong long
14139213Sgibbs	 llabs(long long) __pure2;
14239213Sgibbs/* LONGLONG */
14339213Sgibbslldiv_t	 lldiv(long long, long long) __pure2;
14439213Sgibbs/* LONGLONG */
14539213Sgibbslong long
14639213Sgibbs	 strtoll(const char * __restrict, char ** __restrict, int);
14739213Sgibbs/* LONGLONG */
14839213Sgibbsunsigned long long
14939213Sgibbs	 strtoull(const char * __restrict, char ** __restrict, int);
15039213Sgibbs#endif /* __LONG_LONG_SUPPORTED */
15139213Sgibbs
15239213Sgibbsvoid	 _Exit(int) __dead2;
15339213Sgibbs#endif /* __ISO_C_VISIBLE >= 1999 */
15439213Sgibbs
15539213Sgibbs/*
15639213Sgibbs * Extensions made by POSIX relative to C.  We don't know yet which edition
15739213Sgibbs * of POSIX made these extensions, so assume they've always been there until
15839213Sgibbs * research can be done.
15939213Sgibbs */
16039213Sgibbs#if __POSIX_VISIBLE /* >= ??? */
16139213Sgibbsint	 posix_memalign(void **, size_t, size_t); /* (ADV) */
16239213Sgibbsint	 rand_r(unsigned *);			/* (TSF) */
16339213Sgibbsint	 setenv(const char *, const char *, int);
16439213Sgibbsint	 unsetenv(const char *);
16540262Sken#endif
16640262Sken
16740262Sken/*
16840262Sken * The only changes to the XSI namespace in revision 6 were the deletion
16939213Sgibbs * of the ttyslot() and valloc() functions, which FreeBSD never declared
17039213Sgibbs * in this header.  For revision 7, ecvt(), fcvt(), and gcvt(), which
17139213Sgibbs * FreeBSD also does not have, and mktemp(), are to be deleted.
17239213Sgibbs */
17339213Sgibbs#if __XSI_VISIBLE
17439213Sgibbs/* XXX XSI requires pollution from <sys/wait.h> here.  We'd rather not. */
17539213Sgibbslong	 a64l(const char *);
17639213Sgibbsdouble	 drand48(void);
17739213Sgibbs/* char	*ecvt(double, int, int * __restrict, int * __restrict); */
17839213Sgibbsdouble	 erand48(unsigned short[3]);
17939213Sgibbs/* char	*fcvt(double, int, int * __restrict, int * __restrict); */
18039213Sgibbs/* char	*gcvt(double, int, int * __restrict, int * __restrict); */
18139213Sgibbsint	 getsubopt(char **, char *const *, char **);
18239213Sgibbsint	 grantpt(int);
18340020Skenchar	*initstate(unsigned long /* XSI requires u_int */, char *, long);
18439213Sgibbslong	 jrand48(unsigned short[3]);
18539213Sgibbschar	*l64a(long);
18639213Sgibbsvoid	 lcong48(unsigned short[7]);
18739213Sgibbslong	 lrand48(void);
18839213Sgibbs#ifndef _MKSTEMP_DECLARED
18940603Skenint	 mkstemp(char *);
19039213Sgibbs#define	_MKSTEMP_DECLARED
19139213Sgibbs#endif
19239213Sgibbs#ifndef _MKTEMP_DECLARED
19339213Sgibbschar	*mktemp(char *);
19439213Sgibbs#define	_MKTEMP_DECLARED
19539213Sgibbs#endif
19639213Sgibbslong	 mrand48(void);
19739213Sgibbslong	 nrand48(unsigned short[3]);
19839213Sgibbsint	 posix_openpt(int);
19939213Sgibbschar	*ptsname(int);
20039213Sgibbsint	 putenv(char *);
20142531Seivindlong	 random(void);
20239213Sgibbschar	*realpath(const char *, char resolved_path[]);
20339213Sgibbsunsigned short
20439213Sgibbs	*seed48(unsigned short[3]);
20539213Sgibbs#ifndef _SETKEY_DECLARED
20639213Sgibbsint	 setkey(const char *);
20739213Sgibbs#define	_SETKEY_DECLARED
20839213Sgibbs#endif
20939213Sgibbschar	*setstate(/* const */ char *);
21039213Sgibbsvoid	 srand48(long);
21139213Sgibbsvoid	 srandom(unsigned long);
21239213Sgibbsint	 unlockpt(int);
21339213Sgibbs#endif /* __XSI_VISIBLE */
21439213Sgibbs
21539213Sgibbs#if __BSD_VISIBLE
21639213Sgibbsextern const char *_malloc_options;
21739213Sgibbsextern void (*_malloc_message)(const char *, const char *, const char *,
21839213Sgibbs	    const char *);
21939213Sgibbs
22039213Sgibbs/*
22139213Sgibbs * The alloca() function can't be implemented in C, and on some
22239213Sgibbs * platforms it can't be implemented at all as a callable function.
22339213Sgibbs * The GNU C compiler provides a built-in alloca() which we can use;
22439213Sgibbs * in all other cases, provide a prototype, mainly to pacify various
22539213Sgibbs * incarnations of lint.  On platforms where alloca() is not in libc,
22639213Sgibbs * programs which use it will fail to link when compiled with non-GNU
22739213Sgibbs * compilers.
22839213Sgibbs */
22939213Sgibbs#if __GNUC__ >= 2 || defined(__INTEL_COMPILER)
23039213Sgibbs#undef  alloca	/* some GNU bits try to get cute and define this on their own */
23139213Sgibbs#define alloca(sz) __builtin_alloca(sz)
23239213Sgibbs#elif defined(lint)
23339213Sgibbsvoid	*alloca(size_t);
23439213Sgibbs#endif
23539213Sgibbs
23639213Sgibbs__uint32_t
23739213Sgibbs	 arc4random(void);
23839213Sgibbsvoid	 arc4random_addrandom(unsigned char *, int);
23939213Sgibbsvoid	 arc4random_buf(void *, size_t);
24039213Sgibbsvoid	 arc4random_stir(void);
24139213Sgibbs__uint32_t
24239213Sgibbs	 arc4random_uniform(__uint32_t);
24339213Sgibbschar	*getbsize(int *, long *);
24439213Sgibbs					/* getcap(3) functions */
24539213Sgibbschar	*cgetcap(char *, const char *, int);
24639213Sgibbsint	 cgetclose(void);
24739213Sgibbsint	 cgetent(char **, char **, const char *);
24839213Sgibbsint	 cgetfirst(char **, char **);
24939213Sgibbsint	 cgetmatch(const char *, const char *);
25046625Sphkint	 cgetnext(char **, char **);
25139213Sgibbsint	 cgetnum(char *, const char *, long *);
25239213Sgibbsint	 cgetset(const char *);
25339213Sgibbsint	 cgetstr(char *, const char *, char **);
25439213Sgibbsint	 cgetustr(char *, const char *, char **);
25539213Sgibbs
25639213Sgibbsint	 daemon(int, int);
25739213Sgibbschar	*devname(__dev_t, __mode_t);
25839213Sgibbschar 	*devname_r(__dev_t, __mode_t, char *, int);
25939213Sgibbsint	 getloadavg(double [], int);
26039213Sgibbs__const char *
26139213Sgibbs	 getprogname(void);
26239213Sgibbs
26339213Sgibbsint	 heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
26439213Sgibbsint	 l64a_r(long, char *, int);
26539213Sgibbsint	 mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
26639213Sgibbsvoid	 qsort_r(void *, size_t, size_t, void *,
26739213Sgibbs	    int (*)(void *, const void *, const void *));
26839213Sgibbsint	 radixsort(const unsigned char **, int, const unsigned char *,
26939213Sgibbs	    unsigned);
27039213Sgibbsvoid    *reallocf(void *, size_t);
27139213Sgibbsint	 rpmatch(const char *);
27239213Sgibbsvoid	 setprogname(const char *);
27346747Skenint	 sradixsort(const unsigned char **, int, const unsigned char *,
27439213Sgibbs	    unsigned);
27539213Sgibbsvoid	 sranddev(void);
27646747Skenvoid	 srandomdev(void);
27739213Sgibbslong long
27839213Sgibbs	strtonum(const char *, long long, long long, const char **);
27939213Sgibbs
28039213Sgibbs/* Deprecated interfaces, to be removed in FreeBSD 6.0. */
28139213Sgibbs__int64_t
28239213Sgibbs	 strtoq(const char *, char **, int);
28339213Sgibbs__uint64_t
28439213Sgibbs	 strtouq(const char *, char **, int);
28539213Sgibbs
28639213Sgibbsextern char *suboptarg;			/* getsubopt(3) external variable */
28739213Sgibbs#endif /* __BSD_VISIBLE */
28839213Sgibbs__END_DECLS
28939213Sgibbs
29039213Sgibbs#endif /* !_STDLIB_H_ */
29139213Sgibbs