]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/uclibc/lib/contrib/uclibc/include/stdlib.h
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / 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, see
16    <http://www.gnu.org/licenses/>.  */
17
18 /*
19  *      ISO C99 Standard: 7.20 General utilities        <stdlib.h>
20  */
21
22 #ifndef _STDLIB_H
23
24 #include <features.h>
25
26 /* Get size_t, wchar_t and NULL from <stddef.h>.  */
27 #define         __need_size_t
28 #ifndef __need_malloc_and_calloc
29 # ifdef __UCLIBC_HAS_WCHAR__
30 #  define       __need_wchar_t
31 # endif
32 # define        __need_NULL
33 #endif
34 #include <stddef.h>
35
36 __BEGIN_DECLS
37
38 #ifndef __need_malloc_and_calloc
39 #define _STDLIB_H       1
40
41 #if defined __USE_XOPEN && !defined _SYS_WAIT_H
42 /* XPG requires a few symbols from <sys/wait.h> being defined.  */
43 # include <bits/waitflags.h>
44 # include <bits/waitstatus.h>
45
46 # ifdef __USE_BSD
47
48 /* Lots of hair to allow traditional BSD use of `union wait'
49    as well as POSIX.1 use of `int' for the status word.  */
50
51 #  if defined __GNUC__ && !defined __cplusplus
52 #   define __WAIT_INT(status) \
53   (__extension__ (((union { __typeof(status) __in; int __i; }) \
54                    { .__in = (status) }).__i))
55 #  else
56 #   define __WAIT_INT(status)   (*(int *) &(status))
57 #  endif
58
59 /* This is the type of the argument to `wait'.  The funky union
60    causes redeclarations with either `int *' or `union wait *' to be
61    allowed without complaint.  __WAIT_STATUS_DEFN is the type used in
62    the actual function definitions.  */
63
64 #  if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus
65 #   define __WAIT_STATUS        void *
66 #   define __WAIT_STATUS_DEFN   void *
67 #  else
68 /* This works in GCC 2.6.1 and later.  */
69 typedef union
70   {
71     union wait *__uptr;
72     int *__iptr;
73   } __WAIT_STATUS __attribute__ ((__transparent_union__));
74 #   define __WAIT_STATUS_DEFN   int *
75 #  endif
76
77 # else /* Don't use BSD.  */
78
79 #  define __WAIT_INT(status)    (status)
80 #  define __WAIT_STATUS         int *
81 #  define __WAIT_STATUS_DEFN    int *
82
83 # endif /* Use BSD.  */
84
85 /* Define the macros <sys/wait.h> also would define this way.  */
86 # define WEXITSTATUS(status)    __WEXITSTATUS (__WAIT_INT (status))
87 # define WTERMSIG(status)       __WTERMSIG (__WAIT_INT (status))
88 # define WSTOPSIG(status)       __WSTOPSIG (__WAIT_INT (status))
89 # define WIFEXITED(status)      __WIFEXITED (__WAIT_INT (status))
90 # define WIFSIGNALED(status)    __WIFSIGNALED (__WAIT_INT (status))
91 # define WIFSTOPPED(status)     __WIFSTOPPED (__WAIT_INT (status))
92 # ifdef __WIFCONTINUED
93 #  define WIFCONTINUED(status)  __WIFCONTINUED (__WAIT_INT (status))
94 # endif
95 #endif  /* X/Open and <sys/wait.h> not included.  */
96
97 __BEGIN_NAMESPACE_STD
98 /* Returned by `div'.  */
99 typedef struct
100   {
101     int quot;                   /* Quotient.  */
102     int rem;                    /* Remainder.  */
103   } div_t;
104
105 /* Returned by `ldiv'.  */
106 #ifndef __ldiv_t_defined
107 typedef struct
108   {
109     long int quot;              /* Quotient.  */
110     long int rem;               /* Remainder.  */
111   } ldiv_t;
112 # define __ldiv_t_defined       1
113 #endif
114 __END_NAMESPACE_STD
115
116 #if defined __USE_ISOC99 && !defined __lldiv_t_defined
117 __BEGIN_NAMESPACE_C99
118 /* Returned by `lldiv'.  */
119 __extension__ typedef struct
120   {
121     long long int quot;         /* Quotient.  */
122     long long int rem;          /* Remainder.  */
123   } lldiv_t;
124 # define __lldiv_t_defined      1
125 __END_NAMESPACE_C99
126 #endif
127
128
129 /* The largest number rand will return (same as INT_MAX).  */
130 #define RAND_MAX        2147483647
131
132
133 /* We define these the same for all machines.
134    Changes from this to the outside world should be done in `_exit'.  */
135 #define EXIT_FAILURE    1       /* Failing exit status.  */
136 #define EXIT_SUCCESS    0       /* Successful exit status.  */
137
138
139 /* Maximum length of a multibyte character in the current locale.  */
140 #if 0
141 #define MB_CUR_MAX      (__ctype_get_mb_cur_max ())
142 extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
143 #else
144 #ifdef __UCLIBC_HAS_WCHAR__
145 # define        MB_CUR_MAX      (_stdlib_mb_cur_max ())
146 extern size_t _stdlib_mb_cur_max (void) __THROW __wur;
147 libc_hidden_proto(_stdlib_mb_cur_max)
148 #else
149 # define        MB_CUR_MAX      1
150 #endif
151 #endif
152
153
154 __BEGIN_NAMESPACE_STD
155 #ifdef __UCLIBC_HAS_FLOATS__
156 /* Convert a string to a floating-point number.  */
157 extern double atof (const char *__nptr)
158      __THROW __attribute_pure__ __nonnull ((1)) __wur;
159 #endif /* __UCLIBC_HAS_FLOATS__ */
160 /* Convert a string to an integer.  */
161 extern int atoi (const char *__nptr)
162      __THROW __attribute_pure__ __nonnull ((1)) __wur;
163 libc_hidden_proto(atoi)
164 /* Convert a string to a long integer.  */
165 extern long int atol (const char *__nptr)
166      __THROW __attribute_pure__ __nonnull ((1)) __wur;
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 __wur;
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 #ifdef __USE_GNU
655 /* Generate a unique temporary file name from TEMPLATE similar to
656    mkstemp.  But allow the caller to pass additional flags which are
657    used in the open call to create the file..
658
659    This function is a possible cancellation point and therefore not
660    marked with __THROW.  */
661 # ifndef __USE_FILE_OFFSET64
662 extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
663 # else
664 #  ifdef __REDIRECT
665 extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
666      __nonnull ((1)) __wur;
667 #  else
668 #   define mkostemp mkostemp64
669 #  endif
670 # endif
671 # ifdef __USE_LARGEFILE64
672 extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
673 # endif
674
675 #endif
676
677
678 __BEGIN_NAMESPACE_STD
679 /* Execute the given line as a shell command.
680
681    This function is a cancellation point and therefore not marked with
682    __THROW.  */
683 extern int system (const char *__command) __wur;
684 __END_NAMESPACE_STD
685
686
687 #ifdef  __USE_GNU
688 /* Return a malloc'd string containing the canonical absolute name of the
689    existing named file.  */
690 extern char *canonicalize_file_name (const char *__name)
691      __THROW __nonnull ((1)) __wur;
692 #endif
693
694 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
695 /* Return the canonical absolute name of file NAME.  If RESOLVED is
696    null, the result is malloc'd; otherwise, if the canonical name is
697    PATH_MAX chars or more, returns null with `errno' set to
698    ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
699    returns the name in RESOLVED.  */
700 extern char *realpath (const char *__restrict __name,
701                        char *__restrict __resolved) __THROW __wur;
702 libc_hidden_proto(realpath)
703 #endif
704
705
706 /* Shorthand for type of comparison functions.  */
707 #ifndef __COMPAR_FN_T
708 # define __COMPAR_FN_T
709 typedef int (*__compar_fn_t) (const void *, const void *);
710
711 # ifdef __USE_GNU
712 typedef __compar_fn_t comparison_fn_t;
713 # endif
714 #endif
715 #ifdef __USE_GNU
716 typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
717 #endif
718
719 __BEGIN_NAMESPACE_STD
720 /* Do a binary search for KEY in BASE, which consists of NMEMB elements
721    of SIZE bytes each, using COMPAR to perform the comparisons.  */
722 extern void *bsearch (const void *__key, const void *__base,
723                       size_t __nmemb, size_t __size, __compar_fn_t __compar)
724      __nonnull ((1, 2, 5)) __wur;
725
726 /* Sort NMEMB elements of BASE, of SIZE bytes each,
727    using COMPAR to perform the comparisons.  */
728 extern void qsort (void *__base, size_t __nmemb, size_t __size,
729                    __compar_fn_t __compar) __nonnull ((1, 4));
730 libc_hidden_proto(qsort)
731 #ifdef __USE_GNU
732 extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
733                    __compar_d_fn_t __compar, void *__arg)
734   __nonnull ((1, 4));
735 libc_hidden_proto(qsort_r)
736 #endif
737
738 /* Return the absolute value of X.  */
739 extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
740 extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
741 __END_NAMESPACE_STD
742
743 #ifdef __USE_ISOC99
744 __extension__ extern long long int llabs (long long int __x)
745      __THROW __attribute__ ((__const__)) __wur;
746 #endif
747
748
749 __BEGIN_NAMESPACE_STD
750 /* Return the `div_t', `ldiv_t' or `lldiv_t' representation
751    of the value of NUMER over DENOM. */
752 /* GCC may have built-ins for these someday.  */
753 extern div_t div (int __numer, int __denom)
754      __THROW __attribute__ ((__const__)) __wur;
755 extern ldiv_t ldiv (long int __numer, long int __denom)
756      __THROW __attribute__ ((__const__)) __wur;
757 __END_NAMESPACE_STD
758
759 #ifdef __USE_ISOC99
760 __BEGIN_NAMESPACE_C99
761 __extension__ extern lldiv_t lldiv (long long int __numer,
762                                     long long int __denom)
763      __THROW __attribute__ ((__const__)) __wur;
764 __END_NAMESPACE_C99
765 #endif
766
767
768 #if ( defined __USE_SVID || defined __USE_XOPEN_EXTENDED ) && defined __UCLIBC_HAS_FLOATS__
769 /* Convert floating point numbers to strings.  The returned values are
770    valid only until another call to the same function.  */
771
772 # ifdef __UCLIBC_SUSV3_LEGACY__
773 #if 0
774 /* Convert VALUE to a string with NDIGIT digits and return a pointer to
775    this.  Set *DECPT with the position of the decimal character and *SIGN
776    with the sign of the number.  */
777 extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
778                    int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
779
780 /* Convert VALUE to a string rounded to NDIGIT decimal digits.  Set *DECPT
781    with the position of the decimal character and *SIGN with the sign of
782    the number.  */
783 extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
784                    int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
785 #endif
786
787 /* If possible convert VALUE to a string with NDIGIT significant digits.
788    Otherwise use exponential representation.  The resulting string will
789    be written to BUF.  */
790 extern char *gcvt (double __value, int __ndigit, char *__buf)
791      __THROW __nonnull ((3)) __wur;
792 # endif /* __UCLIBC_SUSV3_LEGACY__ */
793
794
795 # if 0 /*def __USE_MISC*/
796 /* Long double versions of above functions.  */
797 extern char *qecvt (long double __value, int __ndigit,
798                     int *__restrict __decpt, int *__restrict __sign)
799      __THROW __nonnull ((3, 4)) __wur;
800 extern char *qfcvt (long double __value, int __ndigit,
801                     int *__restrict __decpt, int *__restrict __sign)
802      __THROW __nonnull ((3, 4)) __wur;
803 extern char *qgcvt (long double __value, int __ndigit, char *__buf)
804      __THROW __nonnull ((3)) __wur;
805
806
807 /* Reentrant version of the functions above which provide their own
808    buffers.  */
809 extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
810                    int *__restrict __sign, char *__restrict __buf,
811                    size_t __len) __THROW __nonnull ((3, 4, 5));
812 extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
813                    int *__restrict __sign, char *__restrict __buf,
814                    size_t __len) __THROW __nonnull ((3, 4, 5));
815
816 extern int qecvt_r (long double __value, int __ndigit,
817                     int *__restrict __decpt, int *__restrict __sign,
818                     char *__restrict __buf, size_t __len)
819      __THROW __nonnull ((3, 4, 5));
820 extern int qfcvt_r (long double __value, int __ndigit,
821                     int *__restrict __decpt, int *__restrict __sign,
822                     char *__restrict __buf, size_t __len)
823      __THROW __nonnull ((3, 4, 5));
824 # endif /* misc */
825 #endif  /* use MISC || use X/Open Unix */
826
827
828 #ifdef __UCLIBC_HAS_WCHAR__
829 __BEGIN_NAMESPACE_STD
830 /* Return the length of the multibyte character
831    in S, which is no longer than N.  */
832 extern int mblen (const char *__s, size_t __n) __THROW __wur;
833 /* Return the length of the given multibyte character,
834    putting its `wchar_t' representation in *PWC.  */
835 extern int mbtowc (wchar_t *__restrict __pwc,
836                    const char *__restrict __s, size_t __n) __THROW __wur;
837 /* Put the multibyte character represented
838    by WCHAR in S, returning its length.  */
839 extern int wctomb (char *__s, wchar_t __wchar) __THROW __wur;
840
841
842 /* Convert a multibyte string to a wide char string.  */
843 extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
844                         const char *__restrict __s, size_t __n) __THROW;
845 /* Convert a wide char string to multibyte string.  */
846 extern size_t wcstombs (char *__restrict __s,
847                         const wchar_t *__restrict __pwcs, size_t __n)
848      __THROW;
849 __END_NAMESPACE_STD
850 #endif /* __UCLIBC_HAS_WCHAR__ */
851
852
853 #ifdef __USE_SVID
854 /* Determine whether the string value of RESPONSE matches the affirmation
855    or negative response expression as specified by the LC_MESSAGES category
856    in the program's current locale.  Returns 1 if affirmative, 0 if
857    negative, and -1 if not matching.  */
858 extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur;
859 #endif
860
861
862 #ifdef __USE_XOPEN_EXTENDED
863 /* Parse comma separated suboption from *OPTIONP and match against
864    strings in TOKENS.  If found return index and set *VALUEP to
865    optional value introduced by an equal sign.  If the suboption is
866    not part of TOKENS return in *VALUEP beginning of unknown
867    suboption.  On exit *OPTIONP is set to the beginning of the next
868    token or at the terminating NUL character.  */
869 extern int getsubopt (char **__restrict __optionp,
870                       char *const *__restrict __tokens,
871                       char **__restrict __valuep)
872      __THROW __nonnull ((1, 2, 3)) __wur;
873 #endif
874
875
876 #ifdef __USE_XOPEN
877 # if defined __UCLIBC_HAS_CRYPT__
878 /* Setup DES tables according KEY.  */
879 extern void setkey (const char *__key) __THROW __nonnull ((1));
880 # endif /* __UCLIBC_HAS_CRYPT__ */
881 #endif
882
883
884 /* X/Open pseudo terminal handling.  */
885
886 #ifdef __USE_XOPEN2K
887 /* Return a master pseudo-terminal handle.  */
888 extern int posix_openpt (int __oflag) __wur;
889 #endif
890
891 #ifdef __USE_XOPEN
892 /* The next four functions all take a master pseudo-tty fd and
893    perform an operation on the associated slave:  */
894
895 #ifdef __UCLIBC_HAS_PTY__
896 /* Chown the slave to the calling user.  */
897 extern int grantpt (int __fd) __THROW;
898
899 /* Release an internal lock so the slave can be opened.
900    Call after grantpt().  */
901 extern int unlockpt (int __fd) __THROW;
902
903 /* Return the pathname of the pseudo terminal slave assoicated with
904    the master FD is open on, or NULL on errors.
905    The returned storage is good until the next call to this function.  */
906 extern char *ptsname (int __fd) __THROW __wur;
907 #endif /* __UCLIBC_HAS_PTY__ */
908 #endif
909
910 #ifdef __USE_GNU
911 # if defined __UCLIBC_HAS_PTY__
912 /* Store at most BUFLEN characters of the pathname of the slave pseudo
913    terminal associated with the master FD is open on in BUF.
914    Return 0 on success, otherwise an error number.  */
915 extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
916      __THROW __nonnull ((2));
917 libc_hidden_proto(ptsname_r)
918 # endif
919 # if defined __UCLIBC_HAS_GETPT__
920 /* Open a master pseudo terminal and return its file descriptor.  */
921 extern int getpt (void);
922 # endif
923 #endif
924
925 #if 0 /* def __USE_BSD */
926 /* Put the 1 minute, 5 minute and 15 minute load averages into the first
927    NELEM elements of LOADAVG.  Return the number written (never more than
928    three, but may be less than NELEM), or -1 if an error occurred.  */
929 extern int getloadavg (double __loadavg[], int __nelem)
930      __THROW __nonnull ((1));
931 #endif
932
933 #ifdef __UCLIBC_HAS_ARC4RANDOM__
934 # include <sys/types.h>
935 extern u_int32_t arc4random(void);
936 extern void arc4random_stir(void);
937 extern void arc4random_addrandom(unsigned char *, int);
938 #endif
939
940 #ifdef _LIBC
941 extern int __drand48_iterate (unsigned short int xsubi[3], struct drand48_data *buffer) attribute_hidden;
942
943 /* Global state for non-reentrant functions.  */
944 extern struct drand48_data __libc_drand48_data attribute_hidden;
945 #endif
946
947 #endif /* don't just need malloc and calloc */
948 #undef __need_malloc_and_calloc
949
950 __END_DECLS
951
952 #endif /* stdlib.h  */