mirror of
https://git.savannah.gnu.org/git/gnulib.git
synced 2025-08-18 23:42:00 +03:00
glibc was not the only platform where fprintf(fopen(,"r")) fails to detect errors; cygwin 1.7.9 is another culprit (although it will be fixed for 1.7.10), and I suspect that several other platforms were failing perror2 for the same reason. At this point, there are so many functions affected, and the way to avoid the bug is easy enough (don't pass bogus streams to output-producing functions), that I'm not worried about fixing things other than to document them. * tests/test-perror2.c (main): Relax test on requiring detection of stream errors, and use unbuffered stream. * doc/posix-functions/dprintf.texi (dprintf): Document bug. * doc/posix-functions/fprintf.texi (fprintf): Likewise. * doc/posix-functions/fputc.texi (fputc): Likewise. * doc/posix-functions/fputs.texi (fputs): Likewise. * doc/posix-functions/fputws.texi (fputws): Likewise. * doc/posix-functions/fwprintf.texi (fwprintf): Likewise. * doc/posix-functions/fwrite.texi (fwrite): Likewise. * doc/posix-functions/getopt.texi (getopt): Likewise. * doc/posix-functions/perror.texi (perror): Likewise. * doc/posix-functions/printf.texi (printf): Likewise. * doc/posix-functions/psiginfo.texi (psiginfo): Likewise. * doc/posix-functions/psignal.texi (psignal): Likewise. * doc/posix-functions/putc.texi (putc): Likewise. * doc/posix-functions/putc_unlocked.texi (putc_unlocked): Likewise. * doc/posix-functions/putchar.texi (putchar): Likewise. * doc/posix-functions/putchar_unlocked.texi (putchar_unlocked): Likewise. * doc/posix-functions/puts.texi (puts): Likewise. * doc/posix-functions/putwc.texi (putwc): Likewise. * doc/posix-functions/putwchar.texi (putwchar): Likewise. * doc/posix-functions/vdprintf.texi (vdprintf): Likewise. * doc/posix-functions/vfprintf.texi (vfprintf): Likewise. * doc/posix-functions/vfwprintf.texi (vfwprintf): Likewise. * doc/posix-functions/vprintf.texi (vprintf): Likewise. * doc/posix-functions/vwprintf.texi (vwprintf): Likewise. * doc/posix-functions/wordexp.texi (wordexp): Likewise. * doc/posix-functions/wprintf.texi (wprintf): Likewise. Signed-off-by: Eric Blake <eblake@redhat.com>
75 lines
2.8 KiB
Plaintext
75 lines
2.8 KiB
Plaintext
@node getopt
|
|
@section @code{getopt}
|
|
@findex getopt
|
|
|
|
POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getopt.html}
|
|
|
|
Gnulib module: getopt-posix or getopt-gnu
|
|
|
|
The module @code{getopt-gnu} has support for ``long options'' and for
|
|
``options that take optional arguments''. Compared to the API defined by POSIX,
|
|
it adds a header file @code{<getopt.h>} and a function @code{getopt_long}.
|
|
|
|
Portability problems fixed by either Gnulib module @code{getopt-posix} or @code{getopt-gnu}:
|
|
@itemize
|
|
@item
|
|
The @code{getopt} function keeps some internal state that cannot be explicitly
|
|
reset on some platforms:
|
|
mingw.
|
|
@item
|
|
The value of @code{optind} after a missing required argument is wrong
|
|
on some platforms:
|
|
MacOS 10.5, AIX 7.1.
|
|
@end itemize
|
|
|
|
Portability problems fixed by Gnulib module @code{getopt-gnu}:
|
|
@itemize
|
|
@item
|
|
The function @code{getopt} does not support the @samp{+} flag in the options
|
|
string on some platforms:
|
|
MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11.
|
|
@item
|
|
The function @code{getopt} does not obey the combination of @samp{+}
|
|
and @samp{:} flags in the options string on some platforms:
|
|
glibc 2.11.
|
|
@item
|
|
The function @code{getopt} does not obey the @samp{-} flag in the options
|
|
string when @env{POSIXLY_CORRECT} is set on some platforms:
|
|
Cygwin 1.7.0.
|
|
@item
|
|
The function @code{getopt} does not support options with optional arguments
|
|
on some platforms:
|
|
MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1,
|
|
Solaris 11 2010-11, Cygwin 1.5.x.
|
|
@item
|
|
The function @code{getopt_long} is missing on some platforms:
|
|
AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Interix 3.5.
|
|
@item
|
|
The function @code{getopt_long_only} is missing on some platforms:
|
|
MacOS X 10.3, FreeBSD 5.2.1, NetBSD 5.0, AIX 5.1, HP-UX 11, IRIX 6.5,
|
|
OSF/1 5.1, Solaris 9, mingw, Interix 3.5.
|
|
@end itemize
|
|
|
|
Portability problems not fixed by Gnulib:
|
|
@itemize
|
|
@item
|
|
The default behavior of the glibc implementation of @code{getopt} allows
|
|
mixing option and non-option arguments on the command line in any order.
|
|
Other implementations, such as the one in Cygwin, enforce strict POSIX
|
|
compliance: they require that the option arguments precede the non-option
|
|
arguments. This is something to watch out in your program's
|
|
testsuite.
|
|
@item
|
|
The glibc implementation allows a complete reset of the environment,
|
|
including re-checking for @env{POSIXLY_CORRECT}, by setting
|
|
@code{optind} to 0. Several BSD implementations provide @code{optreset},
|
|
causing a reset by setting it non-zero, although it does not
|
|
necessarily re-read @env{POSIXLY_CORRECT}. Solaris @code{getopt} does
|
|
not support either reset method, but does not maintain state that
|
|
needs the extra level of reset.
|
|
@item
|
|
On some platforms, this function does not set the stream error
|
|
indicator on attempts to write to a read-only stream:
|
|
glibc 2.13, Cygwin 1.7.9.
|
|
@end itemize
|