58eb4f0b2aac131cb2f148eff76868f1094e5410
[pspp] / lib / stdio.in.h
1 /* A GNU-like <stdio.h>.
2
3    Copyright (C) 2004, 2007-2010 Free Software Foundation, Inc.
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2, or (at your option)
8    any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software Foundation,
17    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
18
19 #if __GNUC__ >= 3
20 @PRAGMA_SYSTEM_HEADER@
21 #endif
22
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 /* Get va_list.  Needed on many systems, including glibc 2.8.  */
40 #include <stdarg.h>
41
42 #include <stddef.h>
43
44 /* Get off_t and ssize_t.  Needed on many systems, including glibc 2.8.  */
45 #include <sys/types.h>
46
47 #ifndef __attribute__
48 /* The __attribute__ feature is available in gcc versions 2.5 and later.
49    The __-protected variants of the attributes 'format' and 'printf' are
50    accepted by gcc versions 2.6.4 (effectively 2.7) and later.
51    We enable __attribute__ only if these are supported too, because
52    gnulib and libintl do '#define printf __printf__' when they override
53    the 'printf' function.  */
54 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
55 #  define __attribute__(Spec)   /* empty */
56 # endif
57 #endif
58
59
60 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
61
62 /* The definition of _GL_ARG_NONNULL is copied here.  */
63
64 /* The definition of _GL_WARN_ON_USE is copied here.  */
65
66
67 #if @GNULIB_DPRINTF@
68 # if @REPLACE_DPRINTF@
69 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
70 #   define dprintf rpl_dprintf
71 #  endif
72 _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...)
73                                 __attribute__ ((__format__ (__printf__, 2, 3)))
74                                 _GL_ARG_NONNULL ((2)));
75 _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...));
76 # else
77 #  if !@HAVE_DPRINTF@
78 _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...)
79                                 __attribute__ ((__format__ (__printf__, 2, 3)))
80                                 _GL_ARG_NONNULL ((2)));
81 #  endif
82 _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...));
83 # endif
84 _GL_CXXALIASWARN (dprintf);
85 #elif defined GNULIB_POSIXCHECK
86 # undef dprintf
87 # if HAVE_RAW_DECL_DPRINTF
88 _GL_WARN_ON_USE (dprintf, "dprintf is unportable - "
89                  "use gnulib module dprintf for portability");
90 # endif
91 #endif
92
93 #if @GNULIB_FCLOSE@
94 /* Close STREAM and its underlying file descriptor.  */
95 # if @REPLACE_FCLOSE@
96 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
97 #   define fclose rpl_fclose
98 #  endif
99 _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
100 _GL_CXXALIAS_RPL (fclose, int, (FILE *stream));
101 # else
102 _GL_CXXALIAS_SYS (fclose, int, (FILE *stream));
103 # endif
104 _GL_CXXALIASWARN (fclose);
105 #elif defined GNULIB_POSIXCHECK
106 # undef fclose
107 /* Assume fclose is always declared.  */
108 _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - "
109                  "use gnulib module fclose for portable POSIX compliance");
110 #endif
111
112 #if @GNULIB_FFLUSH@
113 /* Flush all pending data on STREAM according to POSIX rules.  Both
114    output and seekable input streams are supported.
115    Note! LOSS OF DATA can occur if fflush is applied on an input stream
116    that is _not_seekable_ or on an update stream that is _not_seekable_
117    and in which the most recent operation was input.  Seekability can
118    be tested with lseek(fileno(fp),0,SEEK_CUR).  */
119 # if @REPLACE_FFLUSH@
120 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
121 #   define fflush rpl_fflush
122 #  endif
123 _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream));
124 _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream));
125 # else
126 _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream));
127 # endif
128 _GL_CXXALIASWARN (fflush);
129 #elif defined GNULIB_POSIXCHECK
130 # undef fflush
131 /* Assume fflush is always declared.  */
132 _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - "
133                  "use gnulib module fflush for portable POSIX compliance");
134 #endif
135
136 /* It is very rare that the developer ever has full control of stdin,
137    so any use of gets warrants an unconditional warning.  Assume it is
138    always declared, since it is required by C89.  */
139 #undef gets
140 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
141
142 #if @GNULIB_FOPEN@
143 # if @REPLACE_FOPEN@
144 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
145 #   undef fopen
146 #   define fopen rpl_fopen
147 #  endif
148 _GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode)
149                                  _GL_ARG_NONNULL ((1, 2)));
150 _GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode));
151 # else
152 _GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode));
153 # endif
154 _GL_CXXALIASWARN (fopen);
155 #elif defined GNULIB_POSIXCHECK
156 # undef fopen
157 /* Assume fopen is always declared.  */
158 _GL_WARN_ON_USE (fopen, "fopen on Win32 platforms is not POSIX compatible - "
159                  "use gnulib module fopen for portability");
160 #endif
161
162 #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@
163 # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \
164      || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@)
165 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
166 #   define fprintf rpl_fprintf
167 #  endif
168 #  define GNULIB_overrides_fprintf 1
169 _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
170                                 __attribute__ ((__format__ (__printf__, 2, 3)))
171                                 _GL_ARG_NONNULL ((1, 2)));
172 _GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...));
173 # else
174 _GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...));
175 # endif
176 _GL_CXXALIASWARN (fprintf);
177 #endif
178 #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
179 # if !GNULIB_overrides_fprintf
180 #  undef fprintf
181 # endif
182 /* Assume fprintf is always declared.  */
183 _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - "
184                  "use gnulib module fprintf-posix for portable "
185                  "POSIX compliance");
186 #endif
187
188 #if @GNULIB_FPURGE@
189 /* Discard all pending buffered I/O data on STREAM.
190    STREAM must not be wide-character oriented.
191    When discarding pending output, the file position is set back to where it
192    was before the write calls.  When discarding pending input, the file
193    position is advanced to match the end of the previously read input.
194    Return 0 if successful.  Upon error, return -1 and set errno.  */
195 # if @REPLACE_FPURGE@
196 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
197 #   define fpurge rpl_fpurge
198 #  endif
199 _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
200 _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream));
201 # else
202 #  if !@HAVE_DECL_FPURGE@
203 _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
204 #  endif
205 _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream));
206 # endif
207 _GL_CXXALIASWARN (fpurge);
208 #elif defined GNULIB_POSIXCHECK
209 # undef fpurge
210 # if HAVE_RAW_DECL_FPURGE
211 _GL_WARN_ON_USE (fpurge, "fpurge is not always present - "
212                  "use gnulib module fpurge for portability");
213 # endif
214 #endif
215
216 #if @GNULIB_FPUTC@
217 # if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
218 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
219 #   undef fputc
220 #   define fputc rpl_fputc
221 #  endif
222 _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
223 _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream));
224 # else
225 _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream));
226 # endif
227 _GL_CXXALIASWARN (fputc);
228 #endif
229
230 #if @GNULIB_FPUTS@
231 # if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
232 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
233 #   undef fputs
234 #   define fputs rpl_fputs
235 #  endif
236 _GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream)
237                               _GL_ARG_NONNULL ((1, 2)));
238 _GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream));
239 # else
240 _GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream));
241 # endif
242 _GL_CXXALIASWARN (fputs);
243 #endif
244
245 #if @GNULIB_FREOPEN@
246 # if @REPLACE_FREOPEN@
247 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
248 #   undef freopen
249 #   define freopen rpl_freopen
250 #  endif
251 _GL_FUNCDECL_RPL (freopen, FILE *,
252                   (const char *filename, const char *mode, FILE *stream)
253                   _GL_ARG_NONNULL ((2, 3)));
254 _GL_CXXALIAS_RPL (freopen, FILE *,
255                   (const char *filename, const char *mode, FILE *stream));
256 # else
257 _GL_CXXALIAS_SYS (freopen, FILE *,
258                   (const char *filename, const char *mode, FILE *stream));
259 # endif
260 _GL_CXXALIASWARN (freopen);
261 #elif defined GNULIB_POSIXCHECK
262 # undef freopen
263 /* Assume freopen is always declared.  */
264 _GL_WARN_ON_USE (freopen, "freopen on Win32 platforms is not POSIX compatible - "
265                  "use gnulib module freopen for portability");
266 #endif
267
268
269 /* Set up the following warnings, based on which modules are in use.
270    GNU Coding Standards discourage the use of fseek, since it imposes
271    an arbitrary limitation on some 32-bit hosts.  Remember that the
272    fseek module depends on the fseeko module, so we only have three
273    cases to consider:
274
275    1. The developer is not using either module.  Issue a warning under
276    GNULIB_POSIXCHECK for both functions, to remind them that both
277    functions have bugs on some systems.  _GL_NO_LARGE_FILES has no
278    impact on this warning.
279
280    2. The developer is using both modules.  They may be unaware of the
281    arbitrary limitations of fseek, so issue a warning under
282    GNULIB_POSIXCHECK.  On the other hand, they may be using both
283    modules intentionally, so the developer can define
284    _GL_NO_LARGE_FILES in the compilation units where the use of fseek
285    is safe, to silence the warning.
286
287    3. The developer is using the fseeko module, but not fseek.  Gnulib
288    guarantees that fseek will still work around platform bugs in that
289    case, but we presume that the developer is aware of the pitfalls of
290    fseek and was trying to avoid it, so issue a warning even when
291    GNULIB_POSIXCHECK is undefined.  Again, _GL_NO_LARGE_FILES can be
292    defined to silence the warning in particular compilation units.
293    In C++ compilations with GNULIB_NAMESPACE, in order to avoid that
294    fseek gets defined as a macro, it is recommended that the developer
295    uses the fseek module, even if he is not calling the fseek function.
296
297    Most gnulib clients that perform stream operations should fall into
298    category 3.  */
299
300 #if @GNULIB_FSEEK@
301 # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
302 #  define _GL_FSEEK_WARN /* Category 2, above.  */
303 #  undef fseek
304 # endif
305 # if @REPLACE_FSEEK@
306 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
307 #   undef fseek
308 #   define fseek rpl_fseek
309 #  endif
310 _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence)
311                               _GL_ARG_NONNULL ((1)));
312 _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence));
313 # else
314 _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence));
315 # endif
316 _GL_CXXALIASWARN (fseek);
317 #endif
318
319 #if @GNULIB_FSEEKO@
320 # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES
321 #  define _GL_FSEEK_WARN /* Category 3, above.  */
322 #  undef fseek
323 # endif
324 # if @REPLACE_FSEEKO@
325 /* Provide an fseeko function that is aware of a preceding fflush(), and which
326    detects pipes.  */
327 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
328 #   undef fseeko
329 #   define fseeko rpl_fseeko
330 #  endif
331 _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)
332                                _GL_ARG_NONNULL ((1)));
333 _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence));
334 # else
335 #  if ! @HAVE_FSEEKO@
336 _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)
337                                _GL_ARG_NONNULL ((1)));
338 #  endif
339 _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence));
340 # endif
341 _GL_CXXALIASWARN (fseeko);
342 # if (@REPLACE_FSEEKO@ || !@HAVE_FSEEKO@) && !@GNULIB_FSEEK@
343    /* Provide an fseek function that is consistent with fseeko.  */
344    /* In order to avoid that fseek gets defined as a macro here, the
345       developer can request the 'fseek' module.  */
346 #  undef fseek
347 #  define fseek rpl_fseek
348 static inline int _GL_ARG_NONNULL ((1))
349 rpl_fseek (FILE *fp, long offset, int whence)
350 {
351 #  if @REPLACE_FSEEKO@
352   return rpl_fseeko (fp, offset, whence);
353 #  else
354   return fseeko (fp, offset, whence);
355 #  endif
356 }
357 # endif
358 #elif defined GNULIB_POSIXCHECK
359 # define _GL_FSEEK_WARN /* Category 1, above.  */
360 # undef fseek
361 # undef fseeko
362 # if HAVE_RAW_DECL_FSEEKO
363 _GL_WARN_ON_USE (fseeko, "fseeko is unportable - "
364                  "use gnulib module fseeko for portability");
365 # endif
366 #endif
367
368 #ifdef _GL_FSEEK_WARN
369 # undef _GL_FSEEK_WARN
370 /* Here, either fseek is undefined (but C89 guarantees that it is
371    declared), or it is defined as rpl_fseek (declared above).  */
372 _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB "
373                  "on 32-bit platforms - "
374                  "use fseeko function for handling of large files");
375 #endif
376
377
378 /* ftell, ftello.  See the comments on fseek/fseeko.  */
379
380 #if @GNULIB_FTELL@
381 # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
382 #  define _GL_FTELL_WARN /* Category 2, above.  */
383 #  undef ftell
384 # endif
385 # if @REPLACE_FTELL@
386 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
387 #   undef ftell
388 #   define ftell rpl_ftell
389 #  endif
390 _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1)));
391 _GL_CXXALIAS_RPL (ftell, long, (FILE *fp));
392 # else
393 _GL_CXXALIAS_SYS (ftell, long, (FILE *fp));
394 # endif
395 _GL_CXXALIASWARN (ftell);
396 #endif
397
398 #if @GNULIB_FTELLO@
399 # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES
400 #  define _GL_FTELL_WARN /* Category 3, above.  */
401 #  undef ftell
402 # endif
403 # if @REPLACE_FTELLO@
404 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
405 #   undef ftello
406 #   define ftello rpl_ftello
407 #  endif
408 _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
409 _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp));
410 # else
411 #  if ! @HAVE_FTELLO@
412 _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
413 #  endif
414 _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp));
415 # endif
416 _GL_CXXALIASWARN (ftello);
417 # if (@REPLACE_FTELLO@ || !@HAVE_FTELLO@) && !@GNULIB_FTELL@
418    /* Provide an ftell function that is consistent with ftello.  */
419    /* In order to avoid that ftell gets defined as a macro here, the
420       developer can request the 'ftell' module.  */
421 #  undef ftell
422 #  define ftell rpl_ftell
423 static inline long _GL_ARG_NONNULL ((1))
424 rpl_ftell (FILE *f)
425 {
426 #  if @REPLACE_FTELLO@
427   return rpl_ftello (f);
428 #  else
429   return ftello (f);
430 #  endif
431 }
432 # endif
433 #elif defined GNULIB_POSIXCHECK
434 # define _GL_FTELL_WARN /* Category 1, above.  */
435 # undef ftell
436 # undef ftello
437 # if HAVE_RAW_DECL_FTELLO
438 _GL_WARN_ON_USE (ftello, "ftello is unportable - "
439                  "use gnulib module ftello for portability");
440 # endif
441 #endif
442
443 #ifdef _GL_FTELL_WARN
444 # undef _GL_FTELL_WARN
445 /* Here, either ftell is undefined (but C89 guarantees that it is
446    declared), or it is defined as rpl_ftell (declared above).  */
447 _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB "
448                  "on 32-bit platforms - "
449                  "use ftello function for handling of large files");
450 #endif
451
452
453 #if @GNULIB_FWRITE@
454 # if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
455 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
456 #   undef fwrite
457 #   define fwrite rpl_fwrite
458 #  endif
459 _GL_FUNCDECL_RPL (fwrite, size_t,
460                   (const void *ptr, size_t s, size_t n, FILE *stream)
461                   _GL_ARG_NONNULL ((1, 4)));
462 _GL_CXXALIAS_RPL (fwrite, size_t,
463                   (const void *ptr, size_t s, size_t n, FILE *stream));
464 # else
465 _GL_CXXALIAS_SYS (fwrite, size_t,
466                   (const void *ptr, size_t s, size_t n, FILE *stream));
467 # endif
468 _GL_CXXALIASWARN (fwrite);
469 #endif
470
471 #if @GNULIB_GETDELIM@
472 /* Read input, up to (and including) the next occurrence of DELIMITER, from
473    STREAM, store it in *LINEPTR (and NUL-terminate it).
474    *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
475    bytes of space.  It is realloc'd as necessary.
476    Return the number of bytes read and stored at *LINEPTR (not including the
477    NUL terminator), or -1 on error or EOF.  */
478 # if @REPLACE_GETDELIM@
479 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
480 #   undef getdelim
481 #   define getdelim rpl_getdelim
482 #  endif
483 _GL_FUNCDECL_RPL (getdelim, ssize_t,
484                   (char **lineptr, size_t *linesize, int delimiter,
485                    FILE *stream)
486                   _GL_ARG_NONNULL ((1, 2, 4)));
487 _GL_CXXALIAS_RPL (getdelim, ssize_t,
488                   (char **lineptr, size_t *linesize, int delimiter,
489                    FILE *stream));
490 # else
491 #  if !@HAVE_DECL_GETDELIM@
492 _GL_FUNCDECL_SYS (getdelim, ssize_t,
493                   (char **lineptr, size_t *linesize, int delimiter,
494                    FILE *stream)
495                   _GL_ARG_NONNULL ((1, 2, 4)));
496 #  endif
497 _GL_CXXALIAS_SYS (getdelim, ssize_t,
498                   (char **lineptr, size_t *linesize, int delimiter,
499                    FILE *stream));
500 # endif
501 _GL_CXXALIASWARN (getdelim);
502 #elif defined GNULIB_POSIXCHECK
503 # undef getdelim
504 # if HAVE_RAW_DECL_GETDELIM
505 _GL_WARN_ON_USE (getdelim, "getdelim is unportable - "
506                  "use gnulib module getdelim for portability");
507 # endif
508 #endif
509
510 #if @GNULIB_GETLINE@
511 /* Read a line, up to (and including) the next newline, from STREAM, store it
512    in *LINEPTR (and NUL-terminate it).
513    *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
514    bytes of space.  It is realloc'd as necessary.
515    Return the number of bytes read and stored at *LINEPTR (not including the
516    NUL terminator), or -1 on error or EOF.  */
517 # if @REPLACE_GETLINE@
518 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
519 #   undef getline
520 #   define getline rpl_getline
521 #  endif
522 _GL_FUNCDECL_RPL (getline, ssize_t,
523                   (char **lineptr, size_t *linesize, FILE *stream)
524                   _GL_ARG_NONNULL ((1, 2, 3)));
525 _GL_CXXALIAS_RPL (getline, ssize_t,
526                   (char **lineptr, size_t *linesize, FILE *stream));
527 # else
528 #  if !@HAVE_DECL_GETLINE@
529 _GL_FUNCDECL_SYS (getline, ssize_t,
530                   (char **lineptr, size_t *linesize, FILE *stream)
531                   _GL_ARG_NONNULL ((1, 2, 3)));
532 #  endif
533 _GL_CXXALIAS_SYS (getline, ssize_t,
534                   (char **lineptr, size_t *linesize, FILE *stream));
535 # endif
536 _GL_CXXALIASWARN (getline);
537 #elif defined GNULIB_POSIXCHECK
538 # undef getline
539 # if HAVE_RAW_DECL_GETLINE
540 _GL_WARN_ON_USE (getline, "getline is unportable - "
541                  "use gnulib module getline for portability");
542 # endif
543 #endif
544
545 #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@
546 struct obstack;
547 /* Grow an obstack with formatted output.  Return the number of
548    bytes added to OBS.  No trailing nul byte is added, and the
549    object should be closed with obstack_finish before use.  Upon
550    memory allocation error, call obstack_alloc_failed_handler.  Upon
551    other error, return -1.  */
552 # if @REPLACE_OBSTACK_PRINTF@
553 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
554 #   define obstack_printf rpl_obstack_printf
555 #  endif
556 _GL_FUNCDECL_RPL (obstack_printf, int,
557                   (struct obstack *obs, const char *format, ...)
558                   __attribute__ ((__format__ (__printf__, 2, 3)))
559                   _GL_ARG_NONNULL ((1, 2)));
560 _GL_CXXALIAS_RPL (obstack_printf, int,
561                   (struct obstack *obs, const char *format, ...));
562 # else
563 #  if !@HAVE_DECL_OBSTACK_PRINTF@
564 _GL_FUNCDECL_SYS (obstack_printf, int,
565                   (struct obstack *obs, const char *format, ...)
566                   __attribute__ ((__format__ (__printf__, 2, 3)))
567                   _GL_ARG_NONNULL ((1, 2)));
568 #  endif
569 _GL_CXXALIAS_SYS (obstack_printf, int,
570                   (struct obstack *obs, const char *format, ...));
571 # endif
572 _GL_CXXALIASWARN (obstack_printf);
573 # if @REPLACE_OBSTACK_PRINTF@
574 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
575 #   define obstack_vprintf rpl_obstack_vprintf
576 #  endif
577 _GL_FUNCDECL_RPL (obstack_vprintf, int,
578                   (struct obstack *obs, const char *format, va_list args)
579                   __attribute__ ((__format__ (__printf__, 2, 0)))
580                   _GL_ARG_NONNULL ((1, 2)));
581 _GL_CXXALIAS_RPL (obstack_vprintf, int,
582                   (struct obstack *obs, const char *format, va_list args));
583 # else
584 #  if !@HAVE_DECL_OBSTACK_PRINTF@
585 _GL_FUNCDECL_SYS (obstack_vprintf, int,
586                   (struct obstack *obs, const char *format, va_list args)
587                   __attribute__ ((__format__ (__printf__, 2, 0)))
588                   _GL_ARG_NONNULL ((1, 2)));
589 #  endif
590 _GL_CXXALIAS_SYS (obstack_vprintf, int,
591                   (struct obstack *obs, const char *format, va_list args));
592 # endif
593 _GL_CXXALIASWARN (obstack_vprintf);
594 #endif
595
596 #if @GNULIB_PERROR@
597 /* Print a message to standard error, describing the value of ERRNO,
598    (if STRING is not NULL and not empty) prefixed with STRING and ": ",
599    and terminated with a newline.  */
600 # if @REPLACE_PERROR@
601 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
602 #   define perror rpl_perror
603 #  endif
604 _GL_FUNCDECL_RPL (perror, void, (const char *string));
605 _GL_CXXALIAS_RPL (perror, void, (const char *string));
606 # else
607 _GL_CXXALIAS_SYS (perror, void, (const char *string));
608 # endif
609 _GL_CXXALIASWARN (perror);
610 #elif defined GNULIB_POSIXCHECK
611 # undef perror
612 /* Assume perror is always declared.  */
613 _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "
614                  "use gnulib module perror for portability");
615 #endif
616
617 #if @GNULIB_POPEN@
618 # if @REPLACE_POPEN@
619 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
620 #   undef popen
621 #   define popen rpl_popen
622 #  endif
623 _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode)
624                                  _GL_ARG_NONNULL ((1, 2)));
625 _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));
626 # else
627 _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));
628 # endif
629 _GL_CXXALIASWARN (popen);
630 #elif defined GNULIB_POSIXCHECK
631 # undef popen
632 # if HAVE_RAW_DECL_POPEN
633 _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - "
634                  "use gnulib module popen or pipe for more portability");
635 # endif
636 #endif
637
638 #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@
639 # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \
640      || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@)
641 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
642 /* Don't break __attribute__((format(printf,M,N))).  */
643 #   define printf __printf__
644 #  endif
645 #  define GNULIB_overrides_printf 1
646 _GL_FUNCDECL_RPL_1 (__printf__, int,
647                     (const char *format, ...)
648                     __attribute__ ((__format__ (__printf__, 1, 2)))
649                     _GL_ARG_NONNULL ((1)));
650 _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...));
651 # else
652 _GL_CXXALIAS_SYS (printf, int, (const char *format, ...));
653 # endif
654 _GL_CXXALIASWARN (printf);
655 #endif
656 #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK
657 # if !GNULIB_overrides_printf
658 #  undef printf
659 # endif
660 /* Assume printf is always declared.  */
661 _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - "
662                  "use gnulib module printf-posix for portable "
663                  "POSIX compliance");
664 #endif
665
666 #if @GNULIB_PUTC@
667 # if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
668 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
669 #   undef putc
670 #   define putc rpl_fputc
671 #  endif
672 _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
673 _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream));
674 # else
675 _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream));
676 # endif
677 _GL_CXXALIASWARN (putc);
678 #endif
679
680 #if @GNULIB_PUTCHAR@
681 # if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
682 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
683 #   undef putchar
684 #   define putchar rpl_putchar
685 #  endif
686 _GL_FUNCDECL_RPL (putchar, int, (int c));
687 _GL_CXXALIAS_RPL (putchar, int, (int c));
688 # else
689 _GL_CXXALIAS_SYS (putchar, int, (int c));
690 # endif
691 _GL_CXXALIASWARN (putchar);
692 #endif
693
694 #if @GNULIB_PUTS@
695 # if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
696 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
697 #   undef puts
698 #   define puts rpl_puts
699 #  endif
700 _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1)));
701 _GL_CXXALIAS_RPL (puts, int, (const char *string));
702 # else
703 _GL_CXXALIAS_SYS (puts, int, (const char *string));
704 # endif
705 _GL_CXXALIASWARN (puts);
706 #endif
707
708 #if @GNULIB_REMOVE@
709 # if @REPLACE_REMOVE@
710 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
711 #   undef remove
712 #   define remove rpl_remove
713 #  endif
714 _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1)));
715 _GL_CXXALIAS_RPL (remove, int, (const char *name));
716 # else
717 _GL_CXXALIAS_SYS (remove, int, (const char *name));
718 # endif
719 _GL_CXXALIASWARN (remove);
720 #elif defined GNULIB_POSIXCHECK
721 # undef remove
722 /* Assume remove is always declared.  */
723 _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - "
724                  "use gnulib module remove for more portability");
725 #endif
726
727 #if @GNULIB_RENAME@
728 # if @REPLACE_RENAME@
729 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
730 #   undef rename
731 #   define rename rpl_rename
732 #  endif
733 _GL_FUNCDECL_RPL (rename, int,
734                   (const char *old_filename, const char *new_filename)
735                   _GL_ARG_NONNULL ((1, 2)));
736 _GL_CXXALIAS_RPL (rename, int,
737                   (const char *old_filename, const char *new_filename));
738 # else
739 _GL_CXXALIAS_SYS (rename, int,
740                   (const char *old_filename, const char *new_filename));
741 # endif
742 _GL_CXXALIASWARN (rename);
743 #elif defined GNULIB_POSIXCHECK
744 # undef rename
745 /* Assume rename is always declared.  */
746 _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - "
747                  "use gnulib module rename for more portability");
748 #endif
749
750 #if @GNULIB_RENAMEAT@
751 # if @REPLACE_RENAMEAT@
752 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
753 #   undef renameat
754 #   define renameat rpl_renameat
755 #  endif
756 _GL_FUNCDECL_RPL (renameat, int,
757                   (int fd1, char const *file1, int fd2, char const *file2)
758                   _GL_ARG_NONNULL ((2, 4)));
759 _GL_CXXALIAS_RPL (renameat, int,
760                   (int fd1, char const *file1, int fd2, char const *file2));
761 # else
762 #  if !@HAVE_RENAMEAT@
763 _GL_FUNCDECL_SYS (renameat, int,
764                   (int fd1, char const *file1, int fd2, char const *file2)
765                   _GL_ARG_NONNULL ((2, 4)));
766 #  endif
767 _GL_CXXALIAS_SYS (renameat, int,
768                   (int fd1, char const *file1, int fd2, char const *file2));
769 # endif
770 _GL_CXXALIASWARN (renameat);
771 #elif defined GNULIB_POSIXCHECK
772 # undef renameat
773 # if HAVE_RAW_DECL_RENAMEAT
774 _GL_WARN_ON_USE (renameat, "renameat is not portable - "
775                  "use gnulib module renameat for portability");
776 # endif
777 #endif
778
779 #if @GNULIB_SNPRINTF@
780 # if @REPLACE_SNPRINTF@
781 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
782 #   define snprintf rpl_snprintf
783 #  endif
784 _GL_FUNCDECL_RPL (snprintf, int,
785                   (char *str, size_t size, const char *format, ...)
786                   __attribute__ ((__format__ (__printf__, 3, 4)))
787                   _GL_ARG_NONNULL ((3)));
788 _GL_CXXALIAS_RPL (snprintf, int,
789                   (char *str, size_t size, const char *format, ...));
790 # else
791 #  if !@HAVE_DECL_SNPRINTF@
792 _GL_FUNCDECL_SYS (snprintf, int,
793                   (char *str, size_t size, const char *format, ...)
794                   __attribute__ ((__format__ (__printf__, 3, 4)))
795                   _GL_ARG_NONNULL ((3)));
796 #  endif
797 _GL_CXXALIAS_SYS (snprintf, int,
798                   (char *str, size_t size, const char *format, ...));
799 # endif
800 _GL_CXXALIASWARN (snprintf);
801 #elif defined GNULIB_POSIXCHECK
802 # undef snprintf
803 # if HAVE_RAW_DECL_SNPRINTF
804 _GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
805                  "use gnulib module snprintf for portability");
806 # endif
807 #endif
808
809 /* Some people would argue that sprintf should be handled like gets
810    (for example, OpenBSD issues a link warning for both functions),
811    since both can cause security holes due to buffer overruns.
812    However, we believe that sprintf can be used safely, and is more
813    efficient than snprintf in those safe cases; and as proof of our
814    belief, we use sprintf in several gnulib modules.  So this header
815    intentionally avoids adding a warning to sprintf except when
816    GNULIB_POSIXCHECK is defined.  */
817
818 #if @GNULIB_SPRINTF_POSIX@
819 # if @REPLACE_SPRINTF@
820 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
821 #   define sprintf rpl_sprintf
822 #  endif
823 _GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...)
824                                 __attribute__ ((__format__ (__printf__, 2, 3)))
825                                 _GL_ARG_NONNULL ((1, 2)));
826 _GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...));
827 # else
828 _GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...));
829 # endif
830 _GL_CXXALIASWARN (sprintf);
831 #elif defined GNULIB_POSIXCHECK
832 # undef sprintf
833 /* Assume sprintf is always declared.  */
834 _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - "
835                  "use gnulib module sprintf-posix for portable "
836                  "POSIX compliance");
837 #endif
838
839 #if @GNULIB_VASPRINTF@
840 /* Write formatted output to a string dynamically allocated with malloc().
841    If the memory allocation succeeds, store the address of the string in
842    *RESULT and return the number of resulting bytes, excluding the trailing
843    NUL.  Upon memory allocation error, or some other error, return -1.  */
844 # if @REPLACE_VASPRINTF@
845 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
846 #   define asprintf rpl_asprintf
847 #  endif
848 _GL_FUNCDECL_RPL (asprintf, int,
849                   (char **result, const char *format, ...)
850                   __attribute__ ((__format__ (__printf__, 2, 3)))
851                   _GL_ARG_NONNULL ((1, 2)));
852 _GL_CXXALIAS_RPL (asprintf, int,
853                   (char **result, const char *format, ...));
854 # else
855 #  if !@HAVE_VASPRINTF@
856 _GL_FUNCDECL_SYS (asprintf, int,
857                   (char **result, const char *format, ...)
858                   __attribute__ ((__format__ (__printf__, 2, 3)))
859                   _GL_ARG_NONNULL ((1, 2)));
860 #  endif
861 _GL_CXXALIAS_SYS (asprintf, int,
862                   (char **result, const char *format, ...));
863 # endif
864 _GL_CXXALIASWARN (asprintf);
865 # if @REPLACE_VASPRINTF@
866 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
867 #   define vasprintf rpl_vasprintf
868 #  endif
869 _GL_FUNCDECL_RPL (vasprintf, int,
870                   (char **result, const char *format, va_list args)
871                   __attribute__ ((__format__ (__printf__, 2, 0)))
872                   _GL_ARG_NONNULL ((1, 2)));
873 _GL_CXXALIAS_RPL (vasprintf, int,
874                   (char **result, const char *format, va_list args));
875 # else
876 #  if !@HAVE_VASPRINTF@
877 _GL_FUNCDECL_SYS (vasprintf, int,
878                   (char **result, const char *format, va_list args)
879                   __attribute__ ((__format__ (__printf__, 2, 0)))
880                   _GL_ARG_NONNULL ((1, 2)));
881 #  endif
882 _GL_CXXALIAS_SYS (vasprintf, int,
883                   (char **result, const char *format, va_list args));
884 # endif
885 _GL_CXXALIASWARN (vasprintf);
886 #endif
887
888 #if @GNULIB_VDPRINTF@
889 # if @REPLACE_VDPRINTF@
890 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
891 #   define vdprintf rpl_vdprintf
892 #  endif
893 _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args)
894                                  __attribute__ ((__format__ (__printf__, 2, 0)))
895                                  _GL_ARG_NONNULL ((2)));
896 _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args));
897 # else
898 #  if !@HAVE_VDPRINTF@
899 _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args)
900                                  __attribute__ ((__format__ (__printf__, 2, 0)))
901                                  _GL_ARG_NONNULL ((2)));
902 #  endif
903 _GL_CXXALIAS_SYS (vdprintf, int, (int fd, const char *format, va_list args));
904 # endif
905 _GL_CXXALIASWARN (vdprintf);
906 #elif defined GNULIB_POSIXCHECK
907 # undef vdprintf
908 # if HAVE_RAW_DECL_VDPRINTF
909 _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - "
910                  "use gnulib module vdprintf for portability");
911 # endif
912 #endif
913
914 #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@
915 # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \
916      || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@)
917 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
918 #   define vfprintf rpl_vfprintf
919 #  endif
920 #  define GNULIB_overrides_vfprintf 1
921 _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
922                                  __attribute__ ((__format__ (__printf__, 2, 0)))
923                                  _GL_ARG_NONNULL ((1, 2)));
924 _GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args));
925 # else
926 _GL_CXXALIAS_SYS (vfprintf, int, (FILE *fp, const char *format, va_list args));
927 # endif
928 _GL_CXXALIASWARN (vfprintf);
929 #endif
930 #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
931 # if !GNULIB_overrides_vfprintf
932 #  undef vfprintf
933 # endif
934 /* Assume vfprintf is always declared.  */
935 _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - "
936                  "use gnulib module vfprintf-posix for portable "
937                       "POSIX compliance");
938 #endif
939
940 #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@
941 # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \
942      || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@)
943 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
944 #   define vprintf rpl_vprintf
945 #  endif
946 #  define GNULIB_overrides_vprintf 1
947 _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
948                                 __attribute__ ((__format__ (__printf__, 1, 0)))
949                                 _GL_ARG_NONNULL ((1)));
950 _GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args));
951 # else
952 _GL_CXXALIAS_SYS (vprintf, int, (const char *format, va_list args));
953 # endif
954 _GL_CXXALIASWARN (vprintf);
955 #endif
956 #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
957 # if !GNULIB_overrides_vprintf
958 #  undef vprintf
959 # endif
960 /* Assume vprintf is always declared.  */
961 _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - "
962                  "use gnulib module vprintf-posix for portable "
963                  "POSIX compliance");
964 #endif
965
966 #if @GNULIB_VSNPRINTF@
967 # if @REPLACE_VSNPRINTF@
968 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
969 #   define vsnprintf rpl_vsnprintf
970 #  endif
971 _GL_FUNCDECL_RPL (vsnprintf, int,
972                   (char *str, size_t size, const char *format, va_list args)
973                   __attribute__ ((__format__ (__printf__, 3, 0)))
974                   _GL_ARG_NONNULL ((3)));
975 _GL_CXXALIAS_RPL (vsnprintf, int,
976                   (char *str, size_t size, const char *format, va_list args));
977 # else
978 #  if !@HAVE_DECL_VSNPRINTF@
979 _GL_FUNCDECL_SYS (vsnprintf, int,
980                   (char *str, size_t size, const char *format, va_list args)
981                   __attribute__ ((__format__ (__printf__, 3, 0)))
982                   _GL_ARG_NONNULL ((3)));
983 #  endif
984 _GL_CXXALIAS_SYS (vsnprintf, int,
985                   (char *str, size_t size, const char *format, va_list args));
986 # endif
987 _GL_CXXALIASWARN (vsnprintf);
988 #elif defined GNULIB_POSIXCHECK
989 # undef vsnprintf
990 # if HAVE_RAW_DECL_VSNPRINTF
991 _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - "
992                  "use gnulib module vsnprintf for portability");
993 # endif
994 #endif
995
996 #if @GNULIB_VSPRINTF_POSIX@
997 # if @REPLACE_VSPRINTF@
998 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
999 #   define vsprintf rpl_vsprintf
1000 #  endif
1001 _GL_FUNCDECL_RPL (vsprintf, int,
1002                   (char *str, const char *format, va_list args)
1003                   __attribute__ ((__format__ (__printf__, 2, 0)))
1004                   _GL_ARG_NONNULL ((1, 2)));
1005 _GL_CXXALIAS_RPL (vsprintf, int,
1006                   (char *str, const char *format, va_list args));
1007 # else
1008 _GL_CXXALIAS_SYS (vsprintf, int,
1009                   (char *str, const char *format, va_list args));
1010 # endif
1011 _GL_CXXALIASWARN (vsprintf);
1012 #elif defined GNULIB_POSIXCHECK
1013 # undef vsprintf
1014 /* Assume vsprintf is always declared.  */
1015 _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - "
1016                  "use gnulib module vsprintf-posix for portable "
1017                       "POSIX compliance");
1018 #endif
1019
1020
1021 #endif /* _GL_STDIO_H */
1022 #endif /* _GL_STDIO_H */
1023 #endif