mirror of
https://git.savannah.gnu.org/git/gnulib.git
synced 2025-08-17 12:41:05 +03:00
* lib/unistd.in.h (write): Enable replacement also if GNULIB_UNISTD_H_NONBLOCKING is 1. * lib/write.c: Enable replacement also if GNULIB_NONBLOCKING. (rpl_write): When failing to write on a non-blocking pipe, change errno from ENOSPC to EAGAIN. * lib/stdio.in.h (fprintf, fputc, fputs, fwrite, printf, putc, putchar, puts, vfprintf, vprintf): Enable replacement also if GNULIB_STDIO_H_NONBLOCKING is 1. * lib/stdio-write.c: Enable replacements also if GNULIB_NONBLOCKING. (CLEAR_ERRNO, HANDLE_ENOSPC): New macros. (CLEAR_LastError, HANDLE_ERROR_NO_DATA): New macros, extracted from CALL_WITH_SIGPIPE_EMULATION. (CALL_WITH_SIGPIPE_EMULATION): Use them. * m4/nonblocking.m4: New file. * m4/write.m4 (gl_FUNC_WRITE): Enable REPLACE_WRITE also if required for non-blocking I/O support. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_UNISTD_H_NONBLOCKING. * m4/stdio_h.m4 (gl_STDIO_H): Enable REPLACE_STDIO_WRITE_FUNCS also if required for non-blocking I/O support. (gl_STDIO_H_DEFAULTS): Initialize GNULIB_STDIO_H_NONBLOCKING. * modules/nonblocking (Files): Add m4/nonblocking.m4, lib/stdio-write.c, m4/asm-underscore.m4. (Depends-on): Add stdio, unistd. (configure.ac): Invoke gl_NONBLOCKING_IO. Define GNULIB_NONBLOCKING. Set GNULIB_STDIO_H_NONBLOCKING, GNULIB_UNISTD_H_NONBLOCKING. * modules/unistd (Makefile.am): Substitute GNULIB_UNISTD_H_NONBLOCKING. * modules/stdio (Makefile.am): Substitute GNULIB_STDIO_H_NONBLOCKING. * doc/posix-functions/fprintf.texi: Mention 'nonblocking' module and problem with non-blocking pipes. * doc/posix-functions/fputc.texi: Likewise. * doc/posix-functions/fputs.texi: Likewise. * doc/posix-functions/fwrite.texi: Likewise. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/putc.texi: Likewise. * doc/posix-functions/putchar.texi: Likewise. * doc/posix-functions/puts.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/write.texi: Likewise.
87 lines
3.1 KiB
Plaintext
87 lines
3.1 KiB
Plaintext
@node vfprintf
|
|
@section @code{vfprintf}
|
|
@findex vfprintf
|
|
|
|
POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/vfprintf.html}
|
|
|
|
Gnulib module: vfprintf-posix or stdio, nonblocking, sigpipe
|
|
|
|
Portability problems fixed by Gnulib module @code{vfprintf-posix}:
|
|
@itemize
|
|
@item
|
|
This function does not support size specifiers as in C99 (@code{hh}, @code{ll},
|
|
@code{j}, @code{t}, @code{z}) on some platforms:
|
|
AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS.
|
|
@item
|
|
printf of @samp{long double} numbers is unsupported on some platforms:
|
|
mingw, BeOS.
|
|
@item
|
|
printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an
|
|
incorrect result on some platforms:
|
|
AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw.
|
|
@item
|
|
This function does not support the @samp{a} and @samp{A} directives on some
|
|
platforms:
|
|
glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11,
|
|
IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS.
|
|
@item
|
|
This function does not support the @samp{F} directive on some platforms:
|
|
NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9,
|
|
Cygwin 1.5.x, mingw, BeOS.
|
|
@item
|
|
This function does not support the @samp{ls} directive on some platforms:
|
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku.
|
|
@item
|
|
This function does not support precisions in the @samp{ls} directive correctly
|
|
on some platforms:
|
|
Solaris 11 2010-11.
|
|
@item
|
|
This function does not support format directives that access arguments in an
|
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
|
NetBSD 3.0, mingw, BeOS.
|
|
@item
|
|
This function doesn't support the @code{'} flag on some platforms:
|
|
NetBSD 3.0, Cygwin 1.5.24, mingw.
|
|
@item
|
|
This function behaves incorrectly when a @samp{-} flag and a negative width
|
|
are specified together, on some platforms:
|
|
HP-UX 10.20.
|
|
@item
|
|
printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded
|
|
with zeroes) on some platforms:
|
|
MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw.
|
|
@item
|
|
This function does not support precisions larger than 512 or 1024 in integer,
|
|
floating-point and pointer output on some platforms:
|
|
Solaris 10/x86, mingw, BeOS.
|
|
@item
|
|
This function mishandles large floating point precisions
|
|
(for example, formatting 1.0 with @samp{"%.511f"})
|
|
on some platforms:
|
|
Solaris 10.
|
|
@item
|
|
This function can crash in out-of-memory conditions on some platforms:
|
|
MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0.
|
|
@end itemize
|
|
|
|
Portability problems fixed by Gnulib module @code{stdio} or @code{vfprintf-posix}, together with module @code{nonblocking}:
|
|
@itemize
|
|
@item
|
|
When writing to a non-blocking pipe whose buffer is full, this function fails
|
|
with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some
|
|
platforms:
|
|
mingw.
|
|
@end itemize
|
|
|
|
Portability problems fixed by Gnulib module @code{stdio} or @code{vfprintf-posix}, together with module @code{sigpipe}:
|
|
@itemize
|
|
@item
|
|
When writing to a pipe with no readers, this function fails, instead of
|
|
obeying the current @code{SIGPIPE} handler, on some platforms:
|
|
mingw.
|
|
@end itemize
|
|
|
|
Portability problems not fixed by Gnulib:
|
|
@itemize
|
|
@end itemize
|