williamr@2: /*- williamr@2: * Copyright (c) 1990, 1993 williamr@2: williamr@2: * The Regents of the University of California. All rights reserved. williamr@2: * williamr@2: * Redistribution and use in source and binary forms, with or without williamr@2: * modification, are permitted provided that the following conditions williamr@2: * are met: williamr@2: * 1. Redistributions of source code must retain the above copyright williamr@2: * notice, this list of conditions and the following disclaimer. williamr@2: * 2. Redistributions in binary form must reproduce the above copyright williamr@2: * notice, this list of conditions and the following disclaimer in the williamr@2: * documentation and/or other materials provided with the distribution. williamr@2: * 4. Neither the name of the University nor the names of its contributors williamr@2: * may be used to endorse or promote products derived from this software williamr@2: * without specific prior written permission. williamr@2: * williamr@2: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND williamr@2: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE williamr@2: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE williamr@2: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE williamr@2: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL williamr@2: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS williamr@2: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) williamr@2: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT williamr@2: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY williamr@2: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF williamr@2: * SUCH DAMAGE. williamr@2: * williamr@2: * @(#)stdlib.h 8.5 (Berkeley) 5/19/95 williamr@2: * $FreeBSD: src/include/stdlib.h,v 1.57 2005/01/09 03:55:12 tjr Exp $ williamr@4: * Portions Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).All rights reserved. williamr@2: */ williamr@2: williamr@2: #ifndef _STDLIB_H_ williamr@2: #define _STDLIB_H_ williamr@2: williamr@2: //--- williamr@2: #ifdef __cplusplus williamr@2: #include williamr@2: williamr@2: extern "C" { williamr@2: #endif williamr@2: williamr@2: //--- williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: #include <_ansi.h> williamr@2: williamr@2: #if __BSD_VISIBLE williamr@2: #ifndef _RUNE_T_DECLARED williamr@2: typedef __rune_t rune_t; williamr@2: #define _RUNE_T_DECLARED williamr@2: #endif williamr@2: #endif williamr@2: williamr@2: #ifndef _SIZE_T_DECLARED williamr@2: typedef __size_t size_t; williamr@2: #define _SIZE_T_DECLARED williamr@2: #endif williamr@2: williamr@2: #ifndef __SYMBIAN32__ williamr@2: #ifndef __cplusplus williamr@2: #ifndef _WCHAR_T_DECLARED williamr@2: typedef __wchar_t wchar_t; williamr@2: #define _WCHAR_T_DECLARED williamr@2: #endif //_WCHAR_T_DECLARED williamr@2: #endif //__cplusplus williamr@2: #else williamr@2: //C++ built-in wchar data type which doesn't clash with the definition of wchar williamr@2: #if !defined _WCHAR_T_DECLARED && defined __cplusplus && defined __WINSCW__ williamr@2: #if __option(wchar_type) williamr@2: #define _WCHAR_T_DECLARED williamr@2: #endif //__option (wchar_type) williamr@2: #endif //__WINSCW__ williamr@2: williamr@2: #if !defined _WCHAR_T_DECLARED && !defined __wchar_t_defined williamr@2: #if defined __cplusplus williamr@2: #if defined __WINSCW__ williamr@2: typedef unsigned short int wchar_t; williamr@2: #define _WCHAR_T_DECLARED williamr@2: #endif // __WINSCW__ williamr@2: #else williamr@2: typedef unsigned short int wchar_t; williamr@2: #define _WCHAR_T_DECLARED williamr@2: #endif // __cplusplus williamr@2: #endif // __wchar_t_defined williamr@2: #endif //__SYMBIAN32__ williamr@2: williamr@2: typedef struct { williamr@2: int quot; /* quotient */ williamr@2: int rem; /* remainder */ williamr@2: } div_t; williamr@2: williamr@2: typedef struct { williamr@2: long quot; williamr@2: long rem; williamr@2: } ldiv_t; williamr@2: williamr@2: #define EXIT_FAILURE 1 williamr@2: #define EXIT_SUCCESS 0 williamr@2: williamr@2: #define RAND_MAX 0x7fffffff williamr@2: williamr@2: #ifndef __SYMBIAN32__ williamr@2: extern int __mb_cur_max; williamr@2: #define MB_CUR_MAX __mb_cur_max williamr@2: #else williamr@2: #define MB_CUR_MAX 4 williamr@2: #endif williamr@2: williamr@2: //for armv5 williamr@2: #define inline __inline williamr@2: williamr@2: __BEGIN_DECLS williamr@2: IMPORT_C void abort(void) __dead2; williamr@2: IMPORT_C int abs(int) __pure2; williamr@2: IMPORT_C int atexit(void (*)(void)); williamr@2: IMPORT_C double atof(const char *); williamr@2: IMPORT_C int atoi(const char *); williamr@2: IMPORT_C long atol(const char *); williamr@2: IMPORT_C void *bsearch(const void *, const void *, size_t, williamr@2: size_t, int (*)(const void *, const void *)); williamr@2: IMPORT_C void *calloc(size_t, size_t); williamr@2: IMPORT_C div_t div(int, int) __pure2; williamr@2: IMPORT_C void exit(int) __dead2; williamr@2: IMPORT_C void free(void *); williamr@2: IMPORT_C char *getenv(const char *); williamr@2: IMPORT_C long labs(long) __pure2; williamr@2: IMPORT_C ldiv_t ldiv(long, long) __pure2; williamr@2: IMPORT_C void *malloc(size_t); williamr@2: IMPORT_C int mblen(const char *, size_t); williamr@2: IMPORT_C size_t mbstowcs(wchar_t * __restrict , const char * __restrict, size_t); williamr@2: IMPORT_C int mbtowc(wchar_t * __restrict, const char * __restrict, size_t); williamr@2: IMPORT_C void qsort(void *, size_t, size_t, williamr@2: int (*)(const void *, const void *)); williamr@2: IMPORT_C int rand(void); williamr@2: IMPORT_C void *realloc(void *, size_t); williamr@2: IMPORT_C void srand(unsigned); williamr@2: IMPORT_C double strtod(const char * __restrict, char ** __restrict); williamr@2: williamr@2: IMPORT_C williamr@2: float strtof(const char * __restrict, char ** __restrict); williamr@2: williamr@2: IMPORT_C long strtol(const char * __restrict, char ** __restrict, int); williamr@2: williamr@2: IMPORT_C williamr@2: long double williamr@2: strtold(const char * __restrict, char ** __restrict); williamr@2: williamr@2: IMPORT_C williamr@2: unsigned long williamr@2: strtoul(const char * __restrict, char ** __restrict, int); williamr@2: williamr@2: IMPORT_C int system(const char *); williamr@2: IMPORT_C int wctomb(char *, wchar_t); williamr@2: IMPORT_C size_t wcstombs(char * __restrict, const wchar_t * __restrict, size_t); williamr@2: williamr@2: /* williamr@2: * Functions added in C99 which we make conditionally available in the williamr@2: * BSD^C89 namespace if the compiler supports `long long'. williamr@2: * The #if test is more complicated than it ought to be because williamr@2: * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long' williamr@2: * is not supported in the compilation environment (which therefore means williamr@2: * that it can't really be ISO C99). williamr@2: * williamr@2: * (The only other extension made by C99 in thie header is _Exit().) williamr@2: */ williamr@2: #if __ISO_C_VISIBLE >= 1999 williamr@2: #ifdef __LONG_LONG_SUPPORTED williamr@2: /* LONGLONG */ williamr@2: typedef struct { williamr@2: long long quot; williamr@2: long long rem; williamr@2: } lldiv_t; williamr@2: williamr@2: /* LONGLONG */ williamr@2: IMPORT_C williamr@2: long long williamr@2: atoll(const char *); williamr@2: williamr@2: /* LONGLONG */ williamr@2: IMPORT_C williamr@2: long long williamr@2: llabs(long long) __pure2; williamr@2: williamr@2: /* LONGLONG */ williamr@2: IMPORT_C lldiv_t lldiv(long long, long long) __pure2; williamr@2: williamr@2: /* LONGLONG */ williamr@2: IMPORT_C williamr@2: long long williamr@2: strtoll(const char * __restrict, char ** __restrict, int); williamr@2: williamr@2: /* LONGLONG */ williamr@2: IMPORT_C williamr@2: unsigned long long williamr@2: strtoull(const char * __restrict, char ** __restrict, int); williamr@2: #endif /* __LONG_LONG_SUPPORTED */ williamr@2: williamr@2: IMPORT_C void _Exit(int) __dead2; williamr@2: #endif /* __ISO_C_VISIBLE >= 1999 */ williamr@2: williamr@2: /* williamr@2: * Extensions made by POSIX relative to C. We don't know yet which edition williamr@2: * of POSIX made these extensions, so assume they've always been there until williamr@2: * research can be done. williamr@2: */ williamr@2: #if __POSIX_VISIBLE /* >= ??? */ williamr@2: IMPORT_C int setenv(const char *, const char *, int); williamr@2: IMPORT_C void unsetenv(const char *); williamr@2: #endif williamr@2: williamr@2: /* williamr@2: * The only changes to the XSI namespace in revision 6 were the deletion williamr@2: * of the ttyslot() and valloc() functions, which FreeBSD never declared williamr@2: * in this header. For revision 7, ecvt(), fcvt(), and gcvt(), which williamr@2: * FreeBSD also does not have, and mktemp(), are to be deleted. williamr@2: */ williamr@2: #if __XSI_VISIBLE williamr@2: /* XXX XSI requires pollution from here. We'd rather not. */ williamr@2: /* long a64l(const char *); */ williamr@2: #ifndef _MKSTEMP_DECLARED williamr@2: IMPORT_C int mkstemp(char *); williamr@4: williamr@4: #if defined(SYMBIAN_OE_LARGE_FILE_SUPPORT) && !defined(SYMBIAN_OE_NO_LFS) williamr@4: #define mkstemp64 mkstemp williamr@4: #endif /* SYMBIAN_OE_LARGE_FILE_SUPPORT && !SYMBIAN_OE_NO_LFS */ williamr@4: williamr@2: #define _MKSTEMP_DECLARED williamr@2: #endif williamr@2: IMPORT_C int putenv(const char *); williamr@2: IMPORT_C long random(void); williamr@2: IMPORT_C void srandom(unsigned long); williamr@2: IMPORT_C char *realpath(const char *, char resolved_path[]); williamr@2: IMPORT_C char *setstate(/* const */ char *); williamr@2: IMPORT_C char *initstate(unsigned long /* XSI requires u_int */, char *, long); williamr@2: #ifndef _SETKEY_DECLARED williamr@2: int setkey(const char *); williamr@2: #define _SETKEY_DECLARED williamr@2: #endif williamr@2: #endif /* __XSI_VISIBLE */ williamr@2: williamr@2: #if __BSD_VISIBLE williamr@2: extern const char *_malloc_options; williamr@2: extern void (*_malloc_message)(const char *, const char *, const char *, williamr@2: const char *); williamr@2: williamr@2: williamr@2: __uint32_t williamr@2: arc4random(void); williamr@2: IMPORT_C const char * getprogname(void); williamr@2: IMPORT_C void *reallocf(void *, size_t); williamr@2: IMPORT_C void setprogname(const char *); williamr@2: williamr@2: #ifdef __SYMBIAN_COMPILE_UNUSED__ williamr@2: void sranddev(void); williamr@2: void srandomdev(void); williamr@2: #endif williamr@2: /* Deprecated interfaces, to be removed in FreeBSD 6.0. */ williamr@2: IMPORT_C williamr@2: __int64_t williamr@2: strtoq(const char *, char **, int); williamr@2: IMPORT_C williamr@2: __uint64_t williamr@2: strtouq(const char *, char **, int); williamr@2: williamr@2: extern char *suboptarg; /* getsubopt(3) external variable */ williamr@2: #endif /* __BSD_VISIBLE */ williamr@2: williamr@2: #ifdef __SYMBIAN32__ /* For libcrypt library */ williamr@2: #ifndef _SETKEY_DECLARED williamr@2: void setkey(const char *key); williamr@2: #endif williamr@2: #endif williamr@2: __END_DECLS williamr@2: williamr@2: //--- williamr@2: #ifdef __cplusplus williamr@2: } williamr@2: #endif williamr@2: //--- williamr@2: williamr@2: #endif /* !_STDLIB_H_ */