X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/3d9156a7a519a5e3aa1b92e9d9d4b991f1aed7ff..refs/heads/master:/include/stdlib.h diff --git a/include/stdlib.h b/include/stdlib.h index 849fe52..fdc95ad 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000, 2002 - 2008 Apple Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * @@ -58,40 +58,29 @@ #ifndef _STDLIB_H_ #define _STDLIB_H_ +#include #include + #include <_types.h> #if !defined(_ANSI_SOURCE) +#ifndef UNIFDEF_DRIVERKIT #include -#if !defined(_POSIX_C_SOURCE) +#endif /* UNIFDEF_DRIVERKIT */ +#if (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) #include -#endif /* !_POSIX_C_SOURCE */ +#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ #endif /* !_ANSI_SOURCE */ -#ifndef _SIZE_T -#define _SIZE_T /* DO NOT REMOVE THIS COMMENT: fixincludes needs to see: * _GCC_SIZE_T */ -typedef __darwin_size_t size_t; -#endif +#include -#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) -#ifndef _CT_RUNE_T -#define _CT_RUNE_T -typedef __darwin_ct_rune_t ct_rune_t; -#endif +#if !defined(_ANSI_SOURCE) && (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) +#include +#include +#endif /* !_ANSI_SOURCE && (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ -#ifndef _RUNE_T -#define _RUNE_T -typedef __darwin_rune_t rune_t; -#endif -#endif - -#ifndef __cplusplus -#ifndef _WCHAR_T -#define _WCHAR_T -typedef __darwin_wchar_t wchar_t; -#endif /* _WCHAR_T */ -#endif /* __cplusplus */ +#include typedef struct { int quot; /* quotient */ @@ -110,12 +99,12 @@ typedef struct { } lldiv_t; #endif /* !__DARWIN_NO_LONG_LONG */ -#ifndef NULL -#define NULL __DARWIN_NULL -#endif /* ! NULL */ +#include +#ifndef UNIFDEF_DRIVERKIT #define EXIT_FAILURE 1 #define EXIT_SUCCESS 0 +#endif /* UNIFDEF_DRIVERKIT */ #define RAND_MAX 0x7fffffff @@ -135,15 +124,26 @@ extern int __mb_cur_max; #endif /* _USE_EXTENDED_LOCALES_ */ #endif /* MB_CUR_MAX */ -#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) \ +#if !defined(_ANSI_SOURCE) && (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) \ && defined(_USE_EXTENDED_LOCALES_) && !defined(MB_CUR_MAX_L) #define MB_CUR_MAX_L(x) (___mb_cur_max_l(x)) #endif +//Begin-Libc +#include "libc_private.h" +/* f must be a literal string */ +#define LIBC_ABORT(f,...) abort_report_np("%s:%s:%u: " f, __FILE__, __func__, __LINE__, ## __VA_ARGS__) +//End-Libc + +#ifndef UNIFDEF_DRIVERKIT +#include +#endif /* UNIFDEF_DRIVERKIT */ __BEGIN_DECLS -void abort(void) __dead2; +void abort(void) __cold __dead2; int abs(int) __pure2; -int atexit(void (*)(void)); +#ifndef UNIFDEF_DRIVERKIT +int atexit(void (* _Nonnull)(void)); +#endif /* UNIFDEF_DRIVERKIT */ double atof(const char *); int atoi(const char *); long atol(const char *); @@ -151,13 +151,17 @@ long atol(const char *); long long atoll(const char *); #endif /* !__DARWIN_NO_LONG_LONG */ -void *bsearch(const void *, const void *, size_t, - size_t, int (*)(const void *, const void *)); -void *calloc(size_t, size_t); +void *bsearch(const void *__key, const void *__base, size_t __nel, + size_t __width, int (* _Nonnull __compar)(const void *, const void *)); +#ifndef UNIFDEF_DRIVERKIT +/* calloc is now declared in _malloc.h */ +#endif /* UNIFDEF_DRIVERKIT */ div_t div(int, int) __pure2; +#ifndef UNIFDEF_DRIVERKIT void exit(int) __dead2; -void free(void *); +/* free is now declared in _malloc.h */ char *getenv(const char *); +#endif /* UNIFDEF_DRIVERKIT */ long labs(long) __pure2; ldiv_t ldiv(long, long) __pure2; #if !__DARWIN_NO_LONG_LONG @@ -165,40 +169,71 @@ long long llabs(long long); lldiv_t lldiv(long long, long long); #endif /* !__DARWIN_NO_LONG_LONG */ -void *malloc(size_t); -int mblen(const char *, size_t); +#ifndef UNIFDEF_DRIVERKIT +/* malloc is now declared in _malloc.h */ +#endif /* UNIFDEF_DRIVERKIT */ +int mblen(const char *__s, size_t __n); size_t mbstowcs(wchar_t * __restrict , const char * __restrict, size_t); int mbtowc(wchar_t * __restrict, const char * __restrict, size_t); -void qsort(void *, size_t, size_t, - int (*)(const void *, const void *)); -int rand(void); -void *realloc(void *, size_t); -void srand(unsigned); -double strtod(const char *, char **); -float strtof(const char *, char **); -long strtol(const char *, char **, int); +#ifndef UNIFDEF_DRIVERKIT +/* posix_memalign is now declared in _malloc.h */ +#endif /* UNIFDEF_DRIVERKIT */ +void qsort(void *__base, size_t __nel, size_t __width, + int (* _Nonnull __compar)(const void *, const void *)); +#ifndef UNIFDEF_DRIVERKIT +int rand(void) __swift_unavailable("Use arc4random instead."); +/* realloc is now declared in _malloc.h */ +void srand(unsigned) __swift_unavailable("Use arc4random instead."); +#endif /* UNIFDEF_DRIVERKIT */ +double strtod(const char *, char **) __DARWIN_ALIAS(strtod); +float strtof(const char *, char **) __DARWIN_ALIAS(strtof); +long strtol(const char *__str, char **__endptr, int __base); long double - strtold(const char *, char **) __DARWIN_LDBL_COMPAT(strtold); + strtold(const char *, char **); #if !__DARWIN_NO_LONG_LONG long long - strtoll(const char *, char **, int); + strtoll(const char *__str, char **__endptr, int __base); #endif /* !__DARWIN_NO_LONG_LONG */ unsigned long - strtoul(const char *, char **, int); + strtoul(const char *__str, char **__endptr, int __base); #if !__DARWIN_NO_LONG_LONG unsigned long long - strtoull(const char *, char **, int); + strtoull(const char *__str, char **__endptr, int __base); #endif /* !__DARWIN_NO_LONG_LONG */ -int system(const char *); +#ifndef UNIFDEF_DRIVERKIT +//Begin-Libc +#ifndef LIBC_ALIAS_SYSTEM +//End-Libc + +#if TARGET_OS_IPHONE +#define __swift_unavailable_on(osx_msg, ios_msg) __swift_unavailable(ios_msg) +#else +#define __swift_unavailable_on(osx_msg, ios_msg) __swift_unavailable(osx_msg) +#endif + +__swift_unavailable_on("Use posix_spawn APIs or NSTask instead.", "Process spawning is unavailable") +__API_AVAILABLE(macos(10.0)) __IOS_PROHIBITED +__WATCHOS_PROHIBITED __TVOS_PROHIBITED +int system(const char *) __DARWIN_ALIAS_C(system); +//Begin-Libc +#else /* LIBC_ALIAS_SYSTEM */ +int system(const char *) LIBC_ALIAS_C(system); +#endif /* !LIBC_ALIAS_SYSTEM */ +//End-Libc + +#undef __swift_unavailable_on +#endif /* UNIFDEF_DRIVERKIT */ + size_t wcstombs(char * __restrict, const wchar_t * __restrict, size_t); int wctomb(char *, wchar_t); +#ifndef UNIFDEF_DRIVERKIT #ifndef _ANSI_SOURCE void _Exit(int) __dead2; long a64l(const char *); double drand48(void); char *ecvt(double, int, int *__restrict, int *__restrict); /* LEGACY */ -double erand48(unsigned short[3]); +double erand48(unsigned short[3]); char *fcvt(double, int, int *__restrict, int *__restrict); /* LEGACY */ char *gcvt(double, int, char *); /* LEGACY */ int getsubopt(char **, char * const *, char **); @@ -208,24 +243,74 @@ char *initstate(unsigned, char *, size_t); /* no __DARWIN_ALIAS needed */ #else /* !__DARWIN_UNIX03 */ char *initstate(unsigned long, char *, long); #endif /* __DARWIN_UNIX03 */ -long jrand48(unsigned short[3]); +long jrand48(unsigned short[3]) __swift_unavailable("Use arc4random instead."); char *l64a(long); void lcong48(unsigned short[7]); -long lrand48(void); +long lrand48(void) __swift_unavailable("Use arc4random instead."); char *mktemp(char *); int mkstemp(char *); -long mrand48(void); -long nrand48(unsigned short[3]); +long mrand48(void) __swift_unavailable("Use arc4random instead."); +long nrand48(unsigned short[3]) __swift_unavailable("Use arc4random instead."); int posix_openpt(int); char *ptsname(int); + +#if (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) +int ptsname_r(int fildes, char *buffer, size_t buflen) __API_AVAILABLE(macos(10.13.4), ios(11.3), tvos(11.3), watchos(4.3)); +#endif + +//Begin-Libc +#ifndef LIBC_ALIAS_PUTENV +//End-Libc int putenv(char *) __DARWIN_ALIAS(putenv); -long random(void); -char *realpath(const char *, char *resolved_path); +//Begin-Libc +#else /* LIBC_ALIAS_PUTENV */ +int putenv(char *) LIBC_ALIAS(putenv); +#endif /* !LIBC_ALIAS_PUTENV */ +//End-Libc +long random(void) __swift_unavailable("Use arc4random instead."); +int rand_r(unsigned *) __swift_unavailable("Use arc4random instead."); +//Begin-Libc +#ifdef __LIBC__ +#ifndef LIBC_ALIAS_REALPATH +char *realpath(const char * __restrict, char * __restrict) __DARWIN_EXTSN(realpath); +#else /* LIBC_ALIAS_REALPATH */ +#ifdef VARIANT_DARWINEXTSN +char *realpath(const char * __restrict, char * __restrict) LIBC_EXTSN(realpath); +#else /* !VARIANT_DARWINEXTSN */ +char *realpath(const char * __restrict, char * __restrict) LIBC_ALIAS(realpath); +#endif /* VARIANT_DARWINEXTSN */ +#endif /* !LIBC_ALIAS_REALPATH */ +#else /* !__LIBC__ */ +//End-Libc +#if (__DARWIN_UNIX03 && !defined(_POSIX_C_SOURCE)) || defined(_DARWIN_C_SOURCE) || defined(_DARWIN_BETTER_REALPATH) +char *realpath(const char * __restrict, char * __restrict) __DARWIN_EXTSN(realpath); +#else /* (!__DARWIN_UNIX03 || _POSIX_C_SOURCE) && !_DARWIN_C_SOURCE && !_DARWIN_BETTER_REALPATH */ +char *realpath(const char * __restrict, char * __restrict) __DARWIN_ALIAS(realpath); +#endif /* (__DARWIN_UNIX03 && _POSIX_C_SOURCE) || _DARWIN_C_SOURCE || _DARWIN_BETTER_REALPATH */ +//Begin-Libc +#endif /* __LIBC__ */ +//End-Libc unsigned short *seed48(unsigned short[3]); -int setenv(const char *, const char *, int) __DARWIN_ALIAS(setenv); +//Begin-Libc +#ifndef LIBC_ALIAS_SETENV +//End-Libc +int setenv(const char * __name, const char * __value, int __overwrite) __DARWIN_ALIAS(setenv); +//Begin-Libc +#else /* LIBC_ALIAS_SETENV */ +int setenv(const char * __name, const char * __value, int __overwrite) LIBC_ALIAS(setenv); +#endif /* !LIBC_ALIAS_SETENV */ +//End-Libc #if __DARWIN_UNIX03 +//Begin-Libc +#ifndef LIBC_ALIAS_SETKEY +//End-Libc void setkey(const char *) __DARWIN_ALIAS(setkey); +//Begin-Libc +#else /* LIBC_ALIAS_SETKEY */ +void setkey(const char *) LIBC_ALIAS(setkey); +#endif /* !LIBC_ALIAS_SETKEY */ +//End-Libc #else /* !__DARWIN_UNIX03 */ int setkey(const char *); #endif /* __DARWIN_UNIX03 */ @@ -238,30 +323,50 @@ void srandom(unsigned long); #endif /* __DARWIN_UNIX03 */ int unlockpt(int); #if __DARWIN_UNIX03 +//Begin-Libc +#ifndef LIBC_ALIAS_UNSETENV +//End-Libc int unsetenv(const char *) __DARWIN_ALIAS(unsetenv); +//Begin-Libc +#else /* LIBC_ALIAS_UNSETENV */ +int unsetenv(const char *) LIBC_ALIAS(unsetenv); +#endif /* !LIBC_ALIAS_UNSETENV */ +//End-Libc #else /* !__DARWIN_UNIX03 */ void unsetenv(const char *); #endif /* __DARWIN_UNIX03 */ -#endif +#endif /* !_ANSI_SOURCE */ +#endif /* UNIFDEF_DRIVERKIT */ -#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) +#if !defined(_ANSI_SOURCE) && (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) #include +#ifndef UNIFDEF_DRIVERKIT +#include +#include +#endif /* UNIFDEF_DRIVERKIT */ +#include <_types/_uint32_t.h> -#ifndef _DEV_T -typedef __darwin_dev_t dev_t; -#define _DEV_T -#endif - -#ifndef _MODE_T -typedef __darwin_mode_t mode_t; -#define _MODE_T -#endif - -u_int32_t - arc4random(void); -void arc4random_addrandom(unsigned char *dat, int datlen); +uint32_t arc4random(void); +#ifndef UNIFDEF_DRIVERKIT +void arc4random_addrandom(unsigned char * /*dat*/, int /*datlen*/) + __OSX_DEPRECATED(10.0, 10.12, "use arc4random_stir") + __IOS_DEPRECATED(2.0, 10.0, "use arc4random_stir") + __TVOS_DEPRECATED(2.0, 10.0, "use arc4random_stir") + __WATCHOS_DEPRECATED(1.0, 3.0, "use arc4random_stir"); +#endif /* UNIFDEF_DRIVERKIT */ +void arc4random_buf(void * __buf, size_t __nbytes) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); void arc4random_stir(void); +uint32_t + arc4random_uniform(uint32_t __upper_bound) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); +#ifdef __BLOCKS__ +#ifndef UNIFDEF_DRIVERKIT +int atexit_b(void (^ _Nonnull)(void)) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); +#endif /* UNIFDEF_DRIVERKIT */ +void *bsearch_b(const void *__key, const void *__base, size_t __nel, + size_t __width, int (^ _Nonnull __compar)(const void *, const void *)) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); +#endif /* __BLOCKS__ */ +#ifndef UNIFDEF_DRIVERKIT /* getcap(3) functions */ char *cgetcap(char *, const char *, int); int cgetclose(void); @@ -274,37 +379,87 @@ int cgetset(const char *); int cgetstr(char *, const char *, char **); int cgetustr(char *, const char *, char **); -int daemon(int, int); +int daemon(int, int) __DARWIN_1050(daemon) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_0, __MAC_10_5, __IPHONE_2_0, __IPHONE_2_0, "Use posix_spawn APIs instead.") __WATCHOS_PROHIBITED __TVOS_PROHIBITED; char *devname(dev_t, mode_t); char *devname_r(dev_t, mode_t, char *buf, int len); char *getbsize(int *, long *); int getloadavg(double [], int); const char *getprogname(void); - -int heapsort(void *, size_t, size_t, - int (*)(const void *, const void *)); -int mergesort(void *, size_t, size_t, - int (*)(const void *, const void *)); -void qsort_r(void *, size_t, size_t, void *, - int (*)(void *, const void *, const void *)); -int radixsort(const unsigned char **, int, const unsigned char *, - unsigned); void setprogname(const char *); -int sradixsort(const unsigned char **, int, const unsigned char *, - unsigned); +#endif /* UNIFDEF_DRIVERKIT */ + +#ifdef __BLOCKS__ +#if __has_attribute(noescape) +#define __sort_noescape __attribute__((__noescape__)) +#else +#define __sort_noescape +#endif +#endif /* __BLOCKS__ */ + +int heapsort(void *__base, size_t __nel, size_t __width, + int (* _Nonnull __compar)(const void *, const void *)); +#ifdef __BLOCKS__ +int heapsort_b(void *__base, size_t __nel, size_t __width, + int (^ _Nonnull __compar)(const void *, const void *) __sort_noescape) + __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); +#endif /* __BLOCKS__ */ +int mergesort(void *__base, size_t __nel, size_t __width, + int (* _Nonnull __compar)(const void *, const void *)); +#ifdef __BLOCKS__ +int mergesort_b(void *__base, size_t __nel, size_t __width, + int (^ _Nonnull __compar)(const void *, const void *) __sort_noescape) + __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); +#endif /* __BLOCKS__ */ +#ifndef UNIFDEF_DRIVERKIT +void psort(void *__base, size_t __nel, size_t __width, + int (* _Nonnull __compar)(const void *, const void *)) + __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); +#ifdef __BLOCKS__ +void psort_b(void *__base, size_t __nel, size_t __width, + int (^ _Nonnull __compar)(const void *, const void *) __sort_noescape) + __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); +#endif /* __BLOCKS__ */ +void psort_r(void *__base, size_t __nel, size_t __width, void *, + int (* _Nonnull __compar)(void *, const void *, const void *)) + __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); +#endif /* UNIFDEF_DRIVERKIT */ +#ifdef __BLOCKS__ +void qsort_b(void *__base, size_t __nel, size_t __width, + int (^ _Nonnull __compar)(const void *, const void *) __sort_noescape) + __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); +#endif /* __BLOCKS__ */ +void qsort_r(void *__base, size_t __nel, size_t __width, void *, + int (* _Nonnull __compar)(void *, const void *, const void *)); +int radixsort(const unsigned char **__base, int __nel, const unsigned char *__table, + unsigned __endbyte); +int rpmatch(const char *) + __API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)); +int sradixsort(const unsigned char **__base, int __nel, const unsigned char *__table, + unsigned __endbyte); +#ifndef UNIFDEF_DRIVERKIT void sranddev(void); void srandomdev(void); -int rand_r(unsigned *); -void *reallocf(void *, size_t); +void *reallocf(void *__ptr, size_t __size) __alloc_size(2); +long long + strtonum(const char *__numstr, long long __minval, long long __maxval, const char **__errstrp) + __API_AVAILABLE(macos(10.16), ios(14.0), tvos(14.0), watchos(7.0)); +#endif /* UNIFDEF_DRIVERKIT */ #if !__DARWIN_NO_LONG_LONG long long - strtoq(const char *, char **, int); + strtoq(const char *__str, char **__endptr, int __base); unsigned long long - strtouq(const char *, char **, int); + strtouq(const char *__str, char **__endptr, int __base); #endif /* !__DARWIN_NO_LONG_LONG */ +#ifndef UNIFDEF_DRIVERKIT extern char *suboptarg; /* getsubopt(3) external variable */ -void *valloc(size_t); +/* valloc is now declared in _malloc.h */ +#endif /* UNIFDEF_DRIVERKIT */ +#endif /* !_ANSI_SOURCE && !_POSIX_SOURCE */ + +/* Poison the following routines if -fshort-wchar is set */ +#if !defined(__cplusplus) && defined(__WCHAR_MAX__) && __WCHAR_MAX__ <= 0xffffU +#pragma GCC poison mbstowcs mbtowc wcstombs wctomb #endif __END_DECLS