diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | manual/errno.texi | 28 |
2 files changed, 20 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog index 02f491b6b0..f87bc14690 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2017-12-29 Zack Weinberg <zackw@panix.com> + + [BZ #22615] + * manual/errno.texi (Checking for Errors): Explicitly say that errno + might be set on success. + 2017-12-29 Aurelien Jarno <aurelien@aurel32.net> [BZ #22611] diff --git a/manual/errno.texi b/manual/errno.texi index 3e0b862c4e..73272fd884 100644 --- a/manual/errno.texi +++ b/manual/errno.texi @@ -47,20 +47,20 @@ However, a properly written signal handler saves and restores the value of @code{errno}, so you generally do not need to worry about this possibility except when writing signal handlers. -The initial value of @code{errno} at program startup is zero. Many -library functions are guaranteed to set it to certain nonzero values -when they encounter certain kinds of errors. These error conditions are -listed for each function. These functions do not change @code{errno} -when they succeed; thus, the value of @code{errno} after a successful -call is not necessarily zero, and you should not use @code{errno} to -determine @emph{whether} a call failed. The proper way to do that is -documented for each function. @emph{If} the call failed, you can -examine @code{errno}. - -Many library functions can set @code{errno} to a nonzero value as a -result of calling other library functions which might fail. You should -assume that any library function might alter @code{errno} when the -function returns an error. +The initial value of @code{errno} at program startup is zero. In many +cases, when a library function encounters an error, it will set +@code{errno} to a non-zero value to indicate what specific error +condition occurred. The documentation for each function lists the +error conditions that are possible for that function. Not all library +functions use this mechanism; some return an error code directly, +instead. + +@strong{Warning:} Many library functions may set @code{errno} to some +meaningless non-zero value even if they did not encounter any errors, +and even if they return error codes directly. Therefore, it is +usually incorrect to check @emph{whether} an error occurred by +inspecting the value of @code{errno}. The proper way to check for +error is documented for each function. @strong{Portability Note:} @w{ISO C} specifies @code{errno} as a ``modifiable lvalue'' rather than as a variable, permitting it to be |