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