stdlib.h revision 232971
11539Srgrimes/*- 21539Srgrimes * Copyright (c) 1990, 1993 31539Srgrimes * The Regents of the University of California. All rights reserved. 41539Srgrimes * 51539Srgrimes * Redistribution and use in source and binary forms, with or without 61539Srgrimes * modification, are permitted provided that the following conditions 71539Srgrimes * are met: 81539Srgrimes * 1. Redistributions of source code must retain the above copyright 91539Srgrimes * notice, this list of conditions and the following disclaimer. 101539Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 111539Srgrimes * notice, this list of conditions and the following disclaimer in the 121539Srgrimes * documentation and/or other materials provided with the distribution. 13203964Simp * 3. Neither the name of the University nor the names of its contributors 141539Srgrimes * may be used to endorse or promote products derived from this software 151539Srgrimes * without specific prior written permission. 161539Srgrimes * 171539Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 181539Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 191539Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 201539Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 211539Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 221539Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 231539Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 241539Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 251539Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 261539Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 271539Srgrimes * SUCH DAMAGE. 281539Srgrimes * 2923657Speter * @(#)stdlib.h 8.5 (Berkeley) 5/19/95 3055031Sbde * $FreeBSD: head/include/stdlib.h 232971 2012-03-14 14:39:07Z theraven $ 311539Srgrimes */ 321539Srgrimes 331539Srgrimes#ifndef _STDLIB_H_ 347865Sbde#define _STDLIB_H_ 351539Srgrimes 3633861Sbde#include <sys/cdefs.h> 37123257Smarcel#include <sys/_null.h> 38102227Smike#include <sys/_types.h> 3933861Sbde 40103728Swollman#if __BSD_VISIBLE 41102227Smike#ifndef _RUNE_T_DECLARED 42102227Smiketypedef __rune_t rune_t; 43102227Smike#define _RUNE_T_DECLARED 4415483Sbde#endif 4515483Sbde#endif 4615483Sbde 47102227Smike#ifndef _SIZE_T_DECLARED 48102227Smiketypedef __size_t size_t; 49102227Smike#define _SIZE_T_DECLARED 501539Srgrimes#endif 511539Srgrimes 5299640Sobrien#ifndef __cplusplus 53102227Smike#ifndef _WCHAR_T_DECLARED 54102227Smiketypedef __wchar_t wchar_t; 55102227Smike#define _WCHAR_T_DECLARED 561539Srgrimes#endif 5799640Sobrien#endif 581539Srgrimes 591539Srgrimestypedef struct { 60103766Sbde int quot; /* quotient */ 61103766Sbde int rem; /* remainder */ 621539Srgrimes} div_t; 631539Srgrimes 641539Srgrimestypedef struct { 65103766Sbde long quot; 66103766Sbde long rem; 671539Srgrimes} ldiv_t; 681539Srgrimes 691539Srgrimes#define EXIT_FAILURE 1 701539Srgrimes#define EXIT_SUCCESS 0 711539Srgrimes 721539Srgrimes#define RAND_MAX 0x7fffffff 731539Srgrimes 74227753Stheraven__BEGIN_DECLS 751539Srgrimesextern int __mb_cur_max; 76227753Stheravenextern int ___mb_cur_max(void); 77227753Stheraven#define MB_CUR_MAX (___mb_cur_max()) 781539Srgrimes 79228330Stheraven_Noreturn void abort(void); 8093032Simpint abs(int) __pure2; 8193032Simpint atexit(void (*)(void)); 8293032Simpdouble atof(const char *); 8393032Simpint atoi(const char *); 8493032Simplong atol(const char *); 8593032Simpvoid *bsearch(const void *, const void *, size_t, 8693032Simp size_t, int (*)(const void *, const void *)); 87187961Sdasvoid *calloc(size_t, size_t) __malloc_like; 8893032Simpdiv_t div(int, int) __pure2; 89228330Stheraven_Noreturn void exit(int); 9093032Simpvoid free(void *); 9193032Simpchar *getenv(const char *); 9293032Simplong labs(long) __pure2; 9393032Simpldiv_t ldiv(long, long) __pure2; 94187961Sdasvoid *malloc(size_t) __malloc_like; 95103728Swollmanint mblen(const char *, size_t); 96103766Sbdesize_t mbstowcs(wchar_t * __restrict , const char * __restrict, size_t); 97103728Swollmanint mbtowc(wchar_t * __restrict, const char * __restrict, size_t); 9893032Simpvoid qsort(void *, size_t, size_t, 9993032Simp int (*)(const void *, const void *)); 10093032Simpint rand(void); 10193032Simpvoid *realloc(void *, size_t); 10293032Simpvoid srand(unsigned); 103103766Sbdedouble strtod(const char * __restrict, char ** __restrict); 104112163Sdasfloat strtof(const char * __restrict, char ** __restrict); 105103766Sbdelong strtol(const char * __restrict, char ** __restrict, int); 106112163Sdaslong double 107112163Sdas strtold(const char * __restrict, char ** __restrict); 1081539Srgrimesunsigned long 109103012Stjr strtoul(const char * __restrict, char ** __restrict, int); 11093032Simpint system(const char *); 11193032Simpint wctomb(char *, wchar_t); 112103012Stjrsize_t wcstombs(char * __restrict, const wchar_t * __restrict, size_t); 1131539Srgrimes 114103728Swollman/* 115103728Swollman * Functions added in C99 which we make conditionally available in the 116103728Swollman * BSD^C89 namespace if the compiler supports `long long'. 117103728Swollman * The #if test is more complicated than it ought to be because 118103728Swollman * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long' 119103728Swollman * is not supported in the compilation environment (which therefore means 120103728Swollman * that it can't really be ISO C99). 121103728Swollman * 122103728Swollman * (The only other extension made by C99 in thie header is _Exit().) 123103728Swollman */ 124103728Swollman#if __ISO_C_VISIBLE >= 1999 125103728Swollman#ifdef __LONG_LONG_SUPPORTED 126103728Swollman/* LONGLONG */ 127103728Swollmantypedef struct { 128103728Swollman long long quot; 129103728Swollman long long rem; 130103728Swollman} lldiv_t; 13169201Sphk 132103728Swollman/* LONGLONG */ 133103728Swollmanlong long 134103728Swollman atoll(const char *); 135103728Swollman/* LONGLONG */ 136103728Swollmanlong long 137103728Swollman llabs(long long) __pure2; 138103728Swollman/* LONGLONG */ 139103728Swollmanlldiv_t lldiv(long long, long long) __pure2; 140103728Swollman/* LONGLONG */ 141103766Sbdelong long 142103766Sbde strtoll(const char * __restrict, char ** __restrict, int); 143103728Swollman/* LONGLONG */ 144103728Swollmanunsigned long long 145103766Sbde strtoull(const char * __restrict, char ** __restrict, int); 146103728Swollman#endif /* __LONG_LONG_SUPPORTED */ 147103728Swollman 148228330Stheraven_Noreturn void _Exit(int); 149103728Swollman#endif /* __ISO_C_VISIBLE >= 1999 */ 150103728Swollman 151103728Swollman/* 152229807Sed * If we're in a mode greater than C99, expose C11 functions. 153228322Stheraven */ 154232971Stheraven#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L 155229848Sedvoid * aligned_alloc(size_t, size_t); 156229807Sedint at_quick_exit(void (*)(void)); 157228901Sed_Noreturn void 158228901Sed quick_exit(int); 159228901Sed#endif /* __ISO_C_VISIBLE >= 2011 */ 160228322Stheraven/* 161103728Swollman * Extensions made by POSIX relative to C. We don't know yet which edition 162103728Swollman * of POSIX made these extensions, so assume they've always been there until 163103728Swollman * research can be done. 164103728Swollman */ 165103728Swollman#if __POSIX_VISIBLE /* >= ??? */ 166154250Sjasoneint posix_memalign(void **, size_t, size_t); /* (ADV) */ 167103728Swollmanint rand_r(unsigned *); /* (TSF) */ 168206997Skibchar *realpath(const char * __restrict, char * __restrict); 16993032Simpint setenv(const char *, const char *, int); 170171195Sscfint unsetenv(const char *); 171103728Swollman#endif 1721539Srgrimes 173189349Sdas#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE 174189349Sdasint getsubopt(char **, char *const *, char **); 175189349Sdas#ifndef _MKDTEMP_DECLARED 176189349Sdaschar *mkdtemp(char *); 177189349Sdas#define _MKDTEMP_DECLARED 178189349Sdas#endif 179189349Sdas#ifndef _MKSTEMP_DECLARED 180189349Sdasint mkstemp(char *); 181189349Sdas#define _MKSTEMP_DECLARED 182189349Sdas#endif 183189349Sdas#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */ 184189349Sdas 185103728Swollman/* 186103728Swollman * The only changes to the XSI namespace in revision 6 were the deletion 187103728Swollman * of the ttyslot() and valloc() functions, which FreeBSD never declared 188103728Swollman * in this header. For revision 7, ecvt(), fcvt(), and gcvt(), which 189103728Swollman * FreeBSD also does not have, and mktemp(), are to be deleted. 190103728Swollman */ 191103728Swollman#if __XSI_VISIBLE 192103728Swollman/* XXX XSI requires pollution from <sys/wait.h> here. We'd rather not. */ 193153707Strhodeslong a64l(const char *); 19493032Simpdouble drand48(void); 195103766Sbde/* char *ecvt(double, int, int * __restrict, int * __restrict); */ 19693032Simpdouble erand48(unsigned short[3]); 197103766Sbde/* char *fcvt(double, int, int * __restrict, int * __restrict); */ 198103766Sbde/* char *gcvt(double, int, int * __restrict, int * __restrict); */ 199108574Sjmallettint grantpt(int); 200103728Swollmanchar *initstate(unsigned long /* XSI requires u_int */, char *, long); 20193032Simplong jrand48(unsigned short[3]); 202153707Strhodeschar *l64a(long); 20393032Simpvoid lcong48(unsigned short[7]); 20493032Simplong lrand48(void); 205189782Sdas#if !defined(_MKTEMP_DECLARED) && (__BSD_VISIBLE || __XSI_VISIBLE <= 600) 206103728Swollmanchar *mktemp(char *); 207103766Sbde#define _MKTEMP_DECLARED 208103728Swollman#endif 20993032Simplong mrand48(void); 21093032Simplong nrand48(unsigned short[3]); 211108574Sjmallettint posix_openpt(int); 212108574Sjmallettchar *ptsname(int); 213171195Sscfint putenv(char *); 214103728Swollmanlong random(void); 2157865Sbdeunsigned short 21693032Simp *seed48(unsigned short[3]); 217103728Swollman#ifndef _SETKEY_DECLARED 218103728Swollmanint setkey(const char *); 219103728Swollman#define _SETKEY_DECLARED 220103728Swollman#endif 221103728Swollmanchar *setstate(/* const */ char *); 22293032Simpvoid srand48(long); 223103728Swollmanvoid srandom(unsigned long); 224108574Sjmallettint unlockpt(int); 225103728Swollman#endif /* __XSI_VISIBLE */ 2264749Sats 227103728Swollman#if __BSD_VISIBLE 228103728Swollmanextern const char *_malloc_options; 229103766Sbdeextern void (*_malloc_message)(const char *, const char *, const char *, 230103766Sbde const char *); 231103728Swollman 232116397Sdes/* 233116397Sdes * The alloca() function can't be implemented in C, and on some 234116397Sdes * platforms it can't be implemented at all as a callable function. 235116397Sdes * The GNU C compiler provides a built-in alloca() which we can use; 236116397Sdes * in all other cases, provide a prototype, mainly to pacify various 237116397Sdes * incarnations of lint. On platforms where alloca() is not in libc, 238116397Sdes * programs which use it will fail to link when compiled with non-GNU 239116397Sdes * compilers. 240116397Sdes */ 241116831Sobrien#if __GNUC__ >= 2 || defined(__INTEL_COMPILER) 242116831Sobrien#undef alloca /* some GNU bits try to get cute and define this on their own */ 243116397Sdes#define alloca(sz) __builtin_alloca(sz) 244116831Sobrien#elif defined(lint) 245116831Sobrienvoid *alloca(size_t); 246116397Sdes#endif 247116397Sdes 248189820Sdasvoid abort2(const char *, int, void **) __dead2; 24941927Sdt__uint32_t 25093032Simp arc4random(void); 251180658Sachevoid arc4random_addrandom(unsigned char *, int); 252180658Sachevoid arc4random_buf(void *, size_t); 25393032Simpvoid arc4random_stir(void); 254180689Sache__uint32_t 255180689Sache arc4random_uniform(__uint32_t); 256108445Sobrienchar *getbsize(int *, long *); 257103728Swollman /* getcap(3) functions */ 25893032Simpchar *cgetcap(char *, const char *, int); 25993032Simpint cgetclose(void); 26093032Simpint cgetent(char **, char **, const char *); 26193032Simpint cgetfirst(char **, char **); 26293032Simpint cgetmatch(const char *, const char *); 26393032Simpint cgetnext(char **, char **); 26493032Simpint cgetnum(char *, const char *, long *); 26593032Simpint cgetset(const char *); 26693032Simpint cgetstr(char *, const char *, char **); 26793032Simpint cgetustr(char *, const char *, char **); 2681539Srgrimes 26993032Simpint daemon(int, int); 270150052Sstefanfchar *devname(__dev_t, __mode_t); 271150052Sstefanfchar *devname_r(__dev_t, __mode_t, char *, int); 272188497Sedchar *fdevname(int); 273188497Sedchar *fdevname_r(int, char *, int); 27493032Simpint getloadavg(double [], int); 275228468Sedconst char * 27693032Simp getprogname(void); 2771539Srgrimes 27893032Simpint heapsort(void *, size_t, size_t, int (*)(const void *, const void *)); 279153707Strhodesint l64a_r(long, char *, int); 28093032Simpint mergesort(void *, size_t, size_t, int (*)(const void *, const void *)); 281103164Swollmanvoid qsort_r(void *, size_t, size_t, void *, 282103164Swollman int (*)(void *, const void *, const void *)); 28393032Simpint radixsort(const unsigned char **, int, const unsigned char *, 28493032Simp unsigned); 28593032Simpvoid *reallocf(void *, size_t); 286139922Stjrint rpmatch(const char *); 28793032Simpvoid setprogname(const char *); 288103164Swollmanint sradixsort(const unsigned char **, int, const unsigned char *, 289103164Swollman unsigned); 29093032Simpvoid sranddev(void); 29193032Simpvoid srandomdev(void); 292156707Sandrelong long 293156707Sandre strtonum(const char *, long long, long long, const char **); 294103728Swollman 295103728Swollman/* Deprecated interfaces, to be removed in FreeBSD 6.0. */ 296103766Sbde__int64_t 297103766Sbde strtoq(const char *, char **, int); 29841927Sdt__uint64_t 29993032Simp strtouq(const char *, char **, int); 300126136Sache 301126136Sacheextern char *suboptarg; /* getsubopt(3) external variable */ 302103728Swollman#endif /* __BSD_VISIBLE */ 3031539Srgrimes__END_DECLS 3041539Srgrimes 3057865Sbde#endif /* !_STDLIB_H_ */ 306