1/* 2 * Copyright 2002-2012 Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _STDLIB_H_ 6#define _STDLIB_H_ 7 8 9#include <alloca.h> 10#include <div_t.h> 11#include <limits.h> 12#include <stddef.h> 13#include <sys/types.h> 14#include <wchar_t.h> 15 16#define RAND_MAX 0x7fffffff 17#define MB_CUR_MAX (__ctype_get_mb_cur_max()) 18 19#define EXIT_SUCCESS 0 20#define EXIT_FAILURE 1 21 22/* random data structures (for thread-safe random numbers) */ 23struct random_data { 24 int *fptr; 25 int *rptr; 26 int *state; 27 int rand_type; 28 int rand_deg; 29 int rand_sep; 30 int *end_ptr; 31}; 32 33struct drand48_data { 34 unsigned short int x[3]; 35 unsigned short int a[3]; 36 unsigned short int c; 37 unsigned short int old_x[3]; 38 int init; 39}; 40 41 42#ifdef __cplusplus 43extern "C" { 44#endif 45 46/* memory allocation (see malloc.h for additional defines & prototypes) */ 47extern void *calloc(size_t numElements, size_t size); 48extern void free(void *pointer); 49extern void *malloc(size_t size); 50extern int posix_memalign(void **_pointer, size_t alignment, size_t size); 51extern void *realloc(void *oldPointer, size_t newSize); 52 53/* process termination */ 54extern void abort(void); 55extern int atexit(void (*func)(void)); 56extern int atfork(void (*func)(void)); 57extern void exit(int); 58extern void _Exit(int); 59 60/* misc functions */ 61extern char *realpath(const char *path, char *resolved); 62 63extern int system(const char *command); 64 65extern char *mktemp(char *name); 66extern char *mkdtemp(char *templat); 67extern int mkstemp(char *templat); 68 69extern char *ecvt(double value, int digits, int *_decimalPoint, int *_sign); 70extern char *fcvt(double value, int precision, int *_decimalPoint, 71 int *_sign); 72extern char *gcvt(double value, int digits, char *buffer); 73 74/* environment variables */ 75extern char **environ; 76extern int clearenv(void); 77extern char *getenv(const char *name); 78extern int putenv(const char *string); 79extern int setenv(char const *name, char const *value, int rewrite); 80extern int unsetenv(const char *name); 81 82/* ASCII string to number conversion */ 83extern double atof(const char *string); 84extern int atoi(const char *string); 85extern long atol(const char *string); 86extern long long int atoll(const char *string); 87extern unsigned int atoui(const char *string); 88extern unsigned long atoul(const char *string); 89 90extern double strtod(const char *string, char **end); 91extern long double strtold(const char *string, char **end); 92extern float strtof(const char *string, char **end); 93extern long strtol(const char *string, char **end, int base); 94extern unsigned long strtoul(const char *string, char **end, int base); 95extern long long strtoll(const char *string, char **end, int base); 96extern unsigned long long strtoull(const char *string, char **end, int base); 97 98/* random number generation */ 99extern void srand(unsigned int seed); 100extern int rand(void); 101extern int random(void); 102extern void srandom(unsigned int seed); 103extern int rand_r(unsigned int *seed); 104extern int random_r(struct random_data *data, int *result); 105extern int srandom_r(unsigned int seed, struct random_data *data); 106extern char *initstate(unsigned int seed, char *state, size_t size); 107extern char *setstate(char *state); 108extern int initstate_r(unsigned int seed, void *stateBuffer, 109 size_t stateLength, struct random_data *data); 110extern int setstate_r(void *stateBuffer, struct random_data *data); 111 112extern double drand48(void); 113extern double erand48(unsigned short int xsubi[3]); 114extern long lrand48(void); 115extern long nrand48(unsigned short int xsubi[3]); 116extern long mrand48(void); 117extern long jrand48(unsigned short int xsubi[3]); 118extern void srand48(long int seed); 119extern unsigned short *seed48(unsigned short int seed16v[3]); 120extern void lcong48(unsigned short int param[7]); 121 122extern int drand48_r(struct drand48_data *data, double *result); 123extern int erand48_r(unsigned short int xsubi[3], 124 struct drand48_data *data, double *result); 125extern int lrand48_r(struct drand48_data *data, long int *result); 126extern int nrand48_r(unsigned short int xsubi[3], 127 struct drand48_data *data, long int *result); 128extern int mrand48_r(struct drand48_data *data, long int *result); 129extern int jrand48_r(unsigned short int xsubi[3], 130 struct drand48_data *data, long int *result); 131extern int srand48_r(long int seed, struct drand48_data *data); 132extern int seed48_r(unsigned short int seed16v[3], 133 struct drand48_data *data); 134extern int lcong48_r(unsigned short int param[7], 135 struct drand48_data *data); 136 137/* search and sort functions */ 138typedef int (*_compare_function)(const void *, const void *); 139 140extern void *bsearch(const void *key, const void *base, size_t numElements, 141 size_t sizeOfElement, _compare_function); 142extern int heapsort(void *base, size_t numElements, size_t sizeOfElement, 143 _compare_function); 144extern int mergesort(void *base, size_t numElements, size_t sizeOfElement, 145 _compare_function); 146extern void qsort(void *base, size_t numElements, size_t sizeOfElement, 147 _compare_function); 148extern int radixsort(u_char const **base, int numElements, 149 u_char const *table, u_int endByte); 150extern int sradixsort(u_char const **base, int numElements, 151 u_char const *table, u_int endByte); 152 153/* misc math functions */ 154extern int abs(int number); 155extern long labs(long number); 156extern long long llabs(long long number); 157 158extern div_t div(int numerator, int denominator); 159extern ldiv_t ldiv(long numerator, long denominator); 160extern lldiv_t lldiv(long long numerator, long long denominator); 161 162/* wide & multibyte string functions */ 163extern int mblen(const char *string, size_t maxSize); 164extern int mbtowc(wchar_t *pwc, const char *string, size_t maxSize); 165extern int wctomb(char *string, wchar_t wchar); 166extern size_t mbstowcs(wchar_t *pwcs, const char *string, size_t maxSize); 167extern size_t wcstombs(char *string, const wchar_t *pwcs, size_t maxSize); 168 169/* crypt */ 170extern void setkey(const char *key); 171 172/* sub-option parsing */ 173extern int getsubopt(char **optionp, char * const *keylistp, 174 char **valuep); 175 176/* pty functions */ 177extern int posix_openpt(int openFlags); 178extern int grantpt(int masterFD); 179extern char* ptsname(int masterFD); 180extern int unlockpt(int masterFD); 181 182/* internal accessor to value for MB_CUR_MAX */ 183extern unsigned short __ctype_get_mb_cur_max(void); 184 185#ifdef __cplusplus 186} /* extern "C" */ 187#endif 188 189#endif /* _STDLIB_H_ */ 190