manual: complete example in error message documentation

The manual gives "an example showing how to handle failure to open a
file correctly."  The example function, open_sesame, uses the
newly-introduced strerror function and errno and
program_invocation_short_name variables.  It fails to specify GNU
extensions, however, so attempts to use it in the following way:

    int main (void) {open_sesame ("badname");}

fail during compilation with "error: ‘program_invocation_short_name’
undeclared", indicating the example is incomplete.  The presence of
"#include"s suggest everything neccesary for the function to work should
be present.  For completeness, the example is lacking the following line:

    #define _GNU_SOURCE

as the declarations of program_invocation_*name in errno.h are wrapped
in an "#ifdef __USE_GNU" conditional.

The documentation of the variables is also expanded, adding that their
definition lies in errno.h and noting specifically they are GNU
extensions.
This commit is contained in:
Rical Jasan 2015-03-06 00:59:49 -05:00 committed by Mike Frysinger
parent 4ca8ddfb05
commit 7e7af3496e
2 changed files with 20 additions and 6 deletions

View File

@ -1,3 +1,11 @@
2015-03-06 Rical Jasan <ricaljasan@pacific.net>
* manual/errno.texi (Error Messages): Complete example function
by adding missing #define.
(program_invocation_name): Add statement indicating GNU
extension and reference which header file declares the variable.
(program_invocation_short_name): Likewise.
2015-03-06 Mike Frysinger <vapier@gentoo.org>
* manual/errno.texi (Error Messages): Delete strerror ISO C89

View File

@ -1377,6 +1377,8 @@ This variable's value is the name that was used to invoke the program
running in the current process. It is the same as @code{argv[0]}. Note
that this is not necessarily a useful file name; often it contains no
directory names. @xref{Program Arguments}.
This variable is a GNU extension and is declared in @file{errno.h}.
@end deftypevar
@comment errno.h
@ -1386,17 +1388,19 @@ This variable's value is the name that was used to invoke the program
running in the current process, with directory names removed. (That is
to say, it is the same as @code{program_invocation_name} minus
everything up to the last slash, if any.)
This variable is a GNU extension and is declared in @file{errno.h}.
@end deftypevar
The library initialization code sets up both of these variables before
calling @code{main}.
@strong{Portability Note:} These two variables are GNU extensions. If
you want your program to work with non-GNU libraries, you must save the
value of @code{argv[0]} in @code{main}, and then strip off the directory
names yourself. We added these extensions to make it possible to write
self-contained error-reporting subroutines that require no explicit
cooperation from @code{main}.
@strong{Portability Note:} If you want your program to work with
non-GNU libraries, you must save the value of @code{argv[0]} in
@code{main}, and then strip off the directory names yourself. We
added these extensions to make it possible to write self-contained
error-reporting subroutines that require no explicit cooperation from
@code{main}.
Here is an example showing how to handle failure to open a file
correctly. The function @code{open_sesame} tries to open the named file
@ -1410,6 +1414,8 @@ save it in a local variable instead, because those other library
functions might overwrite @code{errno} in the meantime.
@smallexample
#define _GNU_SOURCE
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>