commit 653911418286685682f182efffb71d66b0aa29bf
parent abe6c3c28a0281b373311c19b4e1512e398d5cb2
Author: Roberto Vargas <roberto.vargas@arm.com>
Date: Fri, 23 Nov 2018 17:34:55 +0000
[libc] Fix strerror()
The script was failling and the sys/errno.h were wrong in some
cases. This patch also merges the unknown case of strerror
to make easier the relocation of error messages.
Change-Id: Id480aac1deebc4e1d9e72188268f9f4ff7a21267
Diffstat:
7 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/include/bits/dragonfly/sys/errno.h b/include/bits/dragonfly/sys/errno.h
@@ -94,11 +94,4 @@ extern const int _sys_nerr;
#define EMULTIHOP 90 /* Multihop attempted */
#define ENOLINK 91 /* Link has been severed */
#define EPROTO 92 /* Protocol error */
-#define ENOMEDIUM 93 /* linux */
-#define EUNUSED94 94 /* */
-#define EUNUSED95 95 /* */
-#define EUNUSED96 96 /* */
-#define EUNUSED97 97 /* */
-#define EUNUSED98 98 /* */
-#define EASYNC 99 /* XXX */
-#define ELAST 99 /* Must be equal largest errno */
+#define EUNKNOWN 93 /* Unknown error */
diff --git a/include/bits/linux/sys/errno.h b/include/bits/linux/sys/errno.h
@@ -133,3 +133,4 @@ extern const int _sys_nerr;
#define ENOTRECOVERABLE 131 /* State not recoverable */
#define ERFKILL 132 /* Operation not possible due to RF-kill */
#define EHWPOISON 133 /* Memory page has hardware error */
+#define EUNKNOWN 134 /* Unknown error */
diff --git a/include/bits/netbsd/sys/errno.h b/include/bits/netbsd/sys/errno.h
@@ -97,5 +97,5 @@ extern const int _sys_nerr;
#define ENOATTR 93 /* Attribute not found */
#define EMULTIHOP 94 /* Multihop attempted */
#define ENOLINK 95 /* Link has been severed */
-#define ELAST 96 /* Must equal largest errno */
#define EPROTO 96 /* Protocol error */
+#define EUNKNOWN 97 /* Unknown error */
diff --git a/include/bits/openbsd/sys/errno.h b/include/bits/openbsd/sys/errno.h
@@ -96,5 +96,5 @@ extern const int _sys_nerr;
#define EBADMSG 92 /* Bad message */
#define ENOTRECOVERABLE 93 /* State not recoverable */
#define EOWNERDEAD 94 /* Previous owner died */
-#define ELAST 95 /* Must be equal largest errno */
#define EPROTO 95 /* Protocol error */
+#define EUNKNOWN 96 /* Unknown error */
diff --git a/include/bits/rcode/sys/errno.h b/include/bits/rcode/sys/errno.h
@@ -44,3 +44,4 @@ extern const int _sys_nerr;
#define ETXTBSY 38 /* Text file busy */
#define EDOM 39 /* Math argument out of domain of func */
#define ERANGE 40 /* Math result not representable */
+#define EUNKNOWN 41 /* Unknown error */
diff --git a/src/libc/arch/mkerrstr b/src/libc/arch/mkerrstr
@@ -18,6 +18,8 @@ END {
print "char *const _sys_errlist[] = {"
for (i in errstr)
printf "\t%-20.20s = \"%s\",\n", "[" i "]", errstr[i]
+ printf "\t%-20.20s = \"%s\",\n", "[EUNKNOWN]", "Unknown error"
+
print "};"
- print "const int _sys_nerr =", $2 + 1 ";"
+ print "const int _sys_nerr =", max";"
}' $@ > $$.tmp && mv $$.tmp _sys_errlist.c
diff --git a/src/libc/string/strerror.c b/src/libc/string/strerror.c
@@ -5,8 +5,7 @@
char *
strerror(int errnum)
{
- if (errnum < _sys_nerr)
- return _sys_errlist[errnum];
- else
- return "Unknown error";
+ if (errnum > _sys_nerr)
+ errnum = EUNKNOWN;
+ return _sys_errlist[errnum];
}