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