Next: , Previous: strerror, Up: Strings


5.25 strerror_r—convert error number to string and copy to buffer

Synopsis

     #include <string.h>
     #ifdef _GNU_SOURCE
     char *strerror_r(int errnum, char *buffer, size_t n);
     #else
     int strerror_r(int errnum, char *buffer, size_t n);
     #endif
     

Description
strerror_r converts the error number errnum into a string and copies the result into the supplied buffer for a length up to n, including the NUL terminator. The value of errnum is usually a copy of errno. If errnum is not a known error number, the result is the empty string.

See strerror for how strings are mapped to errnum.


Returns
There are two variants: the GNU version always returns a NUL-terminated string, which is buffer if all went well, but which is another pointer if n was too small (leaving buffer untouched). If the return is not buffer, your application must not modify that string. The POSIX version returns 0 on success, EINVAL if errnum was not recognized, and ERANGE if n was too small. The variant chosen depends on macros that you define before inclusion of string.h.


Portability
strerror_r with a char * result is a GNU extension. strerror_r with an int result is required by POSIX 2001. This function is compliant only if _user_strerror is not provided, or if it is thread-safe and uses separate storage according to whether the second argument of that function is non-zero. For more details on _user_strerror, see the strerror documentation.

POSIX states that the contents of buf are unspecified on error, although this implementation guarantees a NUL-terminated string for all except n of 0.

POSIX recommends that unknown errnum result in a message including that value, however it is not a requirement and this implementation provides only an empty string (unless you provide _user_strerror). POSIX also recommends that unknown errnum fail with EINVAL even when providing such a message, however it is not a requirement and this implementation will return success if _user_strerror provided a non-empty alternate string without assigning into its third argument.

strerror_r requires no supporting OS subroutines.