X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=klibc%2Fklibc%2Fstrerror.c;h=c8e3eac793517244258542cc535dda19ebbd430b;hb=cc0e9bfc350e6a8b3fff79a9a0f2a97afa9b3825;hp=62705553a6d000df790d183f2208c2827a1c1708;hpb=3555a14bae9f372385e4bc01368027cdbc29384c;p=elogind.git diff --git a/klibc/klibc/strerror.c b/klibc/klibc/strerror.c index 62705553a..c8e3eac79 100644 --- a/klibc/klibc/strerror.c +++ b/klibc/klibc/strerror.c @@ -7,18 +7,28 @@ char *strerror(int errnum) { static char message[32] = "error "; /* enough for error 2^63-1 */ - char numbuf[32]; char *p; + 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; }