c377b6e0296209d665183c228e0d8b3416d25962
[gnulib.git] / lib / stdio.in.h
1 /* A GNU-like <stdio.h>.
2
3    Copyright (C) 2004, 2007-2012 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, see <http://www.gnu.org/licenses/>.  */
17
18 #if __GNUC__ >= 3
19 @PRAGMA_SYSTEM_HEADER@
20 #endif
21 @PRAGMA_COLUMNS@
22
23 #if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H
24 /* Special invocation convention:
25    - Inside glibc header files.
26    - On OSF/1 5.1 we have a sequence of nested includes
27      <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> ->
28      <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>.
29      In this situation, the functions are not yet declared, therefore we cannot
30      provide the C++ aliases.  */
31
32 #@INCLUDE_NEXT@ @NEXT_STDIO_H@
33
34 #else
35 /* Normal invocation convention.  */
36
37 #ifndef _@GUARD_PREFIX@_STDIO_H
38
39 #define _GL_ALREADY_INCLUDING_STDIO_H
40
41 /* The include_next requires a split double-inclusion guard.  */
42 #@INCLUDE_NEXT@ @NEXT_STDIO_H@
43
44 #undef _GL_ALREADY_INCLUDING_STDIO_H
45
46 #ifndef _@GUARD_PREFIX@_STDIO_H
47 #define _@GUARD_PREFIX@_STDIO_H
48
49 /* Get va_list.  Needed on many systems, including glibc 2.8.  */
50 #include <stdarg.h>
51
52 #include <stddef.h>
53
54 /* Get off_t and ssize_t.  Needed on many systems, including glibc 2.8
55    and eglibc 2.11.2.  */
56 #include <sys/types.h>
57
58 /* The __attribute__ feature is available in gcc versions 2.5 and later.
59    The __-protected variants of the attributes 'format' and 'printf' are
60    accepted by gcc versions 2.6.4 (effectively 2.7) and later.
61    We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
62    gnulib and libintl do '#define printf __printf__' when they override
63    the 'printf' function.  */
64 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
65 # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
66 #else
67 # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
68 #endif
69
70 /* _GL_ATTRIBUTE_FORMAT_PRINTF
71    indicates to GCC that the function takes a format string and arguments,
72    where the format string directives are the ones standardized by ISO C99
73    and POSIX.  */
74 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
75 # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
76    _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument))
77 #else
78 # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
79    _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
80 #endif
81
82 /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF,
83    except that it indicates to GCC that the supported format string directives
84    are the ones of the system printf(), rather than the ones standardized by
85    ISO C99 and POSIX.  */
86 #define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \
87   _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
88
89 /* _GL_ATTRIBUTE_FORMAT_SCANF
90    indicates to GCC that the function takes a format string and arguments,
91    where the format string directives are the ones standardized by ISO C99
92    and POSIX.  */
93 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
94 # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
95    _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument))
96 #else
97 # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
98    _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
99 #endif
100
101 /* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF,
102    except that it indicates to GCC that the supported format string directives
103    are the ones of the system scanf(), rather than the ones standardized by
104    ISO C99 and POSIX.  */
105 #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \
106   _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
107
108 /* Solaris 10 declares renameat in <unistd.h>, not in <stdio.h>.  */
109 /* But in any case avoid namespace pollution on glibc systems.  */
110 #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __sun \
111     && ! defined __GLIBC__
112 # include <unistd.h>
113 #endif
114
115
116 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
117
118 /* The definition of _GL_ARG_NONNULL is copied here.  */
119
120 /* The definition of _GL_WARN_ON_USE is copied here.  */
121
122 /* Macros for stringification.  */
123 #define _GL_STDIO_STRINGIZE(token) #token
124 #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token)
125
126
127 #if @GNULIB_DPRINTF@
128 # if @REPLACE_DPRINTF@
129 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
130 #   define dprintf rpl_dprintf
131 #  endif
132 _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...)
133                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
134                                 _GL_ARG_NONNULL ((2)));
135 _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...));
136 # else
137 #  if !@HAVE_DPRINTF@
138 _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...)
139                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
140                                 _GL_ARG_NONNULL ((2)));
141 #  endif
142 _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...));
143 # endif
144 _GL_CXXALIASWARN (dprintf);
145 #elif defined GNULIB_POSIXCHECK
146 # undef dprintf
147 # if HAVE_RAW_DECL_DPRINTF
148 _GL_WARN_ON_USE (dprintf, "dprintf is unportable - "
149                  "use gnulib module dprintf for portability");
150 # endif
151 #endif
152
153 #if @GNULIB_FCLOSE@
154 /* Close STREAM and its underlying file descriptor.  */
155 # if @REPLACE_FCLOSE@
156 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
157 #   define fclose rpl_fclose
158 #  endif
159 _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
160 _GL_CXXALIAS_RPL (fclose, int, (FILE *stream));
161 # else
162 _GL_CXXALIAS_SYS (fclose, int, (FILE *stream));
163 # endif
164 _GL_CXXALIASWARN (fclose);
165 #elif defined GNULIB_POSIXCHECK
166 # undef fclose
167 /* Assume fclose is always declared.  */
168 _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - "
169                  "use gnulib module fclose for portable POSIX compliance");
170 #endif
171
172 #if @GNULIB_FDOPEN@
173 # if @REPLACE_FDOPEN@
174 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
175 #   undef fdopen
176 #   define fdopen rpl_fdopen
177 #  endif
178 _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode)
179                                   _GL_ARG_NONNULL ((2)));
180 _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode));
181 # else
182 _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
183 # endif
184 _GL_CXXALIASWARN (fdopen);
185 #elif defined GNULIB_POSIXCHECK
186 # undef fdopen
187 /* Assume fdopen is always declared.  */
188 _GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - "
189                  "use gnulib module fdopen for portability");
190 #endif
191
192 #if @GNULIB_FFLUSH@
193 /* Flush all pending data on STREAM according to POSIX rules.  Both
194    output and seekable input streams are supported.
195    Note! LOSS OF DATA can occur if fflush is applied on an input stream
196    that is _not_seekable_ or on an update stream that is _not_seekable_
197    and in which the most recent operation was input.  Seekability can
198    be tested with lseek(fileno(fp),0,SEEK_CUR).  */
199 # if @REPLACE_FFLUSH@
200 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
201 #   define fflush rpl_fflush
202 #  endif
203 _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream));
204 _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream));
205 # else
206 _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream));
207 # endif
208 _GL_CXXALIASWARN (fflush);
209 #elif defined GNULIB_POSIXCHECK
210 # undef fflush
211 /* Assume fflush is always declared.  */
212 _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - "
213                  "use gnulib module fflush for portable POSIX compliance");
214 #endif
215
216 #if @GNULIB_FGETC@
217 # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
218 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
219 #   undef fgetc
220 #   define fgetc rpl_fgetc
221 #  endif
222 _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
223 _GL_CXXALIAS_RPL (fgetc, int, (FILE *stream));
224 # else
225 _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream));
226 # endif
227 _GL_CXXALIASWARN (fgetc);
228 #endif
229
230 #if @GNULIB_FGETS@
231 # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
232 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
233 #   undef fgets
234 #   define fgets rpl_fgets
235 #  endif
236 _GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream)
237                                  _GL_ARG_NONNULL ((1, 3)));
238 _GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream));
239 # else
240 _GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream));
241 # endif
242 _GL_CXXALIASWARN (fgets);
243 #endif
244
245 #if @GNULIB_FOPEN@
246 # if @REPLACE_FOPEN@
247 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
248 #   undef fopen
249 #   define fopen rpl_fopen
250 #  endif
251 _GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode)
252                                  _GL_ARG_NONNULL ((1, 2)));
253 _GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode));
254 # else
255 _GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode));
256 # endif
257 _GL_CXXALIASWARN (fopen);
258 #elif defined GNULIB_POSIXCHECK
259 # undef fopen
260 /* Assume fopen is always declared.  */
261 _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - "
262                  "use gnulib module fopen for portability");
263 #endif
264
265 #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@
266 # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \
267      || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
268 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
269 #   define fprintf rpl_fprintf
270 #  endif
271 #  define GNULIB_overrides_fprintf 1
272 #  if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
273 _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
274                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
275                                 _GL_ARG_NONNULL ((1, 2)));
276 #  else
277 _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
278                                 _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3)
279                                 _GL_ARG_NONNULL ((1, 2)));
280 #  endif
281 _GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...));
282 # else
283 _GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...));
284 # endif
285 _GL_CXXALIASWARN (fprintf);
286 #endif
287 #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
288 # if !GNULIB_overrides_fprintf
289 #  undef fprintf
290 # endif
291 /* Assume fprintf is always declared.  */
292 _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - "
293                  "use gnulib module fprintf-posix for portable "
294                  "POSIX compliance");
295 #endif
296
297 #if @GNULIB_FPURGE@
298 /* Discard all pending buffered I/O data on STREAM.
299    STREAM must not be wide-character oriented.
300    When discarding pending output, the file position is set back to where it
301    was before the write calls.  When discarding pending input, the file
302    position is advanced to match the end of the previously read input.
303    Return 0 if successful.  Upon error, return -1 and set errno.  */
304 # if @REPLACE_FPURGE@
305 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
306 #   define fpurge rpl_fpurge
307 #  endif
308 _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
309 _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream));
310 # else
311 #  if !@HAVE_DECL_FPURGE@
312 _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
313 #  endif
314 _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream));
315 # endif
316 _GL_CXXALIASWARN (fpurge);
317 #elif defined GNULIB_POSIXCHECK
318 # undef fpurge
319 # if HAVE_RAW_DECL_FPURGE
320 _GL_WARN_ON_USE (fpurge, "fpurge is not always present - "
321                  "use gnulib module fpurge for portability");
322 # endif
323 #endif
324
325 #if @GNULIB_FPUTC@
326 # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
327 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
328 #   undef fputc
329 #   define fputc rpl_fputc
330 #  endif
331 _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
332 _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream));
333 # else
334 _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream));
335 # endif
336 _GL_CXXALIASWARN (fputc);
337 #endif
338
339 #if @GNULIB_FPUTS@
340 # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
341 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
342 #   undef fputs
343 #   define fputs rpl_fputs
344 #  endif
345 _GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream)
346                               _GL_ARG_NONNULL ((1, 2)));
347 _GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream));
348 # else
349 _GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream));
350 # endif
351 _GL_CXXALIASWARN (fputs);
352 #endif
353
354 #if @GNULIB_FREAD@
355 # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
356 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
357 #   undef fread
358 #   define fread rpl_fread
359 #  endif
360 _GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)
361                                  _GL_ARG_NONNULL ((4)));
362 _GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
363 # else
364 _GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
365 # endif
366 _GL_CXXALIASWARN (fread);
367 #endif
368
369 #if @GNULIB_FREOPEN@
370 # if @REPLACE_FREOPEN@
371 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
372 #   undef freopen
373 #   define freopen rpl_freopen
374 #  endif
375 _GL_FUNCDECL_RPL (freopen, FILE *,
376                   (const char *filename, const char *mode, FILE *stream)
377                   _GL_ARG_NONNULL ((2, 3)));
378 _GL_CXXALIAS_RPL (freopen, FILE *,
379                   (const char *filename, const char *mode, FILE *stream));
380 # else
381 _GL_CXXALIAS_SYS (freopen, FILE *,
382                   (const char *filename, const char *mode, FILE *stream));
383 # endif
384 _GL_CXXALIASWARN (freopen);
385 #elif defined GNULIB_POSIXCHECK
386 # undef freopen
387 /* Assume freopen is always declared.  */
388 _GL_WARN_ON_USE (freopen,
389                  "freopen on native Windows platforms is not POSIX compliant - "
390                  "use gnulib module freopen for portability");
391 #endif
392
393 #if @GNULIB_FSCANF@
394 # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
395 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
396 #   undef fscanf
397 #   define fscanf rpl_fscanf
398 #  endif
399 _GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...)
400                                _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3)
401                                _GL_ARG_NONNULL ((1, 2)));
402 _GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...));
403 # else
404 _GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...));
405 # endif
406 _GL_CXXALIASWARN (fscanf);
407 #endif
408
409
410 /* Set up the following warnings, based on which modules are in use.
411    GNU Coding Standards discourage the use of fseek, since it imposes
412    an arbitrary limitation on some 32-bit hosts.  Remember that the
413    fseek module depends on the fseeko module, so we only have three
414    cases to consider:
415
416    1. The developer is not using either module.  Issue a warning under
417    GNULIB_POSIXCHECK for both functions, to remind them that both
418    functions have bugs on some systems.  _GL_NO_LARGE_FILES has no
419    impact on this warning.
420
421    2. The developer is using both modules.  They may be unaware of the
422    arbitrary limitations of fseek, so issue a warning under
423    GNULIB_POSIXCHECK.  On the other hand, they may be using both
424    modules intentionally, so the developer can define
425    _GL_NO_LARGE_FILES in the compilation units where the use of fseek
426    is safe, to silence the warning.
427
428    3. The developer is using the fseeko module, but not fseek.  Gnulib
429    guarantees that fseek will still work around platform bugs in that
430    case, but we presume that the developer is aware of the pitfalls of
431    fseek and was trying to avoid it, so issue a warning even when
432    GNULIB_POSIXCHECK is undefined.  Again, _GL_NO_LARGE_FILES can be
433    defined to silence the warning in particular compilation units.
434    In C++ compilations with GNULIB_NAMESPACE, in order to avoid that
435    fseek gets defined as a macro, it is recommended that the developer
436    uses the fseek module, even if he is not calling the fseek function.
437
438    Most gnulib clients that perform stream operations should fall into
439    category 3.  */
440
441 #if @GNULIB_FSEEK@
442 # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
443 #  define _GL_FSEEK_WARN /* Category 2, above.  */
444 #  undef fseek
445 # endif
446 # if @REPLACE_FSEEK@
447 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
448 #   undef fseek
449 #   define fseek rpl_fseek
450 #  endif
451 _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence)
452                               _GL_ARG_NONNULL ((1)));
453 _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence));
454 # else
455 _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence));
456 # endif
457 _GL_CXXALIASWARN (fseek);
458 #endif
459
460 #if @GNULIB_FSEEKO@
461 # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES
462 #  define _GL_FSEEK_WARN /* Category 3, above.  */
463 #  undef fseek
464 # endif
465 # if @REPLACE_FSEEKO@
466 /* Provide an fseeko function that is aware of a preceding fflush(), and which
467    detects pipes.  */
468 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
469 #   undef fseeko
470 #   define fseeko rpl_fseeko
471 #  endif
472 _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)
473                                _GL_ARG_NONNULL ((1)));
474 _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence));
475 # else
476 #  if ! @HAVE_DECL_FSEEKO@
477 _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)
478                                _GL_ARG_NONNULL ((1)));
479 #  endif
480 _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence));
481 # endif
482 _GL_CXXALIASWARN (fseeko);
483 #elif defined GNULIB_POSIXCHECK
484 # define _GL_FSEEK_WARN /* Category 1, above.  */
485 # undef fseek
486 # undef fseeko
487 # if HAVE_RAW_DECL_FSEEKO
488 _GL_WARN_ON_USE (fseeko, "fseeko is unportable - "
489                  "use gnulib module fseeko for portability");
490 # endif
491 #endif
492
493 #ifdef _GL_FSEEK_WARN
494 # undef _GL_FSEEK_WARN
495 /* Here, either fseek is undefined (but C89 guarantees that it is
496    declared), or it is defined as rpl_fseek (declared above).  */
497 _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB "
498                  "on 32-bit platforms - "
499                  "use fseeko function for handling of large files");
500 #endif
501
502
503 /* ftell, ftello.  See the comments on fseek/fseeko.  */
504
505 #if @GNULIB_FTELL@
506 # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
507 #  define _GL_FTELL_WARN /* Category 2, above.  */
508 #  undef ftell
509 # endif
510 # if @REPLACE_FTELL@
511 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
512 #   undef ftell
513 #   define ftell rpl_ftell
514 #  endif
515 _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1)));
516 _GL_CXXALIAS_RPL (ftell, long, (FILE *fp));
517 # else
518 _GL_CXXALIAS_SYS (ftell, long, (FILE *fp));
519 # endif
520 _GL_CXXALIASWARN (ftell);
521 #endif
522
523 #if @GNULIB_FTELLO@
524 # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES
525 #  define _GL_FTELL_WARN /* Category 3, above.  */
526 #  undef ftell
527 # endif
528 # if @REPLACE_FTELLO@
529 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
530 #   undef ftello
531 #   define ftello rpl_ftello
532 #  endif
533 _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
534 _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp));
535 # else
536 #  if ! @HAVE_DECL_FTELLO@
537 _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
538 #  endif
539 _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp));
540 # endif
541 _GL_CXXALIASWARN (ftello);
542 #elif defined GNULIB_POSIXCHECK
543 # define _GL_FTELL_WARN /* Category 1, above.  */
544 # undef ftell
545 # undef ftello
546 # if HAVE_RAW_DECL_FTELLO
547 _GL_WARN_ON_USE (ftello, "ftello is unportable - "
548                  "use gnulib module ftello for portability");
549 # endif
550 #endif
551
552 #ifdef _GL_FTELL_WARN
553 # undef _GL_FTELL_WARN
554 /* Here, either ftell is undefined (but C89 guarantees that it is
555    declared), or it is defined as rpl_ftell (declared above).  */
556 _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB "
557                  "on 32-bit platforms - "
558                  "use ftello function for handling of large files");
559 #endif
560
561
562 #if @GNULIB_FWRITE@
563 # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
564 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
565 #   undef fwrite
566 #   define fwrite rpl_fwrite
567 #  endif
568 _GL_FUNCDECL_RPL (fwrite, size_t,
569                   (const void *ptr, size_t s, size_t n, FILE *stream)
570                   _GL_ARG_NONNULL ((1, 4)));
571 _GL_CXXALIAS_RPL (fwrite, size_t,
572                   (const void *ptr, size_t s, size_t n, FILE *stream));
573 # else
574 _GL_CXXALIAS_SYS (fwrite, size_t,
575                   (const void *ptr, size_t s, size_t n, FILE *stream));
576
577 /* Work around glibc bug 11959
578    <http://sources.redhat.com/bugzilla/show_bug.cgi?id=11959>,
579    which sometimes causes an unwanted diagnostic for fwrite calls.
580    This affects only function declaration attributes, so it's not
581    needed for C++.  */
582 #  if !defined __cplusplus && 0 < __USE_FORTIFY_LEVEL
583 static inline size_t _GL_ARG_NONNULL ((1, 4))
584 rpl_fwrite (const void *ptr, size_t s, size_t n, FILE *stream)
585 {
586   size_t r = fwrite (ptr, s, n, stream);
587   (void) r;
588   return r;
589 }
590 #   undef fwrite
591 #   define fwrite rpl_fwrite
592 #  endif
593 # endif
594 _GL_CXXALIASWARN (fwrite);
595 #endif
596
597 #if @GNULIB_GETC@
598 # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
599 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
600 #   undef getc
601 #   define getc rpl_fgetc
602 #  endif
603 _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
604 _GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream));
605 # else
606 _GL_CXXALIAS_SYS (getc, int, (FILE *stream));
607 # endif
608 _GL_CXXALIASWARN (getc);
609 #endif
610
611 #if @GNULIB_GETCHAR@
612 # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
613 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
614 #   undef getchar
615 #   define getchar rpl_getchar
616 #  endif
617 _GL_FUNCDECL_RPL (getchar, int, (void));
618 _GL_CXXALIAS_RPL (getchar, int, (void));
619 # else
620 _GL_CXXALIAS_SYS (getchar, int, (void));
621 # endif
622 _GL_CXXALIASWARN (getchar);
623 #endif
624
625 #if @GNULIB_GETDELIM@
626 /* Read input, up to (and including) the next occurrence of DELIMITER, from
627    STREAM, store it in *LINEPTR (and NUL-terminate it).
628    *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
629    bytes of space.  It is realloc'd as necessary.
630    Return the number of bytes read and stored at *LINEPTR (not including the
631    NUL terminator), or -1 on error or EOF.  */
632 # if @REPLACE_GETDELIM@
633 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
634 #   undef getdelim
635 #   define getdelim rpl_getdelim
636 #  endif
637 _GL_FUNCDECL_RPL (getdelim, ssize_t,
638                   (char **lineptr, size_t *linesize, int delimiter,
639                    FILE *stream)
640                   _GL_ARG_NONNULL ((1, 2, 4)));
641 _GL_CXXALIAS_RPL (getdelim, ssize_t,
642                   (char **lineptr, size_t *linesize, int delimiter,
643                    FILE *stream));
644 # else
645 #  if !@HAVE_DECL_GETDELIM@
646 _GL_FUNCDECL_SYS (getdelim, ssize_t,
647                   (char **lineptr, size_t *linesize, int delimiter,
648                    FILE *stream)
649                   _GL_ARG_NONNULL ((1, 2, 4)));
650 #  endif
651 _GL_CXXALIAS_SYS (getdelim, ssize_t,
652                   (char **lineptr, size_t *linesize, int delimiter,
653                    FILE *stream));
654 # endif
655 _GL_CXXALIASWARN (getdelim);
656 #elif defined GNULIB_POSIXCHECK
657 # undef getdelim
658 # if HAVE_RAW_DECL_GETDELIM
659 _GL_WARN_ON_USE (getdelim, "getdelim is unportable - "
660                  "use gnulib module getdelim for portability");
661 # endif
662 #endif
663
664 #if @GNULIB_GETLINE@
665 /* Read a line, up to (and including) the next newline, from STREAM, store it
666    in *LINEPTR (and NUL-terminate it).
667    *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
668    bytes of space.  It is realloc'd as necessary.
669    Return the number of bytes read and stored at *LINEPTR (not including the
670    NUL terminator), or -1 on error or EOF.  */
671 # if @REPLACE_GETLINE@
672 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
673 #   undef getline
674 #   define getline rpl_getline
675 #  endif
676 _GL_FUNCDECL_RPL (getline, ssize_t,
677                   (char **lineptr, size_t *linesize, FILE *stream)
678                   _GL_ARG_NONNULL ((1, 2, 3)));
679 _GL_CXXALIAS_RPL (getline, ssize_t,
680                   (char **lineptr, size_t *linesize, FILE *stream));
681 # else
682 #  if !@HAVE_DECL_GETLINE@
683 _GL_FUNCDECL_SYS (getline, ssize_t,
684                   (char **lineptr, size_t *linesize, FILE *stream)
685                   _GL_ARG_NONNULL ((1, 2, 3)));
686 #  endif
687 _GL_CXXALIAS_SYS (getline, ssize_t,
688                   (char **lineptr, size_t *linesize, FILE *stream));
689 # endif
690 # if @HAVE_DECL_GETLINE@
691 _GL_CXXALIASWARN (getline);
692 # endif
693 #elif defined GNULIB_POSIXCHECK
694 # undef getline
695 # if HAVE_RAW_DECL_GETLINE
696 _GL_WARN_ON_USE (getline, "getline is unportable - "
697                  "use gnulib module getline for portability");
698 # endif
699 #endif
700
701 /* It is very rare that the developer ever has full control of stdin,
702    so any use of gets warrants an unconditional warning; besides, C11
703    removed it.  */
704 #undef gets
705 #if HAVE_RAW_DECL_GETS
706 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
707 #endif
708
709
710 #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@
711 struct obstack;
712 /* Grow an obstack with formatted output.  Return the number of
713    bytes added to OBS.  No trailing nul byte is added, and the
714    object should be closed with obstack_finish before use.  Upon
715    memory allocation error, call obstack_alloc_failed_handler.  Upon
716    other error, return -1.  */
717 # if @REPLACE_OBSTACK_PRINTF@
718 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
719 #   define obstack_printf rpl_obstack_printf
720 #  endif
721 _GL_FUNCDECL_RPL (obstack_printf, int,
722                   (struct obstack *obs, const char *format, ...)
723                   _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
724                   _GL_ARG_NONNULL ((1, 2)));
725 _GL_CXXALIAS_RPL (obstack_printf, int,
726                   (struct obstack *obs, const char *format, ...));
727 # else
728 #  if !@HAVE_DECL_OBSTACK_PRINTF@
729 _GL_FUNCDECL_SYS (obstack_printf, int,
730                   (struct obstack *obs, const char *format, ...)
731                   _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
732                   _GL_ARG_NONNULL ((1, 2)));
733 #  endif
734 _GL_CXXALIAS_SYS (obstack_printf, int,
735                   (struct obstack *obs, const char *format, ...));
736 # endif
737 _GL_CXXALIASWARN (obstack_printf);
738 # if @REPLACE_OBSTACK_PRINTF@
739 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
740 #   define obstack_vprintf rpl_obstack_vprintf
741 #  endif
742 _GL_FUNCDECL_RPL (obstack_vprintf, int,
743                   (struct obstack *obs, const char *format, va_list args)
744                   _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
745                   _GL_ARG_NONNULL ((1, 2)));
746 _GL_CXXALIAS_RPL (obstack_vprintf, int,
747                   (struct obstack *obs, const char *format, va_list args));
748 # else
749 #  if !@HAVE_DECL_OBSTACK_PRINTF@
750 _GL_FUNCDECL_SYS (obstack_vprintf, int,
751                   (struct obstack *obs, const char *format, va_list args)
752                   _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
753                   _GL_ARG_NONNULL ((1, 2)));
754 #  endif
755 _GL_CXXALIAS_SYS (obstack_vprintf, int,
756                   (struct obstack *obs, const char *format, va_list args));
757 # endif
758 _GL_CXXALIASWARN (obstack_vprintf);
759 #endif
760
761 #if @GNULIB_PCLOSE@
762 # if !@HAVE_PCLOSE@
763 _GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
764 # endif
765 _GL_CXXALIAS_SYS (pclose, int, (FILE *stream));
766 _GL_CXXALIASWARN (pclose);
767 #elif defined GNULIB_POSIXCHECK
768 # undef pclose
769 # if HAVE_RAW_DECL_PCLOSE
770 _GL_WARN_ON_USE (pclose, "pclose is unportable - "
771                  "use gnulib module pclose for more portability");
772 # endif
773 #endif
774
775 #if @GNULIB_PERROR@
776 /* Print a message to standard error, describing the value of ERRNO,
777    (if STRING is not NULL and not empty) prefixed with STRING and ": ",
778    and terminated with a newline.  */
779 # if @REPLACE_PERROR@
780 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
781 #   define perror rpl_perror
782 #  endif
783 _GL_FUNCDECL_RPL (perror, void, (const char *string));
784 _GL_CXXALIAS_RPL (perror, void, (const char *string));
785 # else
786 _GL_CXXALIAS_SYS (perror, void, (const char *string));
787 # endif
788 _GL_CXXALIASWARN (perror);
789 #elif defined GNULIB_POSIXCHECK
790 # undef perror
791 /* Assume perror is always declared.  */
792 _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "
793                  "use gnulib module perror for portability");
794 #endif
795
796 #if @GNULIB_POPEN@
797 # if @REPLACE_POPEN@
798 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
799 #   undef popen
800 #   define popen rpl_popen
801 #  endif
802 _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode)
803                                  _GL_ARG_NONNULL ((1, 2)));
804 _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));
805 # else
806 #  if !@HAVE_POPEN@
807 _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode)
808                                  _GL_ARG_NONNULL ((1, 2)));
809 #  endif
810 _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));
811 # endif
812 _GL_CXXALIASWARN (popen);
813 #elif defined GNULIB_POSIXCHECK
814 # undef popen
815 # if HAVE_RAW_DECL_POPEN
816 _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - "
817                  "use gnulib module popen or pipe for more portability");
818 # endif
819 #endif
820
821 #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@
822 # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \
823      || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
824 #  if defined __GNUC__
825 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
826 /* Don't break __attribute__((format(printf,M,N))).  */
827 #    define printf __printf__
828 #   endif
829 #   if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
830 _GL_FUNCDECL_RPL_1 (__printf__, int,
831                     (const char *format, ...)
832                     __asm__ (@ASM_SYMBOL_PREFIX@
833                              _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
834                     _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
835                     _GL_ARG_NONNULL ((1)));
836 #   else
837 _GL_FUNCDECL_RPL_1 (__printf__, int,
838                     (const char *format, ...)
839                     __asm__ (@ASM_SYMBOL_PREFIX@
840                              _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
841                     _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2)
842                     _GL_ARG_NONNULL ((1)));
843 #   endif
844 _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...));
845 #  else
846 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
847 #    define printf rpl_printf
848 #   endif
849 _GL_FUNCDECL_RPL (printf, int,
850                   (const char *format, ...)
851                   _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
852                   _GL_ARG_NONNULL ((1)));
853 _GL_CXXALIAS_RPL (printf, int, (const char *format, ...));
854 #  endif
855 #  define GNULIB_overrides_printf 1
856 # else
857 _GL_CXXALIAS_SYS (printf, int, (const char *format, ...));
858 # endif
859 _GL_CXXALIASWARN (printf);
860 #endif
861 #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK
862 # if !GNULIB_overrides_printf
863 #  undef printf
864 # endif
865 /* Assume printf is always declared.  */
866 _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - "
867                  "use gnulib module printf-posix for portable "
868                  "POSIX compliance");
869 #endif
870
871 #if @GNULIB_PUTC@
872 # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
873 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
874 #   undef putc
875 #   define putc rpl_fputc
876 #  endif
877 _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
878 _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream));
879 # else
880 _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream));
881 # endif
882 _GL_CXXALIASWARN (putc);
883 #endif
884
885 #if @GNULIB_PUTCHAR@
886 # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
887 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
888 #   undef putchar
889 #   define putchar rpl_putchar
890 #  endif
891 _GL_FUNCDECL_RPL (putchar, int, (int c));
892 _GL_CXXALIAS_RPL (putchar, int, (int c));
893 # else
894 _GL_CXXALIAS_SYS (putchar, int, (int c));
895 # endif
896 _GL_CXXALIASWARN (putchar);
897 #endif
898
899 #if @GNULIB_PUTS@
900 # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
901 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
902 #   undef puts
903 #   define puts rpl_puts
904 #  endif
905 _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1)));
906 _GL_CXXALIAS_RPL (puts, int, (const char *string));
907 # else
908 _GL_CXXALIAS_SYS (puts, int, (const char *string));
909 # endif
910 _GL_CXXALIASWARN (puts);
911 #endif
912
913 #if @GNULIB_REMOVE@
914 # if @REPLACE_REMOVE@
915 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
916 #   undef remove
917 #   define remove rpl_remove
918 #  endif
919 _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1)));
920 _GL_CXXALIAS_RPL (remove, int, (const char *name));
921 # else
922 _GL_CXXALIAS_SYS (remove, int, (const char *name));
923 # endif
924 _GL_CXXALIASWARN (remove);
925 #elif defined GNULIB_POSIXCHECK
926 # undef remove
927 /* Assume remove is always declared.  */
928 _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - "
929                  "use gnulib module remove for more portability");
930 #endif
931
932 #if @GNULIB_RENAME@
933 # if @REPLACE_RENAME@
934 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
935 #   undef rename
936 #   define rename rpl_rename
937 #  endif
938 _GL_FUNCDECL_RPL (rename, int,
939                   (const char *old_filename, const char *new_filename)
940                   _GL_ARG_NONNULL ((1, 2)));
941 _GL_CXXALIAS_RPL (rename, int,
942                   (const char *old_filename, const char *new_filename));
943 # else
944 _GL_CXXALIAS_SYS (rename, int,
945                   (const char *old_filename, const char *new_filename));
946 # endif
947 _GL_CXXALIASWARN (rename);
948 #elif defined GNULIB_POSIXCHECK
949 # undef rename
950 /* Assume rename is always declared.  */
951 _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - "
952                  "use gnulib module rename for more portability");
953 #endif
954
955 #if @GNULIB_RENAMEAT@
956 # if @REPLACE_RENAMEAT@
957 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
958 #   undef renameat
959 #   define renameat rpl_renameat
960 #  endif
961 _GL_FUNCDECL_RPL (renameat, int,
962                   (int fd1, char const *file1, int fd2, char const *file2)
963                   _GL_ARG_NONNULL ((2, 4)));
964 _GL_CXXALIAS_RPL (renameat, int,
965                   (int fd1, char const *file1, int fd2, char const *file2));
966 # else
967 #  if !@HAVE_RENAMEAT@
968 _GL_FUNCDECL_SYS (renameat, int,
969                   (int fd1, char const *file1, int fd2, char const *file2)
970                   _GL_ARG_NONNULL ((2, 4)));
971 #  endif
972 _GL_CXXALIAS_SYS (renameat, int,
973                   (int fd1, char const *file1, int fd2, char const *file2));
974 # endif
975 _GL_CXXALIASWARN (renameat);
976 #elif defined GNULIB_POSIXCHECK
977 # undef renameat
978 # if HAVE_RAW_DECL_RENAMEAT
979 _GL_WARN_ON_USE (renameat, "renameat is not portable - "
980                  "use gnulib module renameat for portability");
981 # endif
982 #endif
983
984 #if @GNULIB_SCANF@
985 # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
986 #  if defined __GNUC__
987 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
988 #    undef scanf
989 /* Don't break __attribute__((format(scanf,M,N))).  */
990 #    define scanf __scanf__
991 #   endif
992 _GL_FUNCDECL_RPL_1 (__scanf__, int,
993                     (const char *format, ...)
994                     __asm__ (@ASM_SYMBOL_PREFIX@
995                              _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf))
996                     _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
997                     _GL_ARG_NONNULL ((1)));
998 _GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...));
999 #  else
1000 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1001 #    undef scanf
1002 #    define scanf rpl_scanf
1003 #   endif
1004 _GL_FUNCDECL_RPL (scanf, int, (const char *format, ...)
1005                               _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
1006                               _GL_ARG_NONNULL ((1)));
1007 _GL_CXXALIAS_RPL (scanf, int, (const char *format, ...));
1008 #  endif
1009 # else
1010 _GL_CXXALIAS_SYS (scanf, int, (const char *format, ...));
1011 # endif
1012 _GL_CXXALIASWARN (scanf);
1013 #endif
1014
1015 #if @GNULIB_SNPRINTF@
1016 # if @REPLACE_SNPRINTF@
1017 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1018 #   define snprintf rpl_snprintf
1019 #  endif
1020 _GL_FUNCDECL_RPL (snprintf, int,
1021                   (char *str, size_t size, const char *format, ...)
1022                   _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
1023                   _GL_ARG_NONNULL ((3)));
1024 _GL_CXXALIAS_RPL (snprintf, int,
1025                   (char *str, size_t size, const char *format, ...));
1026 # else
1027 #  if !@HAVE_DECL_SNPRINTF@
1028 _GL_FUNCDECL_SYS (snprintf, int,
1029                   (char *str, size_t size, const char *format, ...)
1030                   _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
1031                   _GL_ARG_NONNULL ((3)));
1032 #  endif
1033 _GL_CXXALIAS_SYS (snprintf, int,
1034                   (char *str, size_t size, const char *format, ...));
1035 # endif
1036 _GL_CXXALIASWARN (snprintf);
1037 #elif defined GNULIB_POSIXCHECK
1038 # undef snprintf
1039 # if HAVE_RAW_DECL_SNPRINTF
1040 _GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
1041                  "use gnulib module snprintf for portability");
1042 # endif
1043 #endif
1044
1045 /* Some people would argue that all sprintf uses should be warned about
1046    (for example, OpenBSD issues a link warning for it),
1047    since it can cause security holes due to buffer overruns.
1048    However, we believe that sprintf can be used safely, and is more
1049    efficient than snprintf in those safe cases; and as proof of our
1050    belief, we use sprintf in several gnulib modules.  So this header
1051    intentionally avoids adding a warning to sprintf except when
1052    GNULIB_POSIXCHECK is defined.  */
1053
1054 #if @GNULIB_SPRINTF_POSIX@
1055 # if @REPLACE_SPRINTF@
1056 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1057 #   define sprintf rpl_sprintf
1058 #  endif
1059 _GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...)
1060                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
1061                                 _GL_ARG_NONNULL ((1, 2)));
1062 _GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...));
1063 # else
1064 _GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...));
1065 # endif
1066 _GL_CXXALIASWARN (sprintf);
1067 #elif defined GNULIB_POSIXCHECK
1068 # undef sprintf
1069 /* Assume sprintf is always declared.  */
1070 _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - "
1071                  "use gnulib module sprintf-posix for portable "
1072                  "POSIX compliance");
1073 #endif
1074
1075 #if @GNULIB_TMPFILE@
1076 # if @REPLACE_TMPFILE@
1077 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1078 #   define tmpfile rpl_tmpfile
1079 #  endif
1080 _GL_FUNCDECL_RPL (tmpfile, FILE *, (void));
1081 _GL_CXXALIAS_RPL (tmpfile, FILE *, (void));
1082 # else
1083 _GL_CXXALIAS_SYS (tmpfile, FILE *, (void));
1084 # endif
1085 _GL_CXXALIASWARN (tmpfile);
1086 #elif defined GNULIB_POSIXCHECK
1087 # undef tmpfile
1088 # if HAVE_RAW_DECL_TMPFILE
1089 _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - "
1090                  "use gnulib module tmpfile for portability");
1091 # endif
1092 #endif
1093
1094 #if @GNULIB_VASPRINTF@
1095 /* Write formatted output to a string dynamically allocated with malloc().
1096    If the memory allocation succeeds, store the address of the string in
1097    *RESULT and return the number of resulting bytes, excluding the trailing
1098    NUL.  Upon memory allocation error, or some other error, return -1.  */
1099 # if @REPLACE_VASPRINTF@
1100 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1101 #   define asprintf rpl_asprintf
1102 #  endif
1103 _GL_FUNCDECL_RPL (asprintf, int,
1104                   (char **result, const char *format, ...)
1105                   _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
1106                   _GL_ARG_NONNULL ((1, 2)));
1107 _GL_CXXALIAS_RPL (asprintf, int,
1108                   (char **result, const char *format, ...));
1109 # else
1110 #  if !@HAVE_VASPRINTF@
1111 _GL_FUNCDECL_SYS (asprintf, int,
1112                   (char **result, const char *format, ...)
1113                   _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
1114                   _GL_ARG_NONNULL ((1, 2)));
1115 #  endif
1116 _GL_CXXALIAS_SYS (asprintf, int,
1117                   (char **result, const char *format, ...));
1118 # endif
1119 _GL_CXXALIASWARN (asprintf);
1120 # if @REPLACE_VASPRINTF@
1121 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1122 #   define vasprintf rpl_vasprintf
1123 #  endif
1124 _GL_FUNCDECL_RPL (vasprintf, int,
1125                   (char **result, const char *format, va_list args)
1126                   _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
1127                   _GL_ARG_NONNULL ((1, 2)));
1128 _GL_CXXALIAS_RPL (vasprintf, int,
1129                   (char **result, const char *format, va_list args));
1130 # else
1131 #  if !@HAVE_VASPRINTF@
1132 _GL_FUNCDECL_SYS (vasprintf, int,
1133                   (char **result, const char *format, va_list args)
1134                   _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
1135                   _GL_ARG_NONNULL ((1, 2)));
1136 #  endif
1137 _GL_CXXALIAS_SYS (vasprintf, int,
1138                   (char **result, const char *format, va_list args));
1139 # endif
1140 _GL_CXXALIASWARN (vasprintf);
1141 #endif
1142
1143 #if @GNULIB_VDPRINTF@
1144 # if @REPLACE_VDPRINTF@
1145 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1146 #   define vdprintf rpl_vdprintf
1147 #  endif
1148 _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args)
1149                                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
1150                                  _GL_ARG_NONNULL ((2)));
1151 _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args));
1152 # else
1153 #  if !@HAVE_VDPRINTF@
1154 _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args)
1155                                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
1156                                  _GL_ARG_NONNULL ((2)));
1157 #  endif
1158 /* Need to cast, because on Solaris, the third parameter will likely be
1159                                                     __va_list args.  */
1160 _GL_CXXALIAS_SYS_CAST (vdprintf, int,
1161                        (int fd, const char *format, va_list args));
1162 # endif
1163 _GL_CXXALIASWARN (vdprintf);
1164 #elif defined GNULIB_POSIXCHECK
1165 # undef vdprintf
1166 # if HAVE_RAW_DECL_VDPRINTF
1167 _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - "
1168                  "use gnulib module vdprintf for portability");
1169 # endif
1170 #endif
1171
1172 #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@
1173 # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \
1174      || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
1175 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1176 #   define vfprintf rpl_vfprintf
1177 #  endif
1178 #  define GNULIB_overrides_vfprintf 1
1179 #  if @GNULIB_VFPRINTF_POSIX@
1180 _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
1181                                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
1182                                  _GL_ARG_NONNULL ((1, 2)));
1183 #  else
1184 _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
1185                                  _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0)
1186                                  _GL_ARG_NONNULL ((1, 2)));
1187 #  endif
1188 _GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args));
1189 # else
1190 /* Need to cast, because on Solaris, the third parameter is
1191                                                       __va_list args
1192    and GCC's fixincludes did not change this to __gnuc_va_list.  */
1193 _GL_CXXALIAS_SYS_CAST (vfprintf, int,
1194                        (FILE *fp, const char *format, va_list args));
1195 # endif
1196 _GL_CXXALIASWARN (vfprintf);
1197 #endif
1198 #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
1199 # if !GNULIB_overrides_vfprintf
1200 #  undef vfprintf
1201 # endif
1202 /* Assume vfprintf is always declared.  */
1203 _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - "
1204                  "use gnulib module vfprintf-posix for portable "
1205                       "POSIX compliance");
1206 #endif
1207
1208 #if @GNULIB_VFSCANF@
1209 # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
1210 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1211 #   undef vfscanf
1212 #   define vfscanf rpl_vfscanf
1213 #  endif
1214 _GL_FUNCDECL_RPL (vfscanf, int,
1215                   (FILE *stream, const char *format, va_list args)
1216                   _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0)
1217                   _GL_ARG_NONNULL ((1, 2)));
1218 _GL_CXXALIAS_RPL (vfscanf, int,
1219                   (FILE *stream, const char *format, va_list args));
1220 # else
1221 _GL_CXXALIAS_SYS (vfscanf, int,
1222                   (FILE *stream, const char *format, va_list args));
1223 # endif
1224 _GL_CXXALIASWARN (vfscanf);
1225 #endif
1226
1227 #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@
1228 # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \
1229      || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
1230 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1231 #   define vprintf rpl_vprintf
1232 #  endif
1233 #  define GNULIB_overrides_vprintf 1
1234 #  if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
1235 _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
1236                                 _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0)
1237                                 _GL_ARG_NONNULL ((1)));
1238 #  else
1239 _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
1240                                 _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0)
1241                                 _GL_ARG_NONNULL ((1)));
1242 #  endif
1243 _GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args));
1244 # else
1245 /* Need to cast, because on Solaris, the second parameter is
1246                                                           __va_list args
1247    and GCC's fixincludes did not change this to __gnuc_va_list.  */
1248 _GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args));
1249 # endif
1250 _GL_CXXALIASWARN (vprintf);
1251 #endif
1252 #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
1253 # if !GNULIB_overrides_vprintf
1254 #  undef vprintf
1255 # endif
1256 /* Assume vprintf is always declared.  */
1257 _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - "
1258                  "use gnulib module vprintf-posix for portable "
1259                  "POSIX compliance");
1260 #endif
1261
1262 #if @GNULIB_VSCANF@
1263 # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
1264 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1265 #   undef vscanf
1266 #   define vscanf rpl_vscanf
1267 #  endif
1268 _GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args)
1269                                _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0)
1270                                _GL_ARG_NONNULL ((1)));
1271 _GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args));
1272 # else
1273 _GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args));
1274 # endif
1275 _GL_CXXALIASWARN (vscanf);
1276 #endif
1277
1278 #if @GNULIB_VSNPRINTF@
1279 # if @REPLACE_VSNPRINTF@
1280 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1281 #   define vsnprintf rpl_vsnprintf
1282 #  endif
1283 _GL_FUNCDECL_RPL (vsnprintf, int,
1284                   (char *str, size_t size, const char *format, va_list args)
1285                   _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
1286                   _GL_ARG_NONNULL ((3)));
1287 _GL_CXXALIAS_RPL (vsnprintf, int,
1288                   (char *str, size_t size, const char *format, va_list args));
1289 # else
1290 #  if !@HAVE_DECL_VSNPRINTF@
1291 _GL_FUNCDECL_SYS (vsnprintf, int,
1292                   (char *str, size_t size, const char *format, va_list args)
1293                   _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
1294                   _GL_ARG_NONNULL ((3)));
1295 #  endif
1296 _GL_CXXALIAS_SYS (vsnprintf, int,
1297                   (char *str, size_t size, const char *format, va_list args));
1298 # endif
1299 _GL_CXXALIASWARN (vsnprintf);
1300 #elif defined GNULIB_POSIXCHECK
1301 # undef vsnprintf
1302 # if HAVE_RAW_DECL_VSNPRINTF
1303 _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - "
1304                  "use gnulib module vsnprintf for portability");
1305 # endif
1306 #endif
1307
1308 #if @GNULIB_VSPRINTF_POSIX@
1309 # if @REPLACE_VSPRINTF@
1310 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1311 #   define vsprintf rpl_vsprintf
1312 #  endif
1313 _GL_FUNCDECL_RPL (vsprintf, int,
1314                   (char *str, const char *format, va_list args)
1315                   _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
1316                   _GL_ARG_NONNULL ((1, 2)));
1317 _GL_CXXALIAS_RPL (vsprintf, int,
1318                   (char *str, const char *format, va_list args));
1319 # else
1320 /* Need to cast, because on Solaris, the third parameter is
1321                                                        __va_list args
1322    and GCC's fixincludes did not change this to __gnuc_va_list.  */
1323 _GL_CXXALIAS_SYS_CAST (vsprintf, int,
1324                        (char *str, const char *format, va_list args));
1325 # endif
1326 _GL_CXXALIASWARN (vsprintf);
1327 #elif defined GNULIB_POSIXCHECK
1328 # undef vsprintf
1329 /* Assume vsprintf is always declared.  */
1330 _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - "
1331                  "use gnulib module vsprintf-posix for portable "
1332                       "POSIX compliance");
1333 #endif
1334
1335
1336 #endif /* _@GUARD_PREFIX@_STDIO_H */
1337 #endif /* _@GUARD_PREFIX@_STDIO_H */
1338 #endif