stdlib.h revision 180658
1145840Smlaier/*- 2126353Smlaier * Copyright (c) 1990, 1993 3126353Smlaier * The Regents of the University of California. All rights reserved. 4126353Smlaier * 5126353Smlaier * Redistribution and use in source and binary forms, with or without 6126353Smlaier * modification, are permitted provided that the following conditions 7126353Smlaier * are met: 8126353Smlaier * 1. Redistributions of source code must retain the above copyright 9126353Smlaier * notice, this list of conditions and the following disclaimer. 10126353Smlaier * 2. Redistributions in binary form must reproduce the above copyright 11126353Smlaier * notice, this list of conditions and the following disclaimer in the 12126353Smlaier * documentation and/or other materials provided with the distribution. 13126353Smlaier * 3. All advertising materials mentioning features or use of this software 14126353Smlaier * must display the following acknowledgement: 15126353Smlaier * This product includes software developed by the University of 16126353Smlaier * California, Berkeley and its contributors. 17126353Smlaier * 4. Neither the name of the University nor the names of its contributors 18126353Smlaier * may be used to endorse or promote products derived from this software 19127082Sobrien * without specific prior written permission. 20127082Sobrien * 21127082Sobrien * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22126353Smlaier * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23126353Smlaier * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24126353Smlaier * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25126353Smlaier * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26126353Smlaier * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27126353Smlaier * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28126353Smlaier * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29126353Smlaier * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30126353Smlaier * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31126353Smlaier * SUCH DAMAGE. 32126353Smlaier * 33126353Smlaier * @(#)stdlib.h 8.5 (Berkeley) 5/19/95 34126353Smlaier * $FreeBSD: head/include/stdlib.h 180658 2008-07-21 14:03:04Z ache $ 35126353Smlaier */ 36126353Smlaier 37126353Smlaier#ifndef _STDLIB_H_ 38126353Smlaier#define _STDLIB_H_ 39298133Sloos 40126353Smlaier#include <sys/cdefs.h> 41126353Smlaier#include <sys/_null.h> 42298115Sloos#include <sys/_types.h> 43126353Smlaier 44126353Smlaier#if __BSD_VISIBLE 45126353Smlaier#ifndef _RUNE_T_DECLARED 46126353Smlaiertypedef __rune_t rune_t; 47126353Smlaier#define _RUNE_T_DECLARED 48126353Smlaier#endif 49126353Smlaier#endif 50126353Smlaier 51298091Sloos#ifndef _SIZE_T_DECLARED 52298133Sloostypedef __size_t size_t; 53126353Smlaier#define _SIZE_T_DECLARED 54126353Smlaier#endif 55126353Smlaier 56126353Smlaier#ifndef __cplusplus 57126353Smlaier#ifndef _WCHAR_T_DECLARED 58126353Smlaiertypedef __wchar_t wchar_t; 59126353Smlaier#define _WCHAR_T_DECLARED 60126353Smlaier#endif 61126353Smlaier#endif 62126353Smlaier 63126353Smlaiertypedef struct { 64126353Smlaier int quot; /* quotient */ 65126353Smlaier int rem; /* remainder */ 66126353Smlaier} div_t; 67126353Smlaier 68126353Smlaiertypedef struct { 69126353Smlaier long quot; 70126353Smlaier long rem; 71126353Smlaier} ldiv_t; 72126353Smlaier 73126353Smlaier#define EXIT_FAILURE 1 74126353Smlaier#define EXIT_SUCCESS 0 75126353Smlaier 76126353Smlaier#define RAND_MAX 0x7fffffff 77126353Smlaier 78126353Smlaierextern int __mb_cur_max; 79126353Smlaier#define MB_CUR_MAX __mb_cur_max 80223637Sbz 81126353Smlaier__BEGIN_DECLS 82298133Sloosvoid abort(void) __dead2; 83126353Smlaiervoid abort2(const char *, int, void **) __dead2; 84126353Smlaierint abs(int) __pure2; 85298091Sloosint atexit(void (*)(void)); 86126353Smlaierdouble atof(const char *); 87126353Smlaierint atoi(const char *); 88126353Smlaierlong atol(const char *); 89126353Smlaiervoid *bsearch(const void *, const void *, size_t, 90126353Smlaier size_t, int (*)(const void *, const void *)); 91126353Smlaiervoid *calloc(size_t, size_t); 92126353Smlaierdiv_t div(int, int) __pure2; 93130617Smlaiervoid exit(int) __dead2; 94126353Smlaiervoid free(void *); 95126353Smlaierchar *getenv(const char *); 96130617Smlaierlong labs(long) __pure2; 97126353Smlaierldiv_t ldiv(long, long) __pure2; 98127024Smlaiervoid *malloc(size_t); 99126355Smlaierint mblen(const char *, size_t); 100126355Smlaiersize_t mbstowcs(wchar_t * __restrict , const char * __restrict, size_t); 101126355Smlaierint mbtowc(wchar_t * __restrict, const char * __restrict, size_t); 102130617Smlaiervoid qsort(void *, size_t, size_t, 103130617Smlaier int (*)(const void *, const void *)); 104126353Smlaierint rand(void); 105126353Smlaiervoid *realloc(void *, size_t); 106145840Smlaiervoid srand(unsigned); 107145840Smlaierdouble strtod(const char * __restrict, char ** __restrict); 108130617Smlaierfloat strtof(const char * __restrict, char ** __restrict); 109130617Smlaierlong strtol(const char * __restrict, char ** __restrict, int); 110130617Smlaierlong double 111130617Smlaier strtold(const char * __restrict, char ** __restrict); 112130617Smlaierunsigned long 113130617Smlaier strtoul(const char * __restrict, char ** __restrict, int); 114130617Smlaierint system(const char *); 115126353Smlaierint wctomb(char *, wchar_t); 116130617Smlaiersize_t wcstombs(char * __restrict, const wchar_t * __restrict, size_t); 117126353Smlaier 118145840Smlaier/* 119126353Smlaier * Functions added in C99 which we make conditionally available in the 120126353Smlaier * BSD^C89 namespace if the compiler supports `long long'. 121126353Smlaier * The #if test is more complicated than it ought to be because 122145840Smlaier * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long' 123126353Smlaier * is not supported in the compilation environment (which therefore means 124130617Smlaier * that it can't really be ISO C99). 125130617Smlaier * 126130617Smlaier * (The only other extension made by C99 in thie header is _Exit().) 127177700Smlaier */ 128177700Smlaier#if __ISO_C_VISIBLE >= 1999 129177700Smlaier#ifdef __LONG_LONG_SUPPORTED 130177700Smlaier/* LONGLONG */ 131126353Smlaiertypedef struct { 132130617Smlaier long long quot; 133126353Smlaier long long rem; 134126353Smlaier} lldiv_t; 135126353Smlaier 136126353Smlaier/* LONGLONG */ 137126353Smlaierlong long 138126353Smlaier atoll(const char *); 139126353Smlaier/* LONGLONG */ 140126353Smlaierlong long 141126353Smlaier llabs(long long) __pure2; 142126353Smlaier/* LONGLONG */ 143126353Smlaierlldiv_t lldiv(long long, long long) __pure2; 144126353Smlaier/* LONGLONG */ 145126353Smlaierlong long 146126353Smlaier strtoll(const char * __restrict, char ** __restrict, int); 147126353Smlaier/* LONGLONG */ 148126353Smlaierunsigned long long 149126353Smlaier strtoull(const char * __restrict, char ** __restrict, int); 150126353Smlaier#endif /* __LONG_LONG_SUPPORTED */ 151126353Smlaier 152126353Smlaiervoid _Exit(int) __dead2; 153126353Smlaier#endif /* __ISO_C_VISIBLE >= 1999 */ 154126353Smlaier 155126353Smlaier/* 156126353Smlaier * Extensions made by POSIX relative to C. We don't know yet which edition 157126353Smlaier * of POSIX made these extensions, so assume they've always been there until 158126353Smlaier * research can be done. 159126353Smlaier */ 160126353Smlaier#if __POSIX_VISIBLE /* >= ??? */ 161126353Smlaierint posix_memalign(void **, size_t, size_t); /* (ADV) */ 162126353Smlaierint rand_r(unsigned *); /* (TSF) */ 163126353Smlaierint setenv(const char *, const char *, int); 164126353Smlaierint unsetenv(const char *); 165126353Smlaier#endif 166126353Smlaier 167126353Smlaier/* 168126353Smlaier * The only changes to the XSI namespace in revision 6 were the deletion 169126353Smlaier * of the ttyslot() and valloc() functions, which FreeBSD never declared 170177700Smlaier * in this header. For revision 7, ecvt(), fcvt(), and gcvt(), which 171298133Sloos * FreeBSD also does not have, and mktemp(), are to be deleted. 172177700Smlaier */ 173177700Smlaier#if __XSI_VISIBLE 174126353Smlaier/* XXX XSI requires pollution from <sys/wait.h> here. We'd rather not. */ 175177700Smlaierlong a64l(const char *); 176126353Smlaierdouble drand48(void); 177126353Smlaier/* char *ecvt(double, int, int * __restrict, int * __restrict); */ 178126353Smlaierdouble erand48(unsigned short[3]); 179126353Smlaier/* char *fcvt(double, int, int * __restrict, int * __restrict); */ 180126353Smlaier/* char *gcvt(double, int, int * __restrict, int * __restrict); */ 181126353Smlaierint getsubopt(char **, char *const *, char **); 182126353Smlaierint grantpt(int); 183126353Smlaierchar *initstate(unsigned long /* XSI requires u_int */, char *, long); 184126353Smlaierlong jrand48(unsigned short[3]); 185126353Smlaierchar *l64a(long); 186126353Smlaiervoid lcong48(unsigned short[7]); 187126353Smlaierlong lrand48(void); 188126353Smlaier#ifndef _MKSTEMP_DECLARED 189126353Smlaierint mkstemp(char *); 190126353Smlaier#define _MKSTEMP_DECLARED 191126353Smlaier#endif 192126353Smlaier#ifndef _MKTEMP_DECLARED 193177700Smlaierchar *mktemp(char *); 194223637Sbz#define _MKTEMP_DECLARED 195223637Sbz#endif 196177700Smlaierlong mrand48(void); 197177700Smlaierlong nrand48(unsigned short[3]); 198177700Smlaierint posix_openpt(int); 199177700Smlaierchar *ptsname(int); 200177700Smlaierint putenv(char *); 201177700Smlaierlong random(void); 202177700Smlaierchar *realpath(const char *, char resolved_path[]); 203223637Sbzunsigned short 204177700Smlaier *seed48(unsigned short[3]); 205177700Smlaier#ifndef _SETKEY_DECLARED 206126353Smlaierint setkey(const char *); 207130617Smlaier#define _SETKEY_DECLARED 208126353Smlaier#endif 209126353Smlaierchar *setstate(/* const */ char *); 210126353Smlaiervoid srand48(long); 211126353Smlaiervoid srandom(unsigned long); 212126353Smlaierint unlockpt(int); 213126353Smlaier#endif /* __XSI_VISIBLE */ 214126353Smlaier 215126353Smlaier#if __BSD_VISIBLE 216126353Smlaierextern const char *_malloc_options; 217126353Smlaierextern void (*_malloc_message)(const char *, const char *, const char *, 218126353Smlaier const char *); 219126353Smlaier 220126353Smlaier/* 221126353Smlaier * The alloca() function can't be implemented in C, and on some 222126353Smlaier * platforms it can't be implemented at all as a callable function. 223126353Smlaier * The GNU C compiler provides a built-in alloca() which we can use; 224126353Smlaier * in all other cases, provide a prototype, mainly to pacify various 225126353Smlaier * incarnations of lint. On platforms where alloca() is not in libc, 226126353Smlaier * programs which use it will fail to link when compiled with non-GNU 227126353Smlaier * compilers. 228126353Smlaier */ 229126353Smlaier#if __GNUC__ >= 2 || defined(__INTEL_COMPILER) 230126353Smlaier#undef alloca /* some GNU bits try to get cute and define this on their own */ 231126353Smlaier#define alloca(sz) __builtin_alloca(sz) 232126353Smlaier#elif defined(lint) 233126353Smlaiervoid *alloca(size_t); 234126353Smlaier#endif 235126353Smlaier 236126353Smlaier__uint32_t 237126353Smlaier arc4random(void); 238126353Smlaiervoid arc4random_addrandom(unsigned char *, int); 239126353Smlaiervoid arc4random_buf(void *, size_t); 240126353Smlaiervoid arc4random_stir(void); 241126353Smlaierchar *getbsize(int *, long *); 242126353Smlaier /* getcap(3) functions */ 243126353Smlaierchar *cgetcap(char *, const char *, int); 244126353Smlaierint cgetclose(void); 245126353Smlaierint cgetent(char **, char **, const char *); 246126353Smlaierint cgetfirst(char **, char **); 247126353Smlaierint cgetmatch(const char *, const char *); 248126353Smlaierint cgetnext(char **, char **); 249126353Smlaierint cgetnum(char *, const char *, long *); 250126353Smlaierint cgetset(const char *); 251126353Smlaierint cgetstr(char *, const char *, char **); 252126353Smlaierint cgetustr(char *, const char *, char **); 253126353Smlaier 254126353Smlaierint daemon(int, int); 255126353Smlaierchar *devname(__dev_t, __mode_t); 256126353Smlaierchar *devname_r(__dev_t, __mode_t, char *, int); 257126353Smlaierint getloadavg(double [], int); 258126353Smlaier__const char * 259126353Smlaier getprogname(void); 260126353Smlaier 261126353Smlaierint heapsort(void *, size_t, size_t, int (*)(const void *, const void *)); 262126353Smlaierint l64a_r(long, char *, int); 263126353Smlaierint mergesort(void *, size_t, size_t, int (*)(const void *, const void *)); 264126353Smlaiervoid qsort_r(void *, size_t, size_t, void *, 265126353Smlaier int (*)(void *, const void *, const void *)); 266126353Smlaierint radixsort(const unsigned char **, int, const unsigned char *, 267126353Smlaier unsigned); 268126353Smlaiervoid *reallocf(void *, size_t); 269126353Smlaierint rpmatch(const char *); 270126353Smlaiervoid setprogname(const char *); 271223637Sbzint sradixsort(const unsigned char **, int, const unsigned char *, 272223637Sbz unsigned); 273126353Smlaiervoid sranddev(void); 274126353Smlaiervoid srandomdev(void); 275126353Smlaierlong long 276126353Smlaier strtonum(const char *, long long, long long, const char **); 277126353Smlaier 278126353Smlaier/* Deprecated interfaces, to be removed in FreeBSD 6.0. */ 279126353Smlaier__int64_t 280126353Smlaier strtoq(const char *, char **, int); 281126353Smlaier__uint64_t 282126353Smlaier strtouq(const char *, char **, int); 283126353Smlaier 284126353Smlaierextern char *suboptarg; /* getsubopt(3) external variable */ 285126353Smlaier#endif /* __BSD_VISIBLE */ 286126353Smlaier__END_DECLS 287126353Smlaier 288126353Smlaier#endif /* !_STDLIB_H_ */ 289126353Smlaier