char *strerror(int errnum)
{
static char message[32] = "error "; /* enough for error 2^63-1 */
-
char numbuf[32];
char *p;
- int len;
+ unsigned int e = (unsigned int)errnum;
+
+#ifdef WITH_ERRLIST
+ extern const int sys_nerr;
+ extern const char * const sys_errlist[];
+
+ if ( e < (unsigned int)sys_nerr && sys_errlist[e] )
+ return (char *)sys_errlist[e];
+#endif
p = numbuf+sizeof numbuf;
*--p = '\0';
do {
- *--p = (errnum % 10) + '0';
- errnum /= 10;
- } while ( errnum );
+ *--p = (e % 10) + '0';
+ e /= 10;
+ } while ( e );
+
+ memcpy(message+6, p, (numbuf+sizeof numbuf)-p);
- return (char *)memcpy(message+6, p, (numbuf+sizeof numbuf)-p);
+ return message;
}