1/* A GNU-like <stdlib.h>.
2
3   Copyright (C) 1995, 2001-2002, 2006-2007 Free Software Foundation, Inc.
4
5   This program is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published by
7   the Free Software Foundation; either version 2, or (at your option)
8   any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14
15   You should have received a copy of the GNU General Public License
16   along with this program; if not, write to the Free Software Foundation,
17   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
18
19#if defined __need_malloc_and_calloc
20/* Special invocation convention inside glibc header files.  */
21
22#if @HAVE_INCLUDE_NEXT@
23# include_next <stdlib.h>
24#else
25# include @ABSOLUTE_STDLIB_H@
26#endif
27
28#else
29/* Normal invocation convention.  */
30
31#ifndef _GL_STDLIB_H
32
33/* The include_next requires a split double-inclusion guard.  */
34#if @HAVE_INCLUDE_NEXT@
35# include_next <stdlib.h>
36#else
37# include @ABSOLUTE_STDLIB_H@
38#endif
39
40#ifndef _GL_STDLIB_H
41#define _GL_STDLIB_H
42
43
44/* The definition of GL_LINK_WARNING is copied here.  */
45
46
47/* Some systems do not define EXIT_*, despite otherwise supporting C89.  */
48#ifndef EXIT_SUCCESS
49# define EXIT_SUCCESS 0
50#endif
51/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
52   with proper operation of xargs.  */
53#ifndef EXIT_FAILURE
54# define EXIT_FAILURE 1
55#elif EXIT_FAILURE != 1
56# undef EXIT_FAILURE
57# define EXIT_FAILURE 1
58#endif
59
60
61#ifdef __cplusplus
62extern "C" {
63#endif
64
65
66#if @GNULIB_GETSUBOPT@
67/* Assuming *OPTIONP is a comma separated list of elements of the form
68   "token" or "token=value", getsubopt parses the first of these elements.
69   If the first element refers to a "token" that is member of the given
70   NULL-terminated array of tokens:
71     - It replaces the comma with a NUL byte, updates *OPTIONP to point past
72       the first option and the comma, sets *VALUEP to the value of the
73       element (or NULL if it doesn't contain an "=" sign),
74     - It returns the index of the "token" in the given array of tokens.
75   Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
76   For more details see the POSIX:2001 specification.
77   http://www.opengroup.org/susv3xsh/getsubopt.html */
78# if !@HAVE_GETSUBOPT@
79extern int getsubopt (char **optionp, char *const *tokens, char **valuep);
80# endif
81#elif defined GNULIB_POSIXCHECK
82# undef getsubopt
83# define getsubopt(o,t,v) \
84    (GL_LINK_WARNING ("getsubopt is unportable - " \
85                      "use gnulib module getsubopt for portability"), \
86     getsubopt (o, t, v))
87#endif
88
89
90#if @GNULIB_MKDTEMP@
91# if !@HAVE_MKDTEMP@
92/* Create a unique temporary directory from TEMPLATE.
93   The last six characters of TEMPLATE must be "XXXXXX";
94   they are replaced with a string that makes the directory name unique.
95   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
96   The directory is created mode 700.  */
97extern char * mkdtemp (char * /*template*/);
98# endif
99#elif defined GNULIB_POSIXCHECK
100# undef mkdtemp
101# define mkdtemp(t) \
102    (GL_LINK_WARNING ("mkdtemp is unportable - " \
103                      "use gnulib module mkdtemp for portability"), \
104     mkdtemp (t))
105#endif
106
107
108#if @GNULIB_MKSTEMP@
109# if @REPLACE_MKSTEMP@
110/* Create a unique temporary file from TEMPLATE.
111   The last six characters of TEMPLATE must be "XXXXXX";
112   they are replaced with a string that makes the file name unique.
113   The file is then created, ensuring it didn't exist before.
114   The file is created read-write (mask at least 0600 & ~umask), but it may be
115   world-readable and world-writable (mask 0666 & ~umask), depending on the
116   implementation.
117   Returns the open file descriptor if successful, otherwise -1 and errno
118   set.  */
119#  define mkstemp rpl_mkstemp
120extern int mkstemp (char * /*template*/);
121# else
122/* On MacOS X 10.3, only <unistd.h> declares mkstemp.  */
123#  include <unistd.h>
124# endif
125#elif defined GNULIB_POSIXCHECK
126# undef mkstemp
127# define mkstemp(t) \
128    (GL_LINK_WARNING ("mkstemp is unportable - " \
129                      "use gnulib module mkstemp for portability"), \
130     mkstemp (t))
131#endif
132
133
134#ifdef __cplusplus
135}
136#endif
137
138#endif /* _GL_STDLIB_H */
139#endif /* _GL_STDLIB_H */
140#endif
141