home *** CD-ROM | disk | FTP | other *** search
/ RISCWORLD 7 / RISCWORLD_VOL7.iso / Software / Issue4 / SDL / gcc346 / !gcc / include / unixlib / h / stdlib < prev    next >
Encoding:
Text File  |  2006-09-17  |  12.3 KB  |  392 lines

  1. /****************************************************************************
  2.  *
  3.  * $Source: /usr/local/cvsroot/gccsdk/unixlib/source/clib/stdlib.h,v $
  4.  * $Date: 2005/04/13 19:20:05 $
  5.  * $Revision: 1.18 $
  6.  * $State: Exp $
  7.  * $Author: nick $
  8.  *
  9.  ***************************************************************************/
  10.  
  11. /* ANSI Standard 4.10: General Utilities <stdlib.h>.  */
  12.  
  13. #ifndef __STDLIB_H
  14. #define __STDLIB_H
  15.  
  16. #ifndef __UNIXLIB_FEATURES_H
  17. #include <features.h>
  18. #endif
  19.  
  20. #define __need_size_t
  21. #define __need_wchar_t
  22. #define __need_NULL
  23. #include <stddef.h>
  24.  
  25. __BEGIN_DECLS
  26.  
  27. __BEGIN_NAMESPACE_STD
  28. /* Returned by `div'.  */
  29. typedef struct
  30.   {
  31.     int quot;    /* Quotient.  */
  32.     int rem;    /* Remainder.  */
  33.   } div_t;
  34.  
  35. /* Returned by `ldiv'.  */
  36. typedef struct
  37.   {
  38.     long int quot;    /* Quotient.  */
  39.     long int rem;    /* Remainder.  */
  40.   } ldiv_t;
  41. __END_NAMESPACE_STD
  42.  
  43. #if defined __USE_ISOC99
  44. __BEGIN_NAMESPACE_C99
  45. /* Returned by `lldiv'.  */
  46. __extension__
  47. typedef struct
  48.   {
  49.     long long int quot;    /* Quotient.  */
  50.     long long int rem;    /* Remainder.  */
  51.   } lldiv_t;
  52. __END_NAMESPACE_C99
  53. #endif
  54.  
  55. /* The largest number rand will return (same as INT_MAX).  */
  56. #define    RAND_MAX    2147483647
  57.  
  58.  
  59. /* Successful exit status.  */
  60. #define EXIT_SUCCESS 0
  61. /* Failing exit status.  */
  62. #define EXIT_FAILURE 1
  63.  
  64. /* Maximum length of a multibyte character in the current locale.  */
  65. #define    MB_CUR_MAX    1
  66.  
  67. __BEGIN_NAMESPACE_STD
  68. /* Abort execution and generate a core-dump.  */
  69. extern void abort (void) __attribute__ ((__noreturn__));
  70.  
  71. /* Register a function to be called when exit is called.  */
  72. extern int atexit (void (*__atexit_function) (void)) __THROW __nonnull ((1));
  73.  
  74. /* Terminate the program with status. Call all functions registerd
  75.    by atexit.  */
  76. extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
  77. __END_NAMESPACE_STD
  78.  
  79. #ifdef __USE_ISOC99
  80. __BEGIN_NAMESPACE_C99
  81. /* Terminate the program with status.  Don't call any functions
  82.    registerd by atexit.  */
  83. extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
  84. __END_NAMESPACE_C99
  85. #endif
  86.  
  87.  
  88. __BEGIN_NAMESPACE_STD
  89. /* Return the value of environment variable 'name'.  */
  90. extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
  91. __END_NAMESPACE_STD
  92.  
  93. #if defined __USE_BSD || defined __USE_XOPEN2K
  94. /* Set NAME to VALUE in the environment.
  95.    If REPLACE is nonzero, overwrite an existing value.  */
  96. extern int setenv (const char *__name, const char *__value, int __replace)
  97.      __THROW __nonnull ((2));
  98.  
  99. /* Remove NAME from the environment.  */
  100. extern int unsetenv (const char *__name) __THROW;
  101. #endif
  102.  
  103. #ifdef __USE_MISC
  104. /* The `clearenv' was planned to be added to POSIX.1 but probably
  105.    never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
  106.    for Fortran 77) requires this function.  */
  107. extern int clearenv (void) __THROW;
  108. #endif
  109.  
  110. #if defined __USE_SVID || defined __USE_XOPEN
  111. /* Put string, which is of the form "NAME=VALUE" in the environment.  */
  112. extern int putenv (char *__string) __THROW __nonnull ((1));
  113. #endif
  114.  
  115. __BEGIN_NAMESPACE_STD
  116. /* Execute the given line via the CLI.  */
  117. extern int system (const char *__command) __THROW __wur;
  118. __END_NAMESPACE_STD
  119.  
  120. #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  121. /* Canonicalise a filename */
  122. extern char *realpath (const char *__file_name, char *__resolved_name)
  123.      __THROW __wur;
  124. #endif
  125.  
  126. #ifdef __UNIXLIB_INTERNALS
  127.  
  128. /* Definitions for the atexit array of functions that are to be
  129.    called when the process calls exit.  ANSI requires a minimum
  130.    of 32, however C++ requires 33.  */
  131. #define __MAX_ATEXIT_FUNCTION_COUNT 33
  132.  
  133. extern void (*__atexit_function_array[__MAX_ATEXIT_FUNCTION_COUNT]) (void);
  134. extern int __atexit_function_count;
  135.  
  136. #endif  /* __UNIXLIB_INTERNALS */
  137.  
  138. __BEGIN_NAMESPACE_STD
  139. /* Allocate nmemb elements of size bytes each. Initialise
  140.    all members to zero.  */
  141. extern void *calloc (size_t __nmemb, size_t __size)
  142.      __THROW  __attribute_malloc__ __wur;
  143.  
  144. /* Free a block allocated by malloc, calloc or realloc.  */
  145. extern void free (void *__ptr) __THROW;
  146.  
  147. /* Allocate __size bytes of memory.  */
  148. extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
  149.  
  150. /* Re-allocate the previously malloc'd block, ptr, making the
  151.    new block size bytes.  */
  152. extern void *realloc (void *__ptr, size_t __size)
  153.      __THROW __attribute_malloc__ __wur;
  154. __END_NAMESPACE_STD
  155.  
  156.  
  157. #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  158. /* Allocate size bytes on a page boundary. The storage cannot be freed.  */
  159. extern void *valloc (size_t __bytes) __THROW __attribute_malloc__ __wur;
  160. #endif
  161.  
  162. /* src.c.alloc thinks these are in stdio.h, but that feels wrong ... */
  163. extern void *memalign (size_t __alignment,
  164.                size_t __bytes) __THROW __attribute_malloc__ __wur;
  165. extern void cfree (void *__mem) __THROW;
  166. extern int malloc_trim (size_t) __THROW;
  167.  
  168. __BEGIN_NAMESPACE_STD
  169. /* Return a random integer between 0 and 2^31 (System V interface).  */
  170. extern int rand (void) __THROW;
  171.  
  172. /* Seed the random number generator with the given number.  */
  173. extern void srand (long __seed) __THROW;
  174. __END_NAMESPACE_STD
  175.  
  176.  
  177. #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED || defined __USE_BSD
  178. # include <sys/types.h> /* we need int32_t... */
  179. /* Return a random integer between 0 and RAND_MAX (BSD interface).  */
  180. extern long int random (void) __THROW;
  181.  
  182. /* Seed the random number generator (BSD interface).  */
  183. extern void srandom (unsigned int __seed) __THROW;
  184.  
  185. /* Initialize the random number generator to use state buffer STATEBUF,
  186.    of length STATELEN, and seed it with SEED.  Optimal lengths are 8, 16,
  187.    32, 64, 128 and 256, the bigger the better; values less than 8 will
  188.    cause an error and values greater than 256 will be rounded down.  */
  189. extern char *initstate (unsigned int __seed, char *__statebuf,
  190.                         size_t __statelen) __THROW __nonnull ((2));
  191.  
  192. /* Switch the random number generator to state buffer STATEBUF,
  193.    which should have been previously initialized by `initstate'.  */
  194. extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
  195. #endif
  196.  
  197. __BEGIN_NAMESPACE_STD
  198. /* Return the absolute value of x.  */
  199. extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
  200. extern long int    labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
  201.  
  202. /* Return numerator divided by denominator.  */
  203. extern div_t div (int __numer, int __denom)
  204.      __THROW __attribute__ ((__const__)) __wur;
  205. extern ldiv_t ldiv (long __numer, long __denom)
  206.      __THROW __attribute__ ((__const__)) __wur;
  207. __END_NAMESPACE_STD
  208.  
  209. #ifdef __USE_ISOC99
  210. __BEGIN_NAMESPACE_C99
  211.  
  212. __extension__ extern long long int llabs (long long int __x)
  213.      __THROW __attribute__ ((__const__)) __wur;
  214.      
  215. __extension__ extern lldiv_t lldiv (long long __numer, long long __denom)
  216.      __THROW __attribute__ ((__const__)) __wur;
  217. __END_NAMESPACE_C99
  218. #endif
  219.  
  220. __BEGIN_NAMESPACE_STD
  221. /* Convert a string to a floating-point number.  */
  222. extern double atof (const char *__nptr)
  223.      __THROW __attribute_pure__ __nonnull ((1)) __wur;
  224.  
  225. /* Convert a string to an integer.  */
  226. extern int atoi (const char *__nptr)
  227.      __THROW __attribute_pure__ __nonnull ((1)) __wur;
  228.  
  229. /* Convert a string to a long integer.  */
  230. extern long int atol (const char *__nptr)
  231.      __THROW __attribute_pure__ __nonnull ((1)) __wur;
  232. __END_NAMESPACE_STD
  233.  
  234. #if defined __USE_ISOC99 || (defined __GLIBC_HAVE_LONG_LONG && defined __USE_MISC)
  235. __BEGIN_NAMESPACE_C99
  236. /* Convert a string to a long long integer.  */
  237. __extension__ extern long long int atoll (const char *__nptr)
  238.      __THROW __attribute_pure__ __nonnull ((1)) __wur;
  239. __END_NAMESPACE_C99
  240. #endif
  241.  
  242. __BEGIN_NAMESPACE_STD
  243. /* Convert a string to a floating-point number.  */
  244. extern double strtod (const char *__restrict __nptr,
  245.               char **__restrict __endptr)
  246.      __THROW __nonnull ((1)) __wur;
  247. __END_NAMESPACE_STD
  248.  
  249. #ifdef    __USE_ISOC99
  250. __BEGIN_NAMESPACE_C99
  251. /* Likewise for `float' and `long double' sizes of floating-point numbers.  */
  252. extern float strtof (const char *__restrict __nptr,
  253.              char **__restrict __endptr)
  254.      __THROW __nonnull ((1)) __wur;
  255.  
  256. extern long double strtold (const char *__restrict __nptr,
  257.                 char **__restrict __endptr)
  258.      __THROW __nonnull ((1)) __wur;
  259. __END_NAMESPACE_C99
  260. #endif
  261.  
  262. __BEGIN_NAMESPACE_STD
  263. /* Convert a string to a long integer.  */
  264. extern long int strtol (const char *__restrict __nptr,
  265.             char **__restrict __endptr, int __base)
  266.      __THROW __nonnull ((1)) __wur;
  267.  
  268. /* Convert a string to an unsigned long integer.  */
  269. extern unsigned long int strtoul (const char *__restrict __nptr,
  270.                   char **__restrict __endptr, int __base)
  271.      __THROW __nonnull ((1)) __wur;
  272. __END_NAMESPACE_STD
  273.  
  274. #if defined __USE_ISOC99 || (defined __GLIBC_HAVE_LONG_LONG && defined __USE_MISC)
  275. __BEGIN_NAMESPACE_C99
  276. /* Convert a string to a quadword integer.  */
  277. __extension__
  278. extern long long int strtoll (const char *__restrict __nptr,
  279.                   char **__restrict __endptr, int __base)
  280.      __THROW __nonnull ((1)) __wur;
  281.  
  282. /* Convert a string to an unsigned quadword integer.  */
  283. __extension__
  284. extern unsigned long long int strtoull (__const char *__restrict __nptr,
  285.                     char **__restrict __endptr, int __base)
  286.      __THROW __nonnull ((1)) __wur;
  287. __END_NAMESPACE_C99
  288. #endif /* ISO C99 or GCC and use MISC.  */
  289.  
  290. #ifdef __USE_EXTERN_INLINES
  291. /* Define inline functions which call the internal entry points.  */
  292.  
  293. __BEGIN_NAMESPACE_STD
  294. extern __inline double atof (const char *__nptr)
  295. {
  296.   return strtod (__nptr, (char **) NULL);
  297. }
  298. extern __inline int atoi (const char *__nptr)
  299. {
  300.   return (int) strtol (__nptr, (char **) NULL, 10);
  301. }
  302. extern __inline long int atol (const char *__nptr)
  303. {
  304.   return strtol (__nptr, (char **) NULL, 10);
  305. }
  306. __END_NAMESPACE_STD
  307.  
  308. # if defined __USE_MISC || defined __USE_ISOC99
  309. __BEGIN_NAMESPACE_C99
  310. __extension__ extern __inline long long int atoll (const char *__nptr)
  311. {
  312.   return strtoll (__nptr, (char **) NULL, 10);
  313. }
  314. __END_NAMESPACE_C99
  315. # endif
  316. #endif /* Optimizing and Inlining.  */
  317.  
  318.  
  319. __BEGIN_NAMESPACE_STD
  320. /* Do a binary search for 'key' in 'base', which consists of
  321.    'nmemb' elements of 'size' bytes each, using 'compare' to
  322.    perform the comparisons.  */
  323. extern void *bsearch (const void *__key, const void *__base,
  324.               size_t __nmemb, size_t __size,
  325.               int (*__compare)(const void *, const void *))
  326.      __nonnull ((1, 2, 5)) __wur;
  327.  
  328. /* Sort 'nmemb' elements of 'base', or 'size' bytes each.
  329.    Use 'compare' to perform the comparisons.  */
  330. extern void qsort (void *__base, size_t __nmemb, size_t __size,
  331.            int (*__compare)(const void *,const void *))
  332.      __nonnull ((1, 4));
  333.  
  334. /* Return the length of a multibyte character in 's' which is
  335.    no longer than n.  */
  336. extern int mblen (const char *__s, size_t __n) __THROW;
  337. extern size_t mbstowcs (wchar_t *__wchar, const char *__s, size_t __n) __THROW;
  338. extern int mbtowc (wchar_t *__wchar, const char *__s, size_t __n) __THROW;
  339. extern size_t wcstombs (char *__s, const wchar_t *__wchar, size_t __n) __THROW;
  340. extern int wctomb (char *__s, wchar_t __wchar) __THROW;
  341.  
  342. __END_NAMESPACE_STD
  343.  
  344. #ifndef __ALLOCA_H
  345. #include <alloca.h>
  346. #endif
  347.  
  348. /* Efficient (?) internal decimal to ascii function used by printf() et al */
  349. extern char *__dtoa(double __d, int __mode, int __ndigits,
  350.             int *__decpt, int *__sign, char **__rve) __THROW;
  351.  
  352. #ifdef __USE_XOPEN_EXTENDED
  353. /* Parse comma separated suboption from 'option' and match against
  354.    strings in 'tokens'. Return index with *value set to optional value.  */
  355. extern int getsubopt (char **__restrict __option,
  356.               const char *const *__restrict __tokens,
  357.               char **__restrict __value)
  358.      __THROW __nonnull ((1, 2, 3)) __wur;
  359. extern char *suboptarg;
  360. #endif
  361.  
  362. #if defined __USE_SVID || defined __USE_XOPEN
  363. /* System V style 48-bit random number generator functions.  */
  364.  
  365. /* Return a non-negative, double-precision floating-point value in
  366.    the range 0.0 to 1.0.  */
  367. extern double drand48 (void) __THROW;
  368. extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
  369.  
  370. /* Return non-negative, long integer in the range 0 to 2^31.  */
  371. extern long int lrand48 (void) __THROW;
  372. extern long int nrand48 (unsigned short int __xsubi[3])
  373.      __THROW __nonnull ((1));
  374.  
  375. /* Return signed, long integers in the range -2^31 to 2^31.  */
  376. extern long int mrand48 (void) __THROW;
  377. extern long int jrand48 (unsigned short int __xsubi[3])
  378.      __THROW __nonnull ((1));
  379.  
  380. /* Seed random number generator.  */
  381. extern void srand48 (long int __seedval) __THROW;
  382.  
  383. extern unsigned short int *seed48 (unsigned short int __seed16v[3])
  384.      __THROW __nonnull ((1));
  385.  
  386. extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
  387. #endif
  388.  
  389. __END_DECLS
  390.  
  391. #endif
  392.