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 #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ 23 24 #else 25 /* Normal invocation convention. */ 26 27 #ifndef _GL_STDLIB_H 28 29 /* The include_next requires a split double-inclusion guard. */ 30 #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ 31 32 #ifndef _GL_STDLIB_H 33 #define _GL_STDLIB_H 34 35 36 /* The definition of GL_LINK_WARNING is copied here. */ 37 38 39 /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ 40 #ifndef EXIT_SUCCESS 41 # define EXIT_SUCCESS 0 42 #endif 43 /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere 44 with proper operation of xargs. */ 45 #ifndef EXIT_FAILURE 46 # define EXIT_FAILURE 1 47 #elif EXIT_FAILURE != 1 48 # undef EXIT_FAILURE 49 # define EXIT_FAILURE 1 50 #endif 51 52 53 #ifdef __cplusplus 54 extern "C" { 55 #endif 56 57 58 #if @GNULIB_MALLOC_POSIX@ 59 # if !@HAVE_MALLOC_POSIX@ 60 # undef malloc 61 # define malloc rpl_malloc 62 extern void * malloc (size_t size); 63 # endif 64 #elif defined GNULIB_POSIXCHECK 65 # undef malloc 66 # define malloc(s) \ 67 (GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \ 68 "use gnulib module malloc-posix for portability"), \ 69 malloc (s)) 70 #endif 71 72 73 #if @GNULIB_REALLOC_POSIX@ 74 # if !@HAVE_REALLOC_POSIX@ 75 # undef realloc 76 # define realloc rpl_realloc 77 extern void * realloc (void *ptr, size_t size); 78 # endif 79 #elif defined GNULIB_POSIXCHECK 80 # undef realloc 81 # define realloc(p,s) \ 82 (GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \ 83 "use gnulib module realloc-posix for portability"), \ 84 realloc (p, s)) 85 #endif 86 87 88 #if @GNULIB_CALLOC_POSIX@ 89 # if !@HAVE_CALLOC_POSIX@ 90 # undef calloc 91 # define calloc rpl_calloc 92 extern void * calloc (size_t nmemb, size_t size); 93 # endif 94 #elif defined GNULIB_POSIXCHECK 95 # undef calloc 96 # define calloc(n,s) \ 97 (GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \ 98 "use gnulib module calloc-posix for portability"), \ 99 calloc (n, s)) 100 #endif 101 102 103 #if @GNULIB_GETSUBOPT@ 104 /* Assuming *OPTIONP is a comma separated list of elements of the form 105 "token" or "token=value", getsubopt parses the first of these elements. 106 If the first element refers to a "token" that is member of the given 107 NULL-terminated array of tokens: 108 - It replaces the comma with a NUL byte, updates *OPTIONP to point past 109 the first option and the comma, sets *VALUEP to the value of the 110 element (or NULL if it doesn't contain an "=" sign), 111 - It returns the index of the "token" in the given array of tokens. 112 Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. 113 For more details see the POSIX:2001 specification. 114 http://www.opengroup.org/susv3xsh/getsubopt.html */ 115 # if !@HAVE_GETSUBOPT@ 116 extern int getsubopt (char **optionp, char *const *tokens, char **valuep); 117 # endif 118 #elif defined GNULIB_POSIXCHECK 119 # undef getsubopt 120 # define getsubopt(o,t,v) \ 121 (GL_LINK_WARNING ("getsubopt is unportable - " \ 122 "use gnulib module getsubopt for portability"), \ 123 getsubopt (o, t, v)) 124 #endif 125 126 127 #if @GNULIB_MKDTEMP@ 128 # if !@HAVE_MKDTEMP@ 129 /* Create a unique temporary directory from TEMPLATE. 130 The last six characters of TEMPLATE must be "XXXXXX"; 131 they are replaced with a string that makes the directory name unique. 132 Returns TEMPLATE, or a null pointer if it cannot get a unique name. 133 The directory is created mode 700. */ 134 extern char * mkdtemp (char * /*template*/); 135 # endif 136 #elif defined GNULIB_POSIXCHECK 137 # undef mkdtemp 138 # define mkdtemp(t) \ 139 (GL_LINK_WARNING ("mkdtemp is unportable - " \ 140 "use gnulib module mkdtemp for portability"), \ 141 mkdtemp (t)) 142 #endif 143 144 145 #if @GNULIB_MKSTEMP@ 146 # if @REPLACE_MKSTEMP@ 147 /* Create a unique temporary file from TEMPLATE. 148 The last six characters of TEMPLATE must be "XXXXXX"; 149 they are replaced with a string that makes the file name unique. 150 The file is then created, ensuring it didn't exist before. 151 The file is created read-write (mask at least 0600 & ~umask), but it may be 152 world-readable and world-writable (mask 0666 & ~umask), depending on the 153 implementation. 154 Returns the open file descriptor if successful, otherwise -1 and errno 155 set. */ 156 # define mkstemp rpl_mkstemp 157 extern int mkstemp (char * /*template*/); 158 # else 159 /* On MacOS X 10.3, only <unistd.h> declares mkstemp. */ 160 # include <unistd.h> 161 # endif 162 #elif defined GNULIB_POSIXCHECK 163 # undef mkstemp 164 # define mkstemp(t) \ 165 (GL_LINK_WARNING ("mkstemp is unportable - " \ 166 "use gnulib module mkstemp for portability"), \ 167 mkstemp (t)) 168 #endif 169 170 171 #ifdef __cplusplus 172 } 173 #endif 174 175 #endif /* _GL_STDLIB_H */ 176 #endif /* _GL_STDLIB_H */ 177 #endif 178