stdlib.h revision 108574
111568Sjkh/*-
211568Sjkh * Copyright (c) 1990, 1993
311568Sjkh *	The Regents of the University of California.  All rights reserved.
411568Sjkh *
511568Sjkh * Redistribution and use in source and binary forms, with or without
611568Sjkh * modification, are permitted provided that the following conditions
744890Sjkh * are met:
811568Sjkh * 1. Redistributions of source code must retain the above copyright
911568Sjkh *    notice, this list of conditions and the following disclaimer.
1011568Sjkh * 2. Redistributions in binary form must reproduce the above copyright
1111568Sjkh *    notice, this list of conditions and the following disclaimer in the
1211568Sjkh *    documentation and/or other materials provided with the distribution.
1311568Sjkh * 3. All advertising materials mentioning features or use of this software
1411568Sjkh *    must display the following acknowledgement:
1511568Sjkh *	This product includes software developed by the University of
1611568Sjkh *	California, Berkeley and its contributors.
1711568Sjkh * 4. Neither the name of the University nor the names of its contributors
1811568Sjkh *    may be used to endorse or promote products derived from this software
1911568Sjkh *    without specific prior written permission.
2011568Sjkh *
2111568Sjkh * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2211568Sjkh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2311568Sjkh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2411568Sjkh * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2511568Sjkh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2611568Sjkh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2711568Sjkh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2811568Sjkh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2911568Sjkh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3011568Sjkh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3111568Sjkh * SUCH DAMAGE.
3211568Sjkh *
3311568Sjkh *	@(#)stdlib.h	8.5 (Berkeley) 5/19/95
3411568Sjkh * $FreeBSD: head/include/stdlib.h 108574 2003-01-02 20:44:41Z jmallett $
3511568Sjkh */
3611568Sjkh
3711568Sjkh#ifndef _STDLIB_H_
3811568Sjkh#define	_STDLIB_H_
3911568Sjkh
4011568Sjkh#include <sys/cdefs.h>
4111568Sjkh#include <sys/_types.h>
4211568Sjkh
4311568Sjkh#if __BSD_VISIBLE
4411568Sjkh#ifndef _RUNE_T_DECLARED
4511568Sjkhtypedef	__rune_t	rune_t;
4611568Sjkh#define	_RUNE_T_DECLARED
4711568Sjkh#endif
4829222Sjkh#endif
4929222Sjkh
5011568Sjkh#ifndef _SIZE_T_DECLARED
5111568Sjkhtypedef	__size_t	size_t;
5211568Sjkh#define	_SIZE_T_DECLARED
5311568Sjkh#endif
5411568Sjkh
5511568Sjkh#ifndef	__cplusplus
5611568Sjkh#ifndef _WCHAR_T_DECLARED
5711568Sjkhtypedef	__wchar_t	wchar_t;
5811568Sjkh#define	_WCHAR_T_DECLARED
5911568Sjkh#endif
6043949Sjkh#endif
6111568Sjkh
6211568Sjkhtypedef struct {
6311568Sjkh	int	quot;		/* quotient */
6411568Sjkh	int	rem;		/* remainder */
6543949Sjkh} div_t;
6611568Sjkh
6711568Sjkhtypedef struct {
6811568Sjkh	long	quot;
6911568Sjkh	long	rem;
7043949Sjkh} ldiv_t;
7111568Sjkh
7211568Sjkh#ifndef NULL
7343949Sjkh#define	NULL	0
7411568Sjkh#endif
7511568Sjkh
7621726Sjkh#define	EXIT_FAILURE	1
7711568Sjkh#define	EXIT_SUCCESS	0
7824548Sjkh
7911568Sjkh#define	RAND_MAX	0x7fffffff
8011568Sjkh
8111568Sjkhextern int __mb_cur_max;
8211568Sjkh#define	MB_CUR_MAX	__mb_cur_max
8311568Sjkh
8411568Sjkh__BEGIN_DECLS
8521726Sjkhvoid	 abort(void) __dead2;
8621726Sjkhint	 abs(int) __pure2;
8711568Sjkhint	 atexit(void (*)(void));
8811568Sjkhdouble	 atof(const char *);
8943949Sjkhint	 atoi(const char *);
9011568Sjkhlong	 atol(const char *);
9111568Sjkhvoid	*bsearch(const void *, const void *, size_t,
9211568Sjkh	    size_t, int (*)(const void *, const void *));
9343949Sjkhvoid	*calloc(size_t, size_t);
9411568Sjkhdiv_t	 div(int, int) __pure2;
9511568Sjkhvoid	 exit(int) __dead2;
9611568Sjkhvoid	 free(void *);
9711568Sjkhchar	*getenv(const char *);
9836320Sstevelong	 labs(long) __pure2;
9943949Sjkhldiv_t	 ldiv(long, long) __pure2;
10043949Sjkhvoid	*malloc(size_t);
10143949Sjkhint	 mblen(const char *, size_t);
10211568Sjkhsize_t	 mbstowcs(wchar_t * __restrict , const char * __restrict, size_t);
10311568Sjkhint	 mbtowc(wchar_t * __restrict, const char * __restrict, size_t);
10411568Sjkhvoid	 qsort(void *, size_t, size_t,
10511568Sjkh	    int (*)(const void *, const void *));
10611568Sjkhint	 rand(void);
10744890Sjkhvoid	*realloc(void *, size_t);
10843949Sjkhvoid	 srand(unsigned);
10911568Sjkhdouble	 strtod(const char * __restrict, char ** __restrict);
11011568Sjkh/* float strtof(const char * __restrict, char ** __restrict); */
11111568Sjkhlong	 strtol(const char * __restrict, char ** __restrict, int);
11211568Sjkh/* long double
11343949Sjkh	 strtold(const char * __restrict, char ** __restrict); */
11421726Sjkhunsigned long
11511568Sjkh	 strtoul(const char * __restrict, char ** __restrict, int);
11611568Sjkhint	 system(const char *);
11711568Sjkhint	 wctomb(char *, wchar_t);
11811568Sjkhsize_t	 wcstombs(char * __restrict, const wchar_t * __restrict, size_t);
11911568Sjkh
12011568Sjkh/*
12111568Sjkh * Functions added in C99 which we make conditionally available in the
12211568Sjkh * BSD^C89 namespace if the compiler supports `long long'.
12311568Sjkh * The #if test is more complicated than it ought to be because
12411568Sjkh * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long'
12511568Sjkh * is not supported in the compilation environment (which therefore means
12611568Sjkh * that it can't really be ISO C99).
12721728Sjkh *
12821728Sjkh * (The only other extension made by C99 in thie header is _Exit().)
12911568Sjkh */
13011568Sjkh#if __ISO_C_VISIBLE >= 1999
13115355Sjkh#ifdef __LONG_LONG_SUPPORTED
13211568Sjkh/* LONGLONG */
13321720Sjkhtypedef struct {
13411568Sjkh	long long quot;
13511568Sjkh	long long rem;
13611568Sjkh} lldiv_t;
13721726Sjkh
13821728Sjkh/* LONGLONG */
13911568Sjkhlong long
14011568Sjkh	 atoll(const char *);
14111568Sjkh/* LONGLONG */
14211568Sjkhlong long
14315355Sjkh	 llabs(long long) __pure2;
14411568Sjkh/* LONGLONG */
14511568Sjkhlldiv_t	 lldiv(long long, long long) __pure2;
14611568Sjkh/* LONGLONG */
14711568Sjkhlong long
14811568Sjkh	 strtoll(const char * __restrict, char ** __restrict, int);
14911568Sjkh/* LONGLONG */
15011568Sjkhunsigned long long
15111568Sjkh	 strtoull(const char * __restrict, char ** __restrict, int);
15216975Sjkh#endif /* __LONG_LONG_SUPPORTED */
15311568Sjkh
15415091Sjkhvoid	 _Exit(int) __dead2;
15511568Sjkh#endif /* __ISO_C_VISIBLE >= 1999 */
15630345Sjkh
15711568Sjkh/*
15811568Sjkh * Extensions made by POSIX relative to C.  We don't know yet which edition
15929222Sjkh * of POSIX made these extensions, so assume they've always been there until
16029222Sjkh * research can be done.
16129222Sjkh */
16243685Sjkh#if __POSIX_VISIBLE /* >= ??? */
16340841Sjkh/* int	 posix_memalign(void **, size_t, size_t); (ADV) */
16411752Sjkhint	 rand_r(unsigned *);			/* (TSF) */
16517404Sjkhint	 setenv(const char *, const char *, int);
16611752Sjkhvoid	 unsetenv(const char *);
16718830Sjkh#endif
16816975Sjkh
16911752Sjkh/*
17011568Sjkh * The only changes to the XSI namespace in revision 6 were the deletion
17130345Sjkh * of the ttyslot() and valloc() functions, which FreeBSD never declared
17230345Sjkh * in this header.  For revision 7, ecvt(), fcvt(), and gcvt(), which
17321710Sjkh * FreeBSD also does not have, and mktemp(), are to be deleted.
17421792Sjkh */
17517404Sjkh#if __XSI_VISIBLE
17611568Sjkh/* XXX XSI requires pollution from <sys/wait.h> here.  We'd rather not. */
17721710Sjkh/* long	 a64l(const char *); */
17811568Sjkhdouble	 drand48(void);
17920518Sjkh/* char	*ecvt(double, int, int * __restrict, int * __restrict); */
18021710Sjkhdouble	 erand48(unsigned short[3]);
18130345Sjkh/* char	*fcvt(double, int, int * __restrict, int * __restrict); */
18217164Sjkh/* char	*gcvt(double, int, int * __restrict, int * __restrict); */
18321792Sjkh#ifndef _GETSUBOPT_DECLARED
18417404Sjkhint	 getsubopt(char **, char *const *, char **);
18511568Sjkh#define	_GETSUBOPT_DECLARED
18611568Sjkh#endif
18711568Sjkhint	 grantpt(int);
18811568Sjkhchar	*initstate(unsigned long /* XSI requires u_int */, char *, long);
18911568Sjkhlong	 jrand48(unsigned short[3]);
19011568Sjkh/* char	*l64a(long); */
19111568Sjkhvoid	 lcong48(unsigned short[7]);
19217164Sjkhlong	 lrand48(void);
19317164Sjkh#ifndef _MKSTEMP_DECLARED
19417164Sjkhint	 mkstemp(char *);
19517164Sjkh#define	_MKSTEMP_DECLARED
19611568Sjkh#endif
19717164Sjkh#ifndef _MKTEMP_DECLARED
19817164Sjkhchar	*mktemp(char *);
19917164Sjkh#define	_MKTEMP_DECLARED
20017164Sjkh#endif
20117164Sjkhlong	 mrand48(void);
20217164Sjkhlong	 nrand48(unsigned short[3]);
20317164Sjkhint	 posix_openpt(int);
20417164Sjkhchar	*ptsname(int);
20517164Sjkhint	 putenv(const char *);
20617164Sjkhlong	 random(void);
20734733Sjkhchar	*realpath(const char *, char resolved_path[]);
20817164Sjkhunsigned short
20917164Sjkh	*seed48(unsigned short[3]);
21017164Sjkh#ifndef _SETKEY_DECLARED
21111568Sjkhint	 setkey(const char *);
21217164Sjkh#define	_SETKEY_DECLARED
21321726Sjkh#endif
21417164Sjkhchar	*setstate(/* const */ char *);
21517164Sjkhvoid	 srand48(long);
21617164Sjkhvoid	 srandom(unsigned long);
21721726Sjkhint	 unlockpt(int);
21817164Sjkh#endif /* __XSI_VISIBLE */
21917164Sjkh
22017164Sjkh#if __BSD_VISIBLE
22117164Sjkhextern const char *_malloc_options;
22220518Sjkhextern void (*_malloc_message)(const char *, const char *, const char *,
22317164Sjkh	    const char *);
22421792Sjkh
22517164Sjkhvoid	*alloca(size_t);		/* built-in for gcc */
22617164Sjkh__uint32_t
22717164Sjkh	 arc4random(void);
22843685Sjkhvoid	 arc4random_addrandom(unsigned char *dat, int datlen);
22917164Sjkhvoid	 arc4random_stir(void);
23017164Sjkhchar	*getbsize(int *, long *);
23117164Sjkh					/* getcap(3) functions */
23217164Sjkhchar	*cgetcap(char *, const char *, int);
23321792Sjkhint	 cgetclose(void);
23417164Sjkhint	 cgetent(char **, char **, const char *);
23511568Sjkhint	 cgetfirst(char **, char **);
23622072Sjkhint	 cgetmatch(const char *, const char *);
23722072Sjkhint	 cgetnext(char **, char **);
23822072Sjkhint	 cgetnum(char *, const char *, long *);
23921713Sjkhint	 cgetset(const char *);
24021713Sjkhint	 cgetstr(char *, const char *, char **);
24121713Sjkhint	 cgetustr(char *, const char *, char **);
24221713Sjkh
24321792Sjkhint	 daemon(int, int);
24421713Sjkhchar	*devname(int, int);
24521713Sjkhint	 getloadavg(double [], int);
24634811Sjkh__const char *
24721713Sjkh	 getprogname(void);
24811568Sjkh
24912127Sjkhint	 heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
25030345Sjkhint	 mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
25111568Sjkhvoid	 qsort_r(void *, size_t, size_t, void *,
25230345Sjkh	    int (*)(void *, const void *, const void *));
25330345Sjkhint	 radixsort(const unsigned char **, int, const unsigned char *,
25430345Sjkh	    unsigned);
25530345Sjkhvoid    *reallocf(void *, size_t);
25611568Sjkhvoid	 setprogname(const char *);
25711568Sjkhint	 sradixsort(const unsigned char **, int, const unsigned char *,
25818830Sjkh	    unsigned);
25911568Sjkhvoid	 sranddev(void);
26011568Sjkhvoid	 srandomdev(void);
26130345Sjkh
26230345Sjkh/* Deprecated interfaces, to be removed in FreeBSD 6.0. */
26330345Sjkh__int64_t
26411568Sjkh	 strtoq(const char *, char **, int);
26511568Sjkh__uint64_t
26630345Sjkh	 strtouq(const char *, char **, int);
26711568Sjkh#endif /* __BSD_VISIBLE */
26830018Sjkh__END_DECLS
26916975Sjkh
27020208Sjkh#endif /* !_STDLIB_H_ */
27121792Sjkh