shithub: scc

Download patch

ref: f25ac60f427a1eb55971e17921c72ef2afa7e8f8
parent: 46d3eab0b1e077005fcc4a7bc5257be9a411d1a1
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Thu Dec 7 04:07:39 EST 2017

[lib/c] Add perror() and strerror()

--- a/lib/c/include/errno.h
+++ b/lib/c/include/errno.h
@@ -8,5 +8,7 @@
 #define EBADF  5
 
 extern int errno;
+extern char *_sys_errlist[];
+extern int _sys_nerr;
 
 #endif
--- a/lib/c/src/Makefile
+++ b/lib/c/src/Makefile
@@ -4,6 +4,7 @@
 
 OBJ = bsearch.o \
       abs.o __abs.o labs.o __labs.o llabs.o __labs.o \
+      perror.o strerror.o \
       printf.o fprintf.o vfprintf.o \
       fgets.o gets.of fgetc.o fputc.o getchar.o putchar.o \
       fputs.o puts.o fread.o fwrite.o \
--- /dev/null
+++ b/lib/c/src/perror.c
@@ -1,0 +1,17 @@
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#undef perror
+
+void
+perror(const char *msg)
+{
+	if (msg && *msg) {
+		fputs(msg, stderr);
+		putc(':', stderr);
+		putc(' ', stderr);
+	}
+	fputs(strerror(errno), stderr);
+	putc('\n', stderr);
+}
--- /dev/null
+++ b/lib/c/src/strerror.c
@@ -1,0 +1,13 @@
+
+#include <errno.h>
+#include <string.h>
+#undef strerror
+
+char *
+strerror(int errnum)
+{
+	if (errnum < _sys_nerr)
+		return _sys_errlist[errnum];
+	else
+		return "Unknown error";
+}