diff --git a/headers/posix/div_t.h b/headers/posix/div_t.h index a40d6c05e3..fe479f3f49 100644 --- a/headers/posix/div_t.h +++ b/headers/posix/div_t.h @@ -1,5 +1,8 @@ #ifndef _DIV_T_H_ #define _DIV_T_H_ +/* +** Distributed under the terms of the OpenBeOS License. +*/ typedef struct { int quot; @@ -11,4 +14,9 @@ typedef struct { long rem; } ldiv_t; +typedef struct { + long long quot; + long long rem; +} lldiv_t; + #endif /* _DIV_T_H_ */ diff --git a/headers/posix/stdlib.h b/headers/posix/stdlib.h index d55821af47..acd6a020df 100644 --- a/headers/posix/stdlib.h +++ b/headers/posix/stdlib.h @@ -1,14 +1,14 @@ #ifndef _STDLIB_H_ #define _STDLIB_H_ +/* +** Distributed under the terms of the OpenBeOS License. +*/ +#include #include -#include -#include #include #include #include -#include -#include #define RAND_MAX 0x7fffffff @@ -17,81 +17,143 @@ #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 +/* random data structures (for thread-safe random numbers) */ +struct random_data { + int *fptr; + int *rptr; + int *state; + int rand_type; + int rand_deg; + int rand_sep; + int *end_ptr; +}; + +struct drand48_data { + unsigned short int x[3]; + unsigned short int a[3]; + unsigned short int c; + unsigned short int old_x[3]; + int init; +}; + #ifdef __cplusplus extern "C" { #endif -double atof(const char *str); -int atoi(const char *str); -long atol(const char *str); +/* memory allocation (see malloc.h for additional defines & prototypes) */ +extern void *calloc(size_t nmemb, size_t size); +extern void free(void *pointer); +extern void *malloc(size_t size); +extern void *realloc(void * ptr, size_t size); -unsigned int atoui(const char *num); -unsigned long atoul(const char *num); +/* process termination */ +extern void abort(void); +extern int atexit(void (*func)(void)); +extern int atfork(void (*func)(void)); +extern void exit(int); -double strtod (const char *str, char **end); -long strtol (const char *str, char **end, int base); -unsigned long strtoul (const char *str, char **end, int base); -long long strtoll (const char *str, char **end, int base); -unsigned long long strtoull(const char *str, char **end, int base); +/* misc functions */ +extern char *realpath(const char *path, char *resolved); -void srand(unsigned int seed); -int rand(void); -int rand_r(unsigned int *seed); -void srandom(unsigned int seed); -int random(void); -char *initstate(unsigned int seed, char *state, int n); -char *setstate(char *state); +extern int daemon(int nochdir, int noclose); +extern int system(const char *command); -void *calloc(size_t nmemb, size_t size); -void free(void *ptr); -void *malloc(size_t size); -void *realloc(void * ptr, size_t size); +extern char *mktemp(char *name); +extern int mkstemp(char *template); -void abort(void); -int atexit(void (*func)(void)); -int atfork(void (*func)(void)); -void exit(int); +/* environment variables */ +extern char **environ; +extern char *getenv(const char *name); +extern int putenv(const char *string); +extern int setenv(char const *name, char const *value, int rewrite); +extern void unsetenv(const char *name); -extern char **environ; -char *getenv(const char *name); -int putenv(const char *string); -int setenv(char const *, char const *, int); +/* ASCII string to number conversion */ +extern double atof(const char *string); +extern int atoi(const char *string); +extern long atol(const char *string); +extern long long int atoll(const char *string); +extern unsigned int atoui(const char *string); +extern unsigned long atoul(const char *string); -char *realpath(const char *path, char *resolved); +extern double strtod(const char *string, char **end); +extern long strtol(const char *string, char **end, int base); +extern unsigned long strtoul(const char *string, char **end, int base); +extern long long strtoll(const char *string, char **end, int base); +extern unsigned long long strtoull(const char *string, char **end, int base); -int system(const char *command); +// ToDo: we will eventually need this +//extern int __ctype_get_mb_cur_max(void); -char *mktemp(char *name); +/* random number generation */ +extern void srand(unsigned int seed); +extern int rand(void); +extern int random(void); +extern void srandom(unsigned int seed); +extern int rand_r(unsigned int *seed); +extern int random_r(struct random_data *data, int *result); +extern int srandom_r(unsigned int seed, struct random_data *data); +extern char *initstate(unsigned int seed, char *state, size_t size); +extern char *setstate(char *state); +extern int initstate_r(unsigned int seed, void *stateBuffer, + size_t stateLength, struct random_data *data); +extern int setstate_r(void *stateBuffer, struct random_data *data); +extern double drand48(void); +extern double erand48(unsigned short int xsubi[3]); +extern long lrand48(void); +extern long nrand48(unsigned short int xsubi[3]); +extern long mrand48(void); +extern long jrand48(unsigned short int xsubi[3]); +extern void srand48(long int seed); +extern unsigned short *seed48(unsigned short int seed16v[3]); +extern void lcong48(unsigned short int param[7]); -typedef int (*_compare_function)(const void*, const void*); +extern int drand48_r(struct drand48_data *data, double *result); +extern int erand48_r(unsigned short int xsubi[3], + struct drand48_data *data, double *result); +extern int lrand48_r(struct drand48_data *data, long int *result); +extern int nrand48_r(unsigned short int xsubi[3], + struct drand48_data *data, long int *result); +extern int mrand48_r(struct drand48_data *data, long int *result); +extern int jrand48_r(unsigned short int xsubi[3], + struct drand48_data *data, long int *result); +extern int srand48_r(long int seed, struct drand48_data *data); +extern int seed48_r(unsigned short int seed16v[3], + struct drand48_data *data); +extern int lcong48_r(unsigned short int param[7], + struct drand48_data *data); -void *bsearch(const void*, const void*, size_t, size_t, _compare_function); -int heapsort(void *, size_t , size_t , _compare_function); -int mergesort(void *, size_t, size_t, _compare_function); -void qsort(void *, size_t, size_t, _compare_function); -int radixsort(u_char const **, int, u_char const *, u_int); -int sradixsort(u_char const **, int, u_char const *, u_int); +/* search and sort functions */ +typedef int (*_compare_function)(const void *, const void *); -int abs(int n); -long labs(long n); +extern void *bsearch(const void *key, const void *base, size_t numElements, + size_t sizeOfElement, _compare_function); +extern int heapsort(void *base, size_t numElements, size_t sizeOfElement, _compare_function); +extern int mergesort(void *base, size_t numElements, size_t sizeOfElement, _compare_function); +extern void qsort(void *base, size_t numElements, size_t sizeOfElement, _compare_function); +extern int radixsort(u_char const **base, int numElements, u_char const *table, u_int endByte); +extern int sradixsort(u_char const **base, int numElements, u_char const *table, u_int endByte); -div_t div(int numerator, int denominator); -ldiv_t ldiv(long numerator, long denominator); +/* misc math functions */ +extern int abs(int number); +extern long labs(long number); +extern long long llabs(long long number); -int mblen(const char *s, size_t n); -int mbtowc(wchar_t *pwc, const char *s, size_t n); -int wctomb(char *s, wchar_t wchar); -size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n); -size_t wcstombs(char *s, const wchar_t *pwcs, size_t n); +extern div_t div(int numerator, int denominator); +extern ldiv_t ldiv(long numerator, long denominator); +extern lldiv_t lldiv(long long numerator, long long denominator); -int64 strtoq(const char *, char **, int); -uint64 strtouq(const char *, char **, int); +/* wide & multibyte string functions */ +extern int mblen(const char *string, size_t maxSize); +extern int mbtowc(wchar_t *pwc, const char *string, size_t maxSize); +extern int wctomb(char *string, wchar_t wchar); +extern size_t mbstowcs(wchar_t *pwcs, const char *string, size_t maxSize); +extern size_t wcstombs(char *string, const wchar_t *pwcs, size_t maxSize); #ifdef __cplusplus } /* extern "C" */ #endif - #endif /* _STDLIB_H_ */