Mercurial > hg > octave-kai > gnulib-hg
annotate lib/stdio.in.h @ 11653:ecb384fccb5b
fpurge: migrate into <stdio.h>
* lib/fpurge.h: Delete...
* lib/stdio.in.h (fpurge): ...and declare here, instead.
* lib/fpurge.c (fpurge): Change declaring header.
* modules/fpurge (Files): Drop deleted file.
(Depends-on): Add stdio.
(configure.ac): Set witness.
* modules/stdio (Makefile.am): Support fpurge macros.
* m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Likewise.
* m4/fpurge.m4 (gl_FUNC_FPURGE): Set appropriate variables.
* lib/fflush.c: Update client.
* tests/test-fpurge.c: Likewise.
* NEWS: Mention the change.
Signed-off-by: Eric Blake <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Wed, 24 Jun 2009 06:49:00 -0600 |
parents | bf21f4597784 |
children | de4ad188001d |
rev | line source |
---|---|
9262 | 1 /* A GNU-like <stdio.h>. |
2 | |
11653 | 3 Copyright (C) 2004, 2007-2009 Free Software Foundation, Inc. |
9262 | 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 | |
10655
8668b19a7032
Avoid gcc warnings because of #pragma GCC system_header on older gcc.
Bruno Haible <bruno@clisp.org>
parents:
10622
diff
changeset
|
19 #if __GNUC__ >= 3 |
10375
f96e845fc36d
Avoid some "gcc -pedantic" warnings.
Bruno Haible <bruno@clisp.org>
parents:
10205
diff
changeset
|
20 @PRAGMA_SYSTEM_HEADER@ |
10655
8668b19a7032
Avoid gcc warnings because of #pragma GCC system_header on older gcc.
Bruno Haible <bruno@clisp.org>
parents:
10622
diff
changeset
|
21 #endif |
10375
f96e845fc36d
Avoid some "gcc -pedantic" warnings.
Bruno Haible <bruno@clisp.org>
parents:
10205
diff
changeset
|
22 |
9262 | 23 #if defined __need_FILE || defined __need___FILE |
24 /* Special invocation convention inside glibc header files. */ | |
25 | |
26 #@INCLUDE_NEXT@ @NEXT_STDIO_H@ | |
27 | |
28 #else | |
29 /* Normal invocation convention. */ | |
30 | |
31 #ifndef _GL_STDIO_H | |
32 | |
33 /* The include_next requires a split double-inclusion guard. */ | |
34 #@INCLUDE_NEXT@ @NEXT_STDIO_H@ | |
35 | |
36 #ifndef _GL_STDIO_H | |
37 #define _GL_STDIO_H | |
38 | |
39 #include <stdarg.h> | |
40 #include <stddef.h> | |
41 | |
42 #if (@GNULIB_FSEEKO@ && @REPLACE_FSEEKO@) \ | |
43 || (@GNULIB_FTELLO@ && @REPLACE_FTELLO@) \ | |
44 || (@GNULIB_GETDELIM@ && !@HAVE_DECL_GETDELIM@) \ | |
45 || (@GNULIB_GETLINE@ && (!@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@)) | |
46 /* Get off_t and ssize_t. */ | |
47 # include <sys/types.h> | |
48 #endif | |
49 | |
50 #ifndef __attribute__ | |
51 /* This feature is available in gcc versions 2.5 and later. */ | |
9613
c4fa39bf5223
Don't redefine __attribute__ without a need.
Bruno Haible <bruno@clisp.org>
parents:
9301
diff
changeset
|
52 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) |
9262 | 53 # define __attribute__(Spec) /* empty */ |
54 # endif | |
55 /* The __-protected variants of `format' and `printf' attributes | |
56 are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ | |
57 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) | |
58 # define __format__ format | |
59 # define __printf__ printf | |
60 # endif | |
61 #endif | |
62 | |
63 | |
64 /* The definition of GL_LINK_WARNING is copied here. */ | |
65 | |
66 | |
67 #ifdef __cplusplus | |
68 extern "C" { | |
69 #endif | |
70 | |
71 | |
72 #if @GNULIB_FPRINTF_POSIX@ | |
73 # if @REPLACE_FPRINTF@ | |
74 # define fprintf rpl_fprintf | |
75 extern int fprintf (FILE *fp, const char *format, ...) | |
76 __attribute__ ((__format__ (__printf__, 2, 3))); | |
77 # endif | |
10487
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
78 #elif @GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
79 # define fprintf rpl_fprintf |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
80 extern int fprintf (FILE *fp, const char *format, ...) |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
81 __attribute__ ((__format__ (__printf__, 2, 3))); |
9262 | 82 #elif defined GNULIB_POSIXCHECK |
83 # undef fprintf | |
84 # define fprintf \ | |
85 (GL_LINK_WARNING ("fprintf is not always POSIX compliant - " \ | |
86 "use gnulib module fprintf-posix for portable " \ | |
87 "POSIX compliance"), \ | |
88 fprintf) | |
89 #endif | |
90 | |
91 #if @GNULIB_VFPRINTF_POSIX@ | |
92 # if @REPLACE_VFPRINTF@ | |
93 # define vfprintf rpl_vfprintf | |
94 extern int vfprintf (FILE *fp, const char *format, va_list args) | |
95 __attribute__ ((__format__ (__printf__, 2, 0))); | |
96 # endif | |
10487
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
97 #elif @GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
98 # define vfprintf rpl_vfprintf |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
99 extern int vfprintf (FILE *fp, const char *format, va_list args) |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
100 __attribute__ ((__format__ (__printf__, 2, 0))); |
9262 | 101 #elif defined GNULIB_POSIXCHECK |
102 # undef vfprintf | |
103 # define vfprintf(s,f,a) \ | |
104 (GL_LINK_WARNING ("vfprintf is not always POSIX compliant - " \ | |
105 "use gnulib module vfprintf-posix for portable " \ | |
106 "POSIX compliance"), \ | |
107 vfprintf (s, f, a)) | |
108 #endif | |
109 | |
110 #if @GNULIB_PRINTF_POSIX@ | |
111 # if @REPLACE_PRINTF@ | |
112 /* Don't break __attribute__((format(printf,M,N))). */ | |
113 # define printf __printf__ | |
114 extern int printf (const char *format, ...) | |
115 __attribute__ ((__format__ (__printf__, 1, 2))); | |
116 # endif | |
10487
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
117 #elif @GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
118 /* Don't break __attribute__((format(printf,M,N))). */ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
119 # define printf __printf__ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
120 extern int printf (const char *format, ...) |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
121 __attribute__ ((__format__ (__printf__, 1, 2))); |
9262 | 122 #elif defined GNULIB_POSIXCHECK |
123 # undef printf | |
124 # define printf \ | |
125 (GL_LINK_WARNING ("printf is not always POSIX compliant - " \ | |
126 "use gnulib module printf-posix for portable " \ | |
127 "POSIX compliance"), \ | |
128 printf) | |
129 /* Don't break __attribute__((format(printf,M,N))). */ | |
130 # define format(kind,m,n) format (__##kind##__, m, n) | |
131 # define __format__(kind,m,n) __format__ (__##kind##__, m, n) | |
132 # define ____printf____ __printf__ | |
133 # define ____scanf____ __scanf__ | |
134 # define ____strftime____ __strftime__ | |
135 # define ____strfmon____ __strfmon__ | |
136 #endif | |
137 | |
138 #if @GNULIB_VPRINTF_POSIX@ | |
139 # if @REPLACE_VPRINTF@ | |
140 # define vprintf rpl_vprintf | |
141 extern int vprintf (const char *format, va_list args) | |
142 __attribute__ ((__format__ (__printf__, 1, 0))); | |
143 # endif | |
10487
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
144 #elif @GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
145 # define vprintf rpl_vprintf |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
146 extern int vprintf (const char *format, va_list args) |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
147 __attribute__ ((__format__ (__printf__, 1, 0))); |
9262 | 148 #elif defined GNULIB_POSIXCHECK |
149 # undef vprintf | |
150 # define vprintf(f,a) \ | |
151 (GL_LINK_WARNING ("vprintf is not always POSIX compliant - " \ | |
152 "use gnulib module vprintf-posix for portable " \ | |
153 "POSIX compliance"), \ | |
154 vprintf (f, a)) | |
155 #endif | |
156 | |
157 #if @GNULIB_SNPRINTF@ | |
158 # if @REPLACE_SNPRINTF@ | |
159 # define snprintf rpl_snprintf | |
160 # endif | |
161 # if @REPLACE_SNPRINTF@ || !@HAVE_DECL_SNPRINTF@ | |
162 extern int snprintf (char *str, size_t size, const char *format, ...) | |
163 __attribute__ ((__format__ (__printf__, 3, 4))); | |
164 # endif | |
165 #elif defined GNULIB_POSIXCHECK | |
166 # undef snprintf | |
167 # define snprintf \ | |
168 (GL_LINK_WARNING ("snprintf is unportable - " \ | |
169 "use gnulib module snprintf for portability"), \ | |
170 snprintf) | |
171 #endif | |
172 | |
173 #if @GNULIB_VSNPRINTF@ | |
174 # if @REPLACE_VSNPRINTF@ | |
175 # define vsnprintf rpl_vsnprintf | |
176 # endif | |
177 # if @REPLACE_VSNPRINTF@ || !@HAVE_DECL_VSNPRINTF@ | |
178 extern int vsnprintf (char *str, size_t size, const char *format, va_list args) | |
179 __attribute__ ((__format__ (__printf__, 3, 0))); | |
180 # endif | |
181 #elif defined GNULIB_POSIXCHECK | |
182 # undef vsnprintf | |
183 # define vsnprintf(b,s,f,a) \ | |
184 (GL_LINK_WARNING ("vsnprintf is unportable - " \ | |
185 "use gnulib module vsnprintf for portability"), \ | |
186 vsnprintf (b, s, f, a)) | |
187 #endif | |
188 | |
189 #if @GNULIB_SPRINTF_POSIX@ | |
190 # if @REPLACE_SPRINTF@ | |
191 # define sprintf rpl_sprintf | |
192 extern int sprintf (char *str, const char *format, ...) | |
193 __attribute__ ((__format__ (__printf__, 2, 3))); | |
194 # endif | |
195 #elif defined GNULIB_POSIXCHECK | |
196 # undef sprintf | |
197 # define sprintf \ | |
198 (GL_LINK_WARNING ("sprintf is not always POSIX compliant - " \ | |
199 "use gnulib module sprintf-posix for portable " \ | |
200 "POSIX compliance"), \ | |
201 sprintf) | |
202 #endif | |
203 | |
204 #if @GNULIB_VSPRINTF_POSIX@ | |
205 # if @REPLACE_VSPRINTF@ | |
206 # define vsprintf rpl_vsprintf | |
207 extern int vsprintf (char *str, const char *format, va_list args) | |
208 __attribute__ ((__format__ (__printf__, 2, 0))); | |
209 # endif | |
210 #elif defined GNULIB_POSIXCHECK | |
211 # undef vsprintf | |
212 # define vsprintf(b,f,a) \ | |
213 (GL_LINK_WARNING ("vsprintf is not always POSIX compliant - " \ | |
214 "use gnulib module vsprintf-posix for portable " \ | |
215 "POSIX compliance"), \ | |
216 vsprintf (b, f, a)) | |
217 #endif | |
218 | |
11035
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
219 #if @GNULIB_DPRINTF@ |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
220 # if @REPLACE_DPRINTF@ |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
221 # define dprintf rpl_dprintf |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
222 # endif |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
223 # if @REPLACE_DPRINTF@ || !@HAVE_DPRINTF@ |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
224 extern int dprintf (int fd, const char *format, ...) |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
225 __attribute__ ((__format__ (__printf__, 2, 3))); |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
226 # endif |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
227 #elif defined GNULIB_POSIXCHECK |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
228 # undef dprintf |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
229 # define dprintf(d,f,a) \ |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
230 (GL_LINK_WARNING ("dprintf is unportable - " \ |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
231 "use gnulib module dprintf for portability"), \ |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
232 dprintf (d, f, a)) |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
233 #endif |
bf21f4597784
New modules 'dprintf', 'dprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
11033
diff
changeset
|
234 |
11033
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
235 #if @GNULIB_VDPRINTF@ |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
236 # if @REPLACE_VDPRINTF@ |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
237 # define vdprintf rpl_vdprintf |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
238 # endif |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
239 # if @REPLACE_VDPRINTF@ || !@HAVE_VDPRINTF@ |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
240 extern int vdprintf (int fd, const char *format, va_list args) |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
241 __attribute__ ((__format__ (__printf__, 2, 0))); |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
242 # endif |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
243 #elif defined GNULIB_POSIXCHECK |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
244 # undef vdprintf |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
245 # define vdprintf(d,f,a) \ |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
246 (GL_LINK_WARNING ("vdprintf is unportable - " \ |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
247 "use gnulib module vdprintf for portability"), \ |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
248 vdprintf (d, f, a)) |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
249 #endif |
049c445485ee
New modules 'vdprintf', 'vdprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
250 |
9262 | 251 #if @GNULIB_VASPRINTF@ |
252 # if @REPLACE_VASPRINTF@ | |
253 # define asprintf rpl_asprintf | |
254 # define vasprintf rpl_vasprintf | |
255 # endif | |
256 # if @REPLACE_VASPRINTF@ || !@HAVE_VASPRINTF@ | |
257 /* Write formatted output to a string dynamically allocated with malloc(). | |
258 If the memory allocation succeeds, store the address of the string in | |
259 *RESULT and return the number of resulting bytes, excluding the trailing | |
260 NUL. Upon memory allocation error, or some other error, return -1. */ | |
261 extern int asprintf (char **result, const char *format, ...) | |
262 __attribute__ ((__format__ (__printf__, 2, 3))); | |
263 extern int vasprintf (char **result, const char *format, va_list args) | |
264 __attribute__ ((__format__ (__printf__, 2, 0))); | |
265 # endif | |
266 #endif | |
267 | |
10205
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
268 #if @GNULIB_OBSTACK_PRINTF@ |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
269 # if @REPLACE_OBSTACK_PRINTF@ |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
270 # define obstack_printf rpl_osbtack_printf |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
271 # define obstack_vprintf rpl_obstack_vprintf |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
272 # endif |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
273 # if @REPLACE_OBSTACK_PRINTF@ || !@HAVE_DECL_OBSTACK_PRINTF@ |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
274 struct obstack; |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
275 /* Grow an obstack with formatted output. Return the number of |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
276 bytes added to OBS. No trailing nul byte is added, and the |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
277 object should be closed with obstack_finish before use. Upon |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
278 memory allocation error, call obstack_alloc_failed_handler. Upon |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
279 other error, return -1. */ |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
280 extern int obstack_printf (struct obstack *obs, const char *format, ...) |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
281 __attribute__ ((__format__ (__printf__, 2, 3))); |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
282 extern int obstack_vprintf (struct obstack *obs, const char *format, |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
283 va_list args) |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
284 __attribute__ ((__format__ (__printf__, 2, 0))); |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
285 # endif |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
286 #endif |
3384541effec
Add obstack-printf and obstack-printf-posix modules.
Eric Blake <ebb9@byu.net>
parents:
9613
diff
changeset
|
287 |
9301
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
288 #if @GNULIB_FOPEN@ |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
289 # if @REPLACE_FOPEN@ |
10528
97cab1215a7c
Tweak patch that overrides open() and fopen().
Bruno Haible <bruno@clisp.org>
parents:
10487
diff
changeset
|
290 # undef fopen |
9301
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
291 # define fopen rpl_fopen |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
292 extern FILE * fopen (const char *filename, const char *mode); |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
293 # endif |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
294 #elif defined GNULIB_POSIXCHECK |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
295 # undef fopen |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
296 # define fopen(f,m) \ |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
297 (GL_LINK_WARNING ("fopen on Win32 platforms is not POSIX compatible - " \ |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
298 "use gnulib module fopen for portability"), \ |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
299 fopen (f, m)) |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
300 #endif |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
301 |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
302 #if @GNULIB_FREOPEN@ |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
303 # if @REPLACE_FREOPEN@ |
10528
97cab1215a7c
Tweak patch that overrides open() and fopen().
Bruno Haible <bruno@clisp.org>
parents:
10487
diff
changeset
|
304 # undef freopen |
9301
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
305 # define freopen rpl_freopen |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
306 extern FILE * freopen (const char *filename, const char *mode, FILE *stream); |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
307 # endif |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
308 #elif defined GNULIB_POSIXCHECK |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
309 # undef freopen |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
310 # define freopen(f,m,s) \ |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
311 (GL_LINK_WARNING ("freopen on Win32 platforms is not POSIX compatible - " \ |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
312 "use gnulib module freopen for portability"), \ |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
313 freopen (f, m, s)) |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
314 #endif |
98e1721b4e40
New modules 'fopen' and 'freopen'.
Bruno Haible <bruno@clisp.org>
parents:
9262
diff
changeset
|
315 |
9262 | 316 #if @GNULIB_FSEEKO@ |
317 # if @REPLACE_FSEEKO@ | |
318 /* Provide fseek, fseeko functions that are aware of a preceding | |
319 fflush(), and which detect pipes. */ | |
320 # define fseeko rpl_fseeko | |
321 extern int fseeko (FILE *fp, off_t offset, int whence); | |
322 # define fseek(fp, offset, whence) fseeko (fp, (off_t)(offset), whence) | |
323 # endif | |
324 #elif defined GNULIB_POSIXCHECK | |
325 # undef fseeko | |
326 # define fseeko(f,o,w) \ | |
327 (GL_LINK_WARNING ("fseeko is unportable - " \ | |
328 "use gnulib module fseeko for portability"), \ | |
329 fseeko (f, o, w)) | |
330 #endif | |
331 | |
332 #if @GNULIB_FSEEK@ && @REPLACE_FSEEK@ | |
333 extern int rpl_fseek (FILE *fp, long offset, int whence); | |
334 # undef fseek | |
335 # if defined GNULIB_POSIXCHECK | |
336 # define fseek(f,o,w) \ | |
337 (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ | |
338 "on 32-bit platforms - " \ | |
339 "use fseeko function for handling of large files"), \ | |
340 rpl_fseek (f, o, w)) | |
341 # else | |
342 # define fseek rpl_fseek | |
343 # endif | |
344 #elif defined GNULIB_POSIXCHECK | |
345 # ifndef fseek | |
346 # define fseek(f,o,w) \ | |
347 (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ | |
348 "on 32-bit platforms - " \ | |
349 "use fseeko function for handling of large files"), \ | |
350 fseek (f, o, w)) | |
351 # endif | |
352 #endif | |
353 | |
354 #if @GNULIB_FTELLO@ | |
355 # if @REPLACE_FTELLO@ | |
356 # define ftello rpl_ftello | |
357 extern off_t ftello (FILE *fp); | |
358 # define ftell(fp) ftello (fp) | |
359 # endif | |
360 #elif defined GNULIB_POSIXCHECK | |
361 # undef ftello | |
362 # define ftello(f) \ | |
363 (GL_LINK_WARNING ("ftello is unportable - " \ | |
364 "use gnulib module ftello for portability"), \ | |
365 ftello (f)) | |
366 #endif | |
367 | |
368 #if @GNULIB_FTELL@ && @REPLACE_FTELL@ | |
369 extern long rpl_ftell (FILE *fp); | |
370 # undef ftell | |
371 # if GNULIB_POSIXCHECK | |
372 # define ftell(f) \ | |
373 (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ | |
374 "on 32-bit platforms - " \ | |
375 "use ftello function for handling of large files"), \ | |
376 rpl_ftell (f)) | |
377 # else | |
378 # define ftell rpl_ftell | |
379 # endif | |
380 #elif defined GNULIB_POSIXCHECK | |
381 # ifndef ftell | |
382 # define ftell(f) \ | |
383 (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ | |
384 "on 32-bit platforms - " \ | |
385 "use ftello function for handling of large files"), \ | |
386 ftell (f)) | |
387 # endif | |
388 #endif | |
389 | |
390 #if @GNULIB_FFLUSH@ | |
391 # if @REPLACE_FFLUSH@ | |
392 # define fflush rpl_fflush | |
393 /* Flush all pending data on STREAM according to POSIX rules. Both | |
394 output and seekable input streams are supported. | |
395 Note! LOSS OF DATA can occur if fflush is applied on an input stream | |
396 that is _not_seekable_ or on an update stream that is _not_seekable_ | |
397 and in which the most recent operation was input. Seekability can | |
398 be tested with lseek(fileno(fp),0,SEEK_CUR). */ | |
399 extern int fflush (FILE *gl_stream); | |
400 # endif | |
401 #elif defined GNULIB_POSIXCHECK | |
402 # undef fflush | |
403 # define fflush(f) \ | |
404 (GL_LINK_WARNING ("fflush is not always POSIX compliant - " \ | |
405 "use gnulib module fflush for portable " \ | |
406 "POSIX compliance"), \ | |
407 fflush (f)) | |
408 #endif | |
409 | |
11653 | 410 #if @GNULIB_FPURGE@ |
411 # if @REPLACE_FPURGE@ | |
412 # define fpurge rpl_fpurge | |
413 # endif | |
414 # if @REPLACE_FPURGE@ || !@HAVE_DECL_FPURGE@ | |
415 /* Discard all pending buffered I/O data on STREAM. | |
416 STREAM must not be wide-character oriented. | |
417 Return 0 if successful. Upon error, return -1 and set errno. */ | |
418 extern int fpurge (FILE *gl_stream); | |
419 # endif | |
420 #elif defined GNULIB_POSIXCHECK | |
421 # undef fpurge | |
422 # define fpurge(f) \ | |
423 (GL_LINK_WARNING ("fpurge is not always present - " \ | |
424 "use gnulib module fpurge for portability"), \ | |
425 fpurge (f)) | |
426 #endif | |
427 | |
10622 | 428 #if @GNULIB_FCLOSE@ |
429 # if @REPLACE_FCLOSE@ | |
430 # define fclose rpl_fclose | |
431 /* Close STREAM and its underlying file descriptor. */ | |
432 extern int fclose (FILE *stream); | |
433 # endif | |
434 #elif defined GNULIB_POSIXCHECK | |
435 # undef fclose | |
436 # define fclose(f) \ | |
437 (GL_LINK_WARNING ("fclose is not always POSIX compliant - " \ | |
438 "use gnulib module fclose for portable " \ | |
439 "POSIX compliance"), \ | |
440 fclose (f)) | |
441 #endif | |
442 | |
10487
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
443 #if @GNULIB_FPUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
444 # undef fputc |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
445 # define fputc rpl_fputc |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
446 extern int fputc (int c, FILE *stream); |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
447 #endif |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
448 |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
449 #if @GNULIB_PUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
450 # undef putc |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
451 # define putc rpl_fputc |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
452 extern int putc (int c, FILE *stream); |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
453 #endif |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
454 |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
455 #if @GNULIB_PUTCHAR@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
456 # undef putchar |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
457 # define putchar rpl_putchar |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
458 extern int putchar (int c); |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
459 #endif |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
460 |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
461 #if @GNULIB_FPUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
462 # undef fputs |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
463 # define fputs rpl_fputs |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
464 extern int fputs (const char *string, FILE *stream); |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
465 #endif |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
466 |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
467 #if @GNULIB_PUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
468 # undef puts |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
469 # define puts rpl_puts |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
470 extern int puts (const char *string); |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
471 #endif |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
472 |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
473 #if @GNULIB_FWRITE@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
474 # undef fwrite |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
475 # define fwrite rpl_fwrite |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
476 extern size_t fwrite (const void *ptr, size_t s, size_t n, FILE *stream); |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
477 #endif |
953f72c1ffcc
Support SIGPIPE in stdio functions for writing.
Bruno Haible <bruno@clisp.org>
parents:
10433
diff
changeset
|
478 |
9262 | 479 #if @GNULIB_GETDELIM@ |
480 # if !@HAVE_DECL_GETDELIM@ | |
481 /* Read input, up to (and including) the next occurrence of DELIMITER, from | |
482 STREAM, store it in *LINEPTR (and NUL-terminate it). | |
483 *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE | |
484 bytes of space. It is realloc'd as necessary. | |
485 Return the number of bytes read and stored at *LINEPTR (not including the | |
486 NUL terminator), or -1 on error or EOF. */ | |
487 extern ssize_t getdelim (char **lineptr, size_t *linesize, int delimiter, | |
488 FILE *stream); | |
489 # endif | |
490 #elif defined GNULIB_POSIXCHECK | |
491 # undef getdelim | |
492 # define getdelim(l, s, d, f) \ | |
493 (GL_LINK_WARNING ("getdelim is unportable - " \ | |
494 "use gnulib module getdelim for portability"), \ | |
495 getdelim (l, s, d, f)) | |
496 #endif | |
497 | |
498 #if @GNULIB_GETLINE@ | |
499 # if @REPLACE_GETLINE@ | |
500 # undef getline | |
501 # define getline rpl_getline | |
502 # endif | |
503 # if !@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@ | |
504 /* Read a line, up to (and including) the next newline, from STREAM, store it | |
505 in *LINEPTR (and NUL-terminate it). | |
506 *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE | |
507 bytes of space. It is realloc'd as necessary. | |
508 Return the number of bytes read and stored at *LINEPTR (not including the | |
509 NUL terminator), or -1 on error or EOF. */ | |
510 extern ssize_t getline (char **lineptr, size_t *linesize, FILE *stream); | |
511 # endif | |
512 #elif defined GNULIB_POSIXCHECK | |
513 # undef getline | |
514 # define getline(l, s, f) \ | |
515 (GL_LINK_WARNING ("getline is unportable - " \ | |
516 "use gnulib module getline for portability"), \ | |
517 getline (l, s, f)) | |
518 #endif | |
519 | |
10433 | 520 #if @GNULIB_PERROR@ |
521 # if @REPLACE_PERROR@ | |
522 # define perror rpl_perror | |
523 /* Print a message to standard error, describing the value of ERRNO, | |
524 (if STRING is not NULL and not empty) prefixed with STRING and ": ", | |
525 and terminated with a newline. */ | |
526 extern void perror (const char *string); | |
527 # endif | |
528 #elif defined GNULIB_POSIXCHECK | |
529 # undef perror | |
530 # define perror(s) \ | |
531 (GL_LINK_WARNING ("perror is not always POSIX compliant - " \ | |
532 "use gnulib module perror for portability"), \ | |
533 perror (s)) | |
534 #endif | |
535 | |
9262 | 536 #ifdef __cplusplus |
537 } | |
538 #endif | |
539 | |
540 #endif /* _GL_STDIO_H */ | |
541 #endif /* _GL_STDIO_H */ | |
542 #endif |