summaryrefslogtreecommitdiffstats
path: root/usr/klibc/strerror.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/klibc/strerror.c')
-rw-r--r--usr/klibc/strerror.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/usr/klibc/strerror.c b/usr/klibc/strerror.c
new file mode 100644
index 0000000..fed0e49
--- /dev/null
+++ b/usr/klibc/strerror.c
@@ -0,0 +1,33 @@
+/*
+ * strerror.c
+ */
+
+#include <string.h>
+
+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 = (e % 10) + '0';
+ e /= 10;
+ } while (e);
+
+ memcpy(message + 6, p, (numbuf + sizeof numbuf) - p);
+
+ return message;
+}