/* POSIX variant of strerror_r. */ #undef __STRICT_ANSI__ #include #include 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; }