/* POSIX variant of strerror_r. */ | |
#undef __STRICT_ANSI__ | |
#include <errno.h> | |
#include <string.h> | |
int | |
_DEFUN (__xpg_strerror_r, (errnum, buffer, n), | |
int errnum _AND | |
char *buffer _AND | |
size_t n) | |
{ | |
char *error; | |
int result = 0; | |
if (!n) | |
return ERANGE; | |
error = _strerror_r (_REENT, errnum, 1, &result); | |
if (strlen (error) >= n) | |
{ | |
memcpy (buffer, error, n - 1); | |
buffer[n - 1] = '\0'; | |
return ERANGE; | |
} | |
strcpy (buffer, error); | |
return (result || *error) ? result : EINVAL; | |
} |