strerror_r is a reentrant version of strerror. strerror_r returns a pointer to an error message corresponding to error number errnum. The returned pointer may point within the buffer buf (at most buflen bytes). 
Note the optional use of the buffer, unlike the strerror_r found in the Single UNIX Specification, Version 3, in which the message is always copied into the supplied buffer. The return types also differ.