OSDN Git Service

update some headers
[uclinux-h8/uClibc.git] / include / stdlib.h
1 /* Copyright (C) 1991-2007, 2009 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18
19 /*
20  *      ISO C99 Standard: 7.20 General utilities        <stdlib.h>
21  */
22
23 #ifndef _STDLIB_H
24
25 #include <features.h>
26
27 /* Get size_t, wchar_t and NULL from <stddef.h>.  */
28 #define         __need_size_t
29 #ifndef __need_malloc_and_calloc
30 # ifdef __UCLIBC_HAS_WCHAR__
31 #  define       __need_wchar_t
32 # endif
33 # define        __need_NULL
34 #endif
35 #include <stddef.h>
36
37 __BEGIN_DECLS
38
39 #ifndef __need_malloc_and_calloc
40 #define _STDLIB_H       1
41
42 #if defined __USE_XOPEN && !defined _SYS_WAIT_H
43 /* XPG requires a few symbols from <sys/wait.h> being defined.  */
44 # include <bits/waitflags.h>
45 # include <bits/waitstatus.h>
46
47 # ifdef __USE_BSD
48
49 /* Lots of hair to allow traditional BSD use of `union wait'
50    as well as POSIX.1 use of `int' for the status word.  */
51
52 #  if defined __GNUC__ && !defined __cplusplus
53 #   define __WAIT_INT(status) \
54   (__extension__ (((union { __typeof(status) __in; int __i; }) \
55                    { .__in = (status) }).__i))
56 #  else
57 #   define __WAIT_INT(status)   (*(int *) &(status))
58 #  endif
59
60 /* This is the type of the argument to `wait'.  The funky union
61    causes redeclarations with either `int *' or `union wait *' to be
62    allowed without complaint.  __WAIT_STATUS_DEFN is the type used in
63    the actual function definitions.  */
64
65 #  if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus
66 #   define __WAIT_STATUS        void *
67 #   define __WAIT_STATUS_DEFN   void *
68 #  else
69 /* This works in GCC 2.6.1 and later.  */
70 typedef union
71   {
72     union wait *__uptr;
73     int *__iptr;
74   } __WAIT_STATUS __attribute__ ((__transparent_union__));
75 #   define __WAIT_STATUS_DEFN   int *
76 #  endif
77
78 # else /* Don't use BSD.  */
79
80 #  define __WAIT_INT(status)    (status)
81 #  define __WAIT_STATUS         int *
82 #  define __WAIT_STATUS_DEFN    int *
83
84 # endif /* Use BSD.  */
85
86 /* Define the macros <sys/wait.h> also would define this way.  */
87 # define WEXITSTATUS(status)    __WEXITSTATUS (__WAIT_INT (status))
88 # define WTERMSIG(status)       __WTERMSIG (__WAIT_INT (status))
89 # define WSTOPSIG(status)       __WSTOPSIG (__WAIT_INT (status))
90 # define WIFEXITED(status)      __WIFEXITED (__WAIT_INT (status))
91 # define WIFSIGNALED(status)    __WIFSIGNALED (__WAIT_INT (status))
92 # define WIFSTOPPED(status)     __WIFSTOPPED (__WAIT_INT (status))
93 # ifdef __WIFCONTINUED
94 #  define WIFCONTINUED(status)  __WIFCONTINUED (__WAIT_INT (status))
95 # endif
96 #endif  /* X/Open and <sys/wait.h> not included.  */
97
98 __BEGIN_NAMESPACE_STD
99 /* Returned by `div'.  */
100 typedef struct
101   {
102     int quot;                   /* Quotient.  */
103     int rem;                    /* Remainder.  */
104   } div_t;
105
106 /* Returned by `ldiv'.  */
107 #ifndef __ldiv_t_defined
108 typedef struct
109   {
110     long int quot;              /* Quotient.  */
111     long int rem;               /* Remainder.  */
112   } ldiv_t;
113 # define __ldiv_t_defined       1
114 #endif
115 __END_NAMESPACE_STD
116
117 #if defined __USE_ISOC99 && !defined __lldiv_t_defined
118 __BEGIN_NAMESPACE_C99
119 /* Returned by `lldiv'.  */
120 __extension__ typedef struct
121   {
122     long long int quot;         /* Quotient.  */
123     long long int rem;          /* Remainder.  */
124   } lldiv_t;
125 # define __lldiv_t_defined      1
126 __END_NAMESPACE_C99
127 #endif
128
129
130 /* The largest number rand will return (same as INT_MAX).  */
131 #define RAND_MAX        2147483647
132
133
134 /* We define these the same for all machines.
135    Changes from this to the outside world should be done in `_exit'.  */
136 #define EXIT_FAILURE    1       /* Failing exit status.  */
137 #define EXIT_SUCCESS    0       /* Successful exit status.  */
138
139
140 /* Maximum length of a multibyte character in the current locale.  */
141 #if 0
142 #define MB_CUR_MAX      (__ctype_get_mb_cur_max ())
143 extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
144 #else
145 #ifdef __UCLIBC_HAS_WCHAR__
146 #define MB_CUR_MAX      (_stdlib_mb_cur_max ())
147 extern size_t _stdlib_mb_cur_max (void) __THROW __wur;
148 libc_hidden_proto(_stdlib_mb_cur_max)
149 #endif
150 #endif
151
152
153 __BEGIN_NAMESPACE_STD
154 #ifdef __UCLIBC_HAS_FLOATS__
155 /* Convert a string to a floating-point number.  */
156 extern double atof (__const char *__nptr)
157      __THROW __attribute_pure__ __nonnull ((1)) __wur;
158 #endif /* __UCLIBC_HAS_FLOATS__ */
159 /* Convert a string to an integer.  */
160 extern int atoi (__const char *__nptr)
161      __THROW __attribute_pure__ __nonnull ((1)) __wur;
162 libc_hidden_proto(atoi)
163 /* Convert a string to a long integer.  */
164 extern long int atol (__const char *__nptr)
165      __THROW __attribute_pure__ __nonnull ((1)) __wur;
166 libc_hidden_proto(atol)
167 __END_NAMESPACE_STD
168
169 #if defined __USE_ISOC99 || defined __USE_MISC
170 __BEGIN_NAMESPACE_C99
171 /* Convert a string to a long long integer.  */
172 __extension__ extern long long int atoll (__const char *__nptr)
173      __THROW __attribute_pure__ __nonnull ((1)) __wur;
174 __END_NAMESPACE_C99
175 #endif
176
177 #ifdef __UCLIBC_HAS_FLOATS__
178 __BEGIN_NAMESPACE_STD
179 /* Convert a string to a floating-point number.  */
180 extern double strtod (__const char *__restrict __nptr,
181                       char **__restrict __endptr)
182      __THROW __nonnull ((1)) __wur;
183 libc_hidden_proto(strtod)
184 __END_NAMESPACE_STD
185
186 #ifdef  __USE_ISOC99
187 __BEGIN_NAMESPACE_C99
188 /* Likewise for `float' and `long double' sizes of floating-point numbers.  */
189 extern float strtof (__const char *__restrict __nptr,
190                      char **__restrict __endptr) __THROW __nonnull ((1)) __wur;
191
192 extern long double strtold (__const char *__restrict __nptr,
193                             char **__restrict __endptr)
194      __THROW __nonnull ((1)) __wur;
195 __END_NAMESPACE_C99
196 #endif
197 #endif /* __UCLIBC_HAS_FLOATS__ */
198
199 __BEGIN_NAMESPACE_STD
200 /* Convert a string to a long integer.  */
201 extern long int strtol (__const char *__restrict __nptr,
202                         char **__restrict __endptr, int __base)
203      __THROW __nonnull ((1)) __wur;
204 libc_hidden_proto(strtol)
205 /* Convert a string to an unsigned long integer.  */
206 extern unsigned long int strtoul (__const char *__restrict __nptr,
207                                   char **__restrict __endptr, int __base)
208      __THROW __nonnull ((1)) __wur;
209 libc_hidden_proto(strtoul)
210 __END_NAMESPACE_STD
211
212 #ifdef __USE_BSD
213 #include <sys/types.h> /* for u_quad_t */
214
215 /* Convert a string to a quadword integer.  */
216 __extension__
217 extern quad_t strtoq (__const char *__restrict __nptr,
218                              char **__restrict __endptr, int __base)
219      __THROW __nonnull ((1)) __wur;
220 /* Convert a string to an unsigned quadword integer.  */
221 __extension__
222 extern u_quad_t strtouq (__const char *__restrict __nptr,
223                                        char **__restrict __endptr, int __base)
224      __THROW __nonnull ((1)) __wur;
225 #endif /* GCC and use BSD.  */
226
227 #if defined __USE_ISOC99 || defined __USE_MISC
228 __BEGIN_NAMESPACE_C99
229 /* Convert a string to a quadword integer.  */
230 __extension__
231 extern long long int strtoll (__const char *__restrict __nptr,
232                               char **__restrict __endptr, int __base)
233      __THROW __nonnull ((1)) __wur;
234 libc_hidden_proto(strtoll)
235 /* Convert a string to an unsigned quadword integer.  */
236 __extension__
237 extern unsigned long long int strtoull (__const char *__restrict __nptr,
238                                         char **__restrict __endptr, int __base)
239      __THROW __nonnull ((1)) __wur;
240 __END_NAMESPACE_C99
241 #endif /* ISO C99 or GCC and use MISC.  */
242
243
244 #if defined __USE_GNU && defined __UCLIBC_HAS_XLOCALE__
245 /* The concept of one static locale per category is not very well
246    thought out.  Many applications will need to process its data using
247    information from several different locales.  Another problem is
248    the implementation of the internationalization handling in the
249    ISO C++ standard library.  To support this another set of
250    the functions using locale data exist which take an additional
251    argument.
252
253    Attention: even though several *_l interfaces are part of POSIX:2008,
254    these are not.  */
255
256 /* Structure for reentrant locale using functions.  This is an
257    (almost) opaque type for the user level programs.  */
258 # include <xlocale.h>
259
260 /* Special versions of the functions above which take the locale to
261    use as an additional parameter.  */
262 extern long int strtol_l (__const char *__restrict __nptr,
263                           char **__restrict __endptr, int __base,
264                           __locale_t __loc) __THROW __nonnull ((1, 4)) __wur;
265 libc_hidden_proto(strtol_l)
266
267 extern unsigned long int strtoul_l (__const char *__restrict __nptr,
268                                     char **__restrict __endptr,
269                                     int __base, __locale_t __loc)
270      __THROW __nonnull ((1, 4)) __wur;
271 libc_hidden_proto(strtoul_l)
272
273 __extension__
274 extern long long int strtoll_l (__const char *__restrict __nptr,
275                                 char **__restrict __endptr, int __base,
276                                 __locale_t __loc)
277      __THROW __nonnull ((1, 4)) __wur;
278
279 __extension__
280 extern unsigned long long int strtoull_l (__const char *__restrict __nptr,
281                                           char **__restrict __endptr,
282                                           int __base, __locale_t __loc)
283      __THROW __nonnull ((1, 4)) __wur;
284
285 #ifdef __UCLIBC_HAS_FLOATS__
286 extern double strtod_l (__const char *__restrict __nptr,
287                         char **__restrict __endptr, __locale_t __loc)
288      __THROW __nonnull ((1, 3)) __wur;
289
290 extern float strtof_l (__const char *__restrict __nptr,
291                        char **__restrict __endptr, __locale_t __loc)
292      __THROW __nonnull ((1, 3)) __wur;
293
294 extern long double strtold_l (__const char *__restrict __nptr,
295                               char **__restrict __endptr,
296                               __locale_t __loc)
297      __THROW __nonnull ((1, 3)) __wur;
298 #endif /* __UCLIBC_HAS_FLOATS__ */
299 #endif /* GNU */
300
301
302 #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED
303 /* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant
304    digit first.  Returns a pointer to static storage overwritten by the
305    next call.  */
306 extern char *l64a (long int __n) __THROW __wur;
307
308 /* Read a number from a string S in base 64 as above.  */
309 extern long int a64l (__const char *__s)
310      __THROW __attribute_pure__ __nonnull ((1)) __wur;
311
312 #endif  /* Use SVID || extended X/Open.  */
313
314 #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED || defined __USE_BSD
315 # include <sys/types.h> /* we need int32_t... */
316
317 /* These are the functions that actually do things.  The `random', `srandom',
318    `initstate' and `setstate' functions are those from BSD Unices.
319    The `rand' and `srand' functions are required by the ANSI standard.
320    We provide both interfaces to the same random number generator.  */
321 /* Return a random long integer between 0 and RAND_MAX inclusive.  */
322 extern long int random (void) __THROW;
323 libc_hidden_proto(random)
324
325 /* Seed the random number generator with the given number.  */
326 extern void srandom (unsigned int __seed) __THROW;
327
328 /* Initialize the random number generator to use state buffer STATEBUF,
329    of length STATELEN, and seed it with SEED.  Optimal lengths are 8, 16,
330    32, 64, 128 and 256, the bigger the better; values less than 8 will
331    cause an error and values greater than 256 will be rounded down.  */
332 extern char *initstate (unsigned int __seed, char *__statebuf,
333                         size_t __statelen) __THROW __nonnull ((2));
334
335 /* Switch the random number generator to state buffer STATEBUF,
336    which should have been previously initialized by `initstate'.  */
337 extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
338
339
340 # ifdef __USE_MISC
341 /* Reentrant versions of the `random' family of functions.
342    These functions all use the following data structure to contain
343    state, rather than global state variables.  */
344
345 struct random_data
346   {
347     int32_t *fptr;              /* Front pointer.  */
348     int32_t *rptr;              /* Rear pointer.  */
349     int32_t *state;             /* Array of state values.  */
350 #if 0
351     int rand_type;              /* Type of random number generator.  */
352     int rand_deg;               /* Degree of random number generator.  */
353     int rand_sep;               /* Distance between front and rear.  */
354 #else
355     /* random_r.c, TYPE_x, DEG_x, SEP_x - small enough for int8_t */
356     int8_t rand_type;           /* Type of random number generator.  */
357     int8_t rand_deg;            /* Degree of random number generator.  */
358     int8_t rand_sep;            /* Distance between front and rear.  */
359 #endif
360     int32_t *end_ptr;           /* Pointer behind state table.  */
361   };
362
363 extern int random_r (struct random_data *__restrict __buf,
364                      int32_t *__restrict __result) __THROW __nonnull ((1, 2));
365 libc_hidden_proto(random_r)
366
367 extern int srandom_r (unsigned int __seed, struct random_data *__buf)
368      __THROW __nonnull ((2));
369 libc_hidden_proto(srandom_r)
370
371 extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
372                         size_t __statelen,
373                         struct random_data *__restrict __buf)
374      __THROW __nonnull ((2, 4));
375 libc_hidden_proto(initstate_r)
376
377 extern int setstate_r (char *__restrict __statebuf,
378                        struct random_data *__restrict __buf)
379      __THROW __nonnull ((1, 2));
380 libc_hidden_proto(setstate_r)
381 # endif /* Use misc.  */
382 #endif  /* Use SVID || extended X/Open || BSD. */
383
384
385 __BEGIN_NAMESPACE_STD
386 /* Return a random integer between 0 and RAND_MAX inclusive.  */
387 extern int rand (void) __THROW;
388 /* Seed the random number generator with the given number.  */
389 extern void srand (unsigned int __seed) __THROW;
390 __END_NAMESPACE_STD
391
392 #ifdef __USE_POSIX
393 /* Reentrant interface according to POSIX.1.  */
394 extern int rand_r (unsigned int *__seed) __THROW;
395 #endif
396
397
398 #if defined __USE_SVID || defined __USE_XOPEN
399 /* System V style 48-bit random number generator functions.  */
400
401 #ifdef __UCLIBC_HAS_FLOATS__
402 /* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
403 extern double drand48 (void) __THROW;
404 extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
405 #endif /* __UCLIBC_HAS_FLOATS__ */
406
407 /* Return non-negative, long integer in [0,2^31).  */
408 extern long int lrand48 (void) __THROW;
409 extern long int nrand48 (unsigned short int __xsubi[3])
410      __THROW __nonnull ((1));
411
412 /* Return signed, long integers in [-2^31,2^31).  */
413 extern long int mrand48 (void) __THROW;
414 extern long int jrand48 (unsigned short int __xsubi[3])
415      __THROW __nonnull ((1));
416
417 /* Seed random number generator.  */
418 extern void srand48 (long int __seedval) __THROW;
419 extern unsigned short int *seed48 (unsigned short int __seed16v[3])
420      __THROW __nonnull ((1));
421 extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
422
423 # ifdef __USE_MISC
424 /* Data structure for communication with thread safe versions.  This
425    type is to be regarded as opaque.  It's only exported because users
426    have to allocate objects of this type.  */
427 struct drand48_data
428   {
429     unsigned short int __x[3];  /* Current state.  */
430     unsigned short int __old_x[3]; /* Old state.  */
431     unsigned short int __c;     /* Additive const. in congruential formula.  */
432     unsigned short int __init;  /* Flag for initializing.  */
433     unsigned long long int __a; /* Factor in congruential formula.  */
434   };
435
436 #ifdef __UCLIBC_HAS_FLOATS__
437 /* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
438 extern int drand48_r (struct drand48_data *__restrict __buffer,
439                       double *__restrict __result) __THROW __nonnull ((1, 2));
440 extern int erand48_r (unsigned short int __xsubi[3],
441                       struct drand48_data *__restrict __buffer,
442                       double *__restrict __result) __THROW __nonnull ((1, 2));
443 libc_hidden_proto(erand48_r)
444 #endif /* __UCLIBC_HAS_FLOATS__ */
445
446 /* Return non-negative, long integer in [0,2^31).  */
447 extern int lrand48_r (struct drand48_data *__restrict __buffer,
448                       long int *__restrict __result)
449      __THROW __nonnull ((1, 2));
450 libc_hidden_proto(lrand48_r)
451 extern int nrand48_r (unsigned short int __xsubi[3],
452                       struct drand48_data *__restrict __buffer,
453                       long int *__restrict __result)
454      __THROW __nonnull ((1, 2));
455 libc_hidden_proto(nrand48_r)
456
457 /* Return signed, long integers in [-2^31,2^31).  */
458 extern int mrand48_r (struct drand48_data *__restrict __buffer,
459                       long int *__restrict __result)
460      __THROW __nonnull ((1, 2));
461 extern int jrand48_r (unsigned short int __xsubi[3],
462                       struct drand48_data *__restrict __buffer,
463                       long int *__restrict __result)
464      __THROW __nonnull ((1, 2));
465 libc_hidden_proto(jrand48_r)
466
467 /* Seed random number generator.  */
468 extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
469      __THROW __nonnull ((2));
470 libc_hidden_proto(srand48_r)
471
472 extern int seed48_r (unsigned short int __seed16v[3],
473                      struct drand48_data *__buffer) __THROW __nonnull ((1, 2));
474 libc_hidden_proto(seed48_r)
475
476 extern int lcong48_r (unsigned short int __param[7],
477                       struct drand48_data *__buffer)
478      __THROW __nonnull ((1, 2));
479 # endif /* Use misc.  */
480 #endif  /* Use SVID or X/Open.  */
481
482 #endif /* don't just need malloc and calloc */
483
484 #ifndef __malloc_and_calloc_defined
485 # define __malloc_and_calloc_defined
486 __BEGIN_NAMESPACE_STD
487 /* Allocate SIZE bytes of memory.  */
488 extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
489 /* We want the malloc symbols overridable at runtime
490  * libc_hidden_proto(malloc) */
491 /* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
492 extern void *calloc (size_t __nmemb, size_t __size)
493      __THROW __attribute_malloc__ __wur;
494 __END_NAMESPACE_STD
495 #endif
496
497 #ifndef __need_malloc_and_calloc
498 __BEGIN_NAMESPACE_STD
499 /* Re-allocate the previously allocated block
500    in PTR, making the new block SIZE bytes long.  */
501 /* __attribute_malloc__ is not used, because if realloc returns
502    the same pointer that was passed to it, aliasing needs to be allowed
503    between objects pointed by the old and new pointers.  */
504 extern void *realloc (void *__ptr, size_t __size)
505      __THROW __attribute_warn_unused_result__;
506 /* Free a block allocated by `malloc', `realloc' or `calloc'.  */
507 extern void free (void *__ptr) __THROW;
508 __END_NAMESPACE_STD
509
510 #if 0 /*def     __USE_MISC*/
511 /* Free a block.  An alias for `free'.  (Sun Unices).  */
512 extern void cfree (void *__ptr) __THROW;
513 #endif /* Use misc.  */
514
515 #if defined __USE_GNU || defined __USE_BSD || defined __USE_MISC
516 # include <alloca.h>
517 #endif /* Use GNU, BSD, or misc.  */
518
519 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
520 /* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */
521 extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
522 #endif
523
524 #if defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__
525 /* Allocate memory of SIZE bytes with an alignment of ALIGNMENT.  */
526 extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
527      __THROW __nonnull ((1)) __wur;
528 #endif
529
530 __BEGIN_NAMESPACE_STD
531 /* Abort execution and generate a core-dump.  */
532 extern void abort (void) __THROW __attribute__ ((__noreturn__));
533 libc_hidden_proto(abort)
534
535
536 /* Register a function to be called when `exit' is called.  */
537 extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
538 __END_NAMESPACE_STD
539
540 #ifdef  __USE_MISC
541 /* Register a function to be called with the status
542    given to `exit' and the given argument.  */
543 extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
544      __THROW __nonnull ((1));
545 #endif
546
547 __BEGIN_NAMESPACE_STD
548 /* Call all functions registered with `atexit' and `on_exit',
549    in the reverse of the order in which they were registered,
550    perform stdio cleanup, and terminate program execution with STATUS.  */
551 extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
552 libc_hidden_proto(exit)
553 __END_NAMESPACE_STD
554
555 #ifdef __USE_ISOC99
556 __BEGIN_NAMESPACE_C99
557 /* Terminate the program with STATUS without calling any of the
558    functions registered with `atexit' or `on_exit'.  */
559 extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
560 __END_NAMESPACE_C99
561 #endif
562
563
564 __BEGIN_NAMESPACE_STD
565 /* Return the value of envariable NAME, or NULL if it doesn't exist.  */
566 extern char *getenv (__const char *__name) __THROW __nonnull ((1)) __wur;
567 libc_hidden_proto(getenv)
568 __END_NAMESPACE_STD
569
570 #if 0
571 /* This function is similar to the above but returns NULL if the
572    programs is running with SUID or SGID enabled.  */
573 extern char *__secure_getenv (__const char *__name)
574      __THROW __nonnull ((1)) __wur;
575 #endif
576
577 #if defined __USE_SVID || defined __USE_XOPEN
578 /* The SVID says this is in <stdio.h>, but this seems a better place.   */
579 /* Put STRING, which is of the form "NAME=VALUE", in the environment.
580    If there is no `=', remove NAME from the environment.  */
581 extern int putenv (char *__string) __THROW __nonnull ((1));
582 #endif
583
584 #if defined __USE_BSD || defined __USE_XOPEN2K
585 /* Set NAME to VALUE in the environment.
586    If REPLACE is nonzero, overwrite an existing value.  */
587 extern int setenv (__const char *__name, __const char *__value, int __replace)
588      __THROW __nonnull ((2));
589 libc_hidden_proto(setenv)
590
591 /* Remove the variable NAME from the environment.  */
592 extern int unsetenv (__const char *__name) __THROW;
593 libc_hidden_proto(unsetenv)
594 #endif
595
596 /* The following is used by uClibc in atexit.c and sysconf.c */
597 /* We have no limit when __UCLIBC_DYNAMIC_ATEXIT__ is enabled.  */
598 #ifdef __UCLIBC_DYNAMIC_ATEXIT__
599 # define __UCLIBC_MAX_ATEXIT     INT_MAX
600 #else
601 # define __UCLIBC_MAX_ATEXIT     20
602 #endif
603
604
605 #ifdef  __USE_MISC
606 /* The `clearenv' was planned to be added to POSIX.1 but probably
607    never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
608    for Fortran 77) requires this function.  */
609 extern int clearenv (void) __THROW;
610 #endif
611
612
613 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
614 # if defined __UCLIBC_SUSV3_LEGACY__
615 /* Generate a unique temporary file name from TEMPLATE.
616    The last six characters of TEMPLATE must be "XXXXXX";
617    they are replaced with a string that makes the file name unique.
618    Returns TEMPLATE, or a null pointer if it cannot get a unique file name.  */
619 extern char *mktemp (char *__template) __THROW __nonnull ((1)) __wur;
620 # endif
621
622 /* Generate a unique temporary file name from TEMPLATE.
623    The last six characters of TEMPLATE must be "XXXXXX";
624    they are replaced with a string that makes the filename unique.
625    Returns a file descriptor open on the file for reading and writing,
626    or -1 if it cannot create a uniquely-named file.
627
628    This function is a possible cancellation point and therefore not
629    marked with __THROW.  */
630 # ifndef __USE_FILE_OFFSET64
631 extern int mkstemp (char *__template) __nonnull ((1)) __wur;
632 # else
633 #  ifdef __REDIRECT
634 extern int __REDIRECT (mkstemp, (char *__template), mkstemp64)
635      __nonnull ((1)) __wur;
636 #  else
637 #   define mkstemp mkstemp64
638 #  endif
639 # endif
640 # ifdef __USE_LARGEFILE64
641 extern int mkstemp64 (char *__template) __nonnull ((1)) __wur;
642 # endif
643 #endif
644
645 #if defined __USE_BSD || defined __USE_XOPEN2K8
646 /* Create a unique temporary directory from TEMPLATE.
647    The last six characters of TEMPLATE must be "XXXXXX";
648    they are replaced with a string that makes the directory name unique.
649    Returns TEMPLATE, or a null pointer if it cannot get a unique name.
650    The directory is created mode 700.  */
651 extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
652 #endif
653
654
655 __BEGIN_NAMESPACE_STD
656 /* Execute the given line as a shell command.
657
658    This function is a cancellation point and therefore not marked with
659    __THROW.  */
660 extern int system (__const char *__command) __wur;
661 __END_NAMESPACE_STD
662
663
664 #ifdef  __USE_GNU
665 /* Return a malloc'd string containing the canonical absolute name of the
666    existing named file.  */
667 extern char *canonicalize_file_name (__const char *__name)
668      __THROW __nonnull ((1)) __wur;
669 #endif
670
671 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
672 /* Return the canonical absolute name of file NAME.  If RESOLVED is
673    null, the result is malloc'd; otherwise, if the canonical name is
674    PATH_MAX chars or more, returns null with `errno' set to
675    ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
676    returns the name in RESOLVED.  */
677 extern char *realpath (__const char *__restrict __name,
678                        char *__restrict __resolved) __THROW __wur;
679 libc_hidden_proto(realpath)
680 #endif
681
682
683 /* Shorthand for type of comparison functions.  */
684 #ifndef __COMPAR_FN_T
685 # define __COMPAR_FN_T
686 typedef int (*__compar_fn_t) (__const void *, __const void *);
687
688 # ifdef __USE_GNU
689 typedef __compar_fn_t comparison_fn_t;
690 # endif
691 #endif
692
693 __BEGIN_NAMESPACE_STD
694 /* Do a binary search for KEY in BASE, which consists of NMEMB elements
695    of SIZE bytes each, using COMPAR to perform the comparisons.  */
696 extern void *bsearch (__const void *__key, __const void *__base,
697                       size_t __nmemb, size_t __size, __compar_fn_t __compar)
698      __nonnull ((1, 2, 5)) __wur;
699
700 /* Sort NMEMB elements of BASE, of SIZE bytes each,
701    using COMPAR to perform the comparisons.  */
702 extern void qsort (void *__base, size_t __nmemb, size_t __size,
703                    __compar_fn_t __compar) __nonnull ((1, 4));
704 libc_hidden_proto(qsort)
705
706
707 /* Return the absolute value of X.  */
708 extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
709 extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
710 __END_NAMESPACE_STD
711
712 #ifdef __USE_ISOC99
713 __extension__ extern long long int llabs (long long int __x)
714      __THROW __attribute__ ((__const__)) __wur;
715 #endif
716
717
718 __BEGIN_NAMESPACE_STD
719 /* Return the `div_t', `ldiv_t' or `lldiv_t' representation
720    of the value of NUMER over DENOM. */
721 /* GCC may have built-ins for these someday.  */
722 extern div_t div (int __numer, int __denom)
723      __THROW __attribute__ ((__const__)) __wur;
724 extern ldiv_t ldiv (long int __numer, long int __denom)
725      __THROW __attribute__ ((__const__)) __wur;
726 __END_NAMESPACE_STD
727
728 #ifdef __USE_ISOC99
729 __BEGIN_NAMESPACE_C99
730 __extension__ extern lldiv_t lldiv (long long int __numer,
731                                     long long int __denom)
732      __THROW __attribute__ ((__const__)) __wur;
733 __END_NAMESPACE_C99
734 #endif
735
736
737 #if ( defined __USE_SVID || defined __USE_XOPEN_EXTENDED ) && defined __UCLIBC_HAS_FLOATS__
738 /* Convert floating point numbers to strings.  The returned values are
739    valid only until another call to the same function.  */
740
741 # ifdef __UCLIBC_SUSV3_LEGACY__
742 #if 0
743 /* Convert VALUE to a string with NDIGIT digits and return a pointer to
744    this.  Set *DECPT with the position of the decimal character and *SIGN
745    with the sign of the number.  */
746 extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
747                    int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
748
749 /* Convert VALUE to a string rounded to NDIGIT decimal digits.  Set *DECPT
750    with the position of the decimal character and *SIGN with the sign of
751    the number.  */
752 extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
753                    int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
754 #endif
755
756 /* If possible convert VALUE to a string with NDIGIT significant digits.
757    Otherwise use exponential representation.  The resulting string will
758    be written to BUF.  */
759 extern char *gcvt (double __value, int __ndigit, char *__buf)
760      __THROW __nonnull ((3)) __wur;
761 # endif /* __UCLIBC_SUSV3_LEGACY__ */
762
763
764 # if 0 /*def __USE_MISC*/
765 /* Long double versions of above functions.  */
766 extern char *qecvt (long double __value, int __ndigit,
767                     int *__restrict __decpt, int *__restrict __sign)
768      __THROW __nonnull ((3, 4)) __wur;
769 extern char *qfcvt (long double __value, int __ndigit,
770                     int *__restrict __decpt, int *__restrict __sign)
771      __THROW __nonnull ((3, 4)) __wur;
772 extern char *qgcvt (long double __value, int __ndigit, char *__buf)
773      __THROW __nonnull ((3)) __wur;
774
775
776 /* Reentrant version of the functions above which provide their own
777    buffers.  */
778 extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
779                    int *__restrict __sign, char *__restrict __buf,
780                    size_t __len) __THROW __nonnull ((3, 4, 5));
781 extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
782                    int *__restrict __sign, char *__restrict __buf,
783                    size_t __len) __THROW __nonnull ((3, 4, 5));
784
785 extern int qecvt_r (long double __value, int __ndigit,
786                     int *__restrict __decpt, int *__restrict __sign,
787                     char *__restrict __buf, size_t __len)
788      __THROW __nonnull ((3, 4, 5));
789 extern int qfcvt_r (long double __value, int __ndigit,
790                     int *__restrict __decpt, int *__restrict __sign,
791                     char *__restrict __buf, size_t __len)
792      __THROW __nonnull ((3, 4, 5));
793 # endif /* misc */
794 #endif  /* use MISC || use X/Open Unix */
795
796
797 #ifdef __UCLIBC_HAS_WCHAR__
798 __BEGIN_NAMESPACE_STD
799 /* Return the length of the multibyte character
800    in S, which is no longer than N.  */
801 extern int mblen (__const char *__s, size_t __n) __THROW __wur;
802 /* Return the length of the given multibyte character,
803    putting its `wchar_t' representation in *PWC.  */
804 extern int mbtowc (wchar_t *__restrict __pwc,
805                    __const char *__restrict __s, size_t __n) __THROW __wur;
806 /* Put the multibyte character represented
807    by WCHAR in S, returning its length.  */
808 extern int wctomb (char *__s, wchar_t __wchar) __THROW __wur;
809
810
811 /* Convert a multibyte string to a wide char string.  */
812 extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
813                         __const char *__restrict __s, size_t __n) __THROW;
814 /* Convert a wide char string to multibyte string.  */
815 extern size_t wcstombs (char *__restrict __s,
816                         __const wchar_t *__restrict __pwcs, size_t __n)
817      __THROW;
818 __END_NAMESPACE_STD
819 #endif /* __UCLIBC_HAS_WCHAR__ */
820
821
822 #if 0 /*def __USE_SVID*/
823 /* Determine whether the string value of RESPONSE matches the affirmation
824    or negative response expression as specified by the LC_MESSAGES category
825    in the program's current locale.  Returns 1 if affirmative, 0 if
826    negative, and -1 if not matching.  */
827 extern int rpmatch (__const char *__response) __THROW __nonnull ((1)) __wur;
828 #endif
829
830
831 #ifdef __USE_XOPEN_EXTENDED
832 /* Parse comma separated suboption from *OPTIONP and match against
833    strings in TOKENS.  If found return index and set *VALUEP to
834    optional value introduced by an equal sign.  If the suboption is
835    not part of TOKENS return in *VALUEP beginning of unknown
836    suboption.  On exit *OPTIONP is set to the beginning of the next
837    token or at the terminating NUL character.  */
838 extern int getsubopt (char **__restrict __optionp,
839                       char *__const *__restrict __tokens,
840                       char **__restrict __valuep)
841      __THROW __nonnull ((1, 2, 3)) __wur;
842 #endif
843
844
845 #ifdef __USE_XOPEN
846 # if defined __UCLIBC_HAS_CRYPT__
847 /* Setup DES tables according KEY.  */
848 extern void setkey (__const char *__key) __THROW __nonnull ((1));
849 # endif /* __UCLIBC_HAS_CRYPT__ */
850 #endif
851
852
853 /* X/Open pseudo terminal handling.  */
854
855 #ifdef __USE_XOPEN2K
856 /* Return a master pseudo-terminal handle.  */
857 extern int posix_openpt (int __oflag) __wur;
858 libc_hidden_proto(posix_openpt)
859 #endif
860
861 #ifdef __USE_XOPEN
862 /* The next four functions all take a master pseudo-tty fd and
863    perform an operation on the associated slave:  */
864
865 #ifdef __UCLIBC_HAS_PTY__
866 /* Chown the slave to the calling user.  */
867 extern int grantpt (int __fd) __THROW;
868
869 /* Release an internal lock so the slave can be opened.
870    Call after grantpt().  */
871 extern int unlockpt (int __fd) __THROW;
872
873 /* Return the pathname of the pseudo terminal slave assoicated with
874    the master FD is open on, or NULL on errors.
875    The returned storage is good until the next call to this function.  */
876 extern char *ptsname (int __fd) __THROW __wur;
877 #endif /* __UCLIBC_HAS_PTY__ */
878 #endif
879
880 #ifdef __USE_GNU
881 # if defined __UCLIBC_HAS_PTY__
882 /* Store at most BUFLEN characters of the pathname of the slave pseudo
883    terminal associated with the master FD is open on in BUF.
884    Return 0 on success, otherwise an error number.  */
885 extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
886      __THROW __nonnull ((2));
887 libc_hidden_proto(ptsname_r)
888 # endif
889 # if defined __UCLIBC_HAS_GETPT__
890 /* Open a master pseudo terminal and return its file descriptor.  */
891 extern int getpt (void);
892 # endif
893 #endif
894
895 #if 0 /* def __USE_BSD */
896 /* Put the 1 minute, 5 minute and 15 minute load averages into the first
897    NELEM elements of LOADAVG.  Return the number written (never more than
898    three, but may be less than NELEM), or -1 if an error occurred.  */
899 extern int getloadavg (double __loadavg[], int __nelem)
900      __THROW __nonnull ((1));
901 #endif
902
903 #ifdef __UCLIBC_HAS_ARC4RANDOM__
904 #include <stdint.h>
905 extern uint32_t arc4random(void);
906 extern void arc4random_stir(void);
907 libc_hidden_proto(arc4random_stir)
908 extern void arc4random_addrandom(unsigned char *, int);
909 #endif
910
911 #endif /* don't just need malloc and calloc */
912 #undef __need_malloc_and_calloc
913
914 __END_DECLS
915
916 #endif /* stdlib.h  */