X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=klibc%2Fklibc%2Fstrerror.c;h=c8e3eac793517244258542cc535dda19ebbd430b;hb=a0622777688ad84ef3d789e0171cfb0ca3dc21d2;hp=754a30693cc54f4100860a2e9290e8764fae8783;hpb=a41a0e28c2ba0abf99b5e7ea17645ae0e4f05758;p=elogind.git diff --git a/klibc/klibc/strerror.c b/klibc/klibc/strerror.c index 754a30693..c8e3eac79 100644 --- a/klibc/klibc/strerror.c +++ b/klibc/klibc/strerror.c @@ -7,19 +7,28 @@ 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; }