error: fixed up low space version
authorAlan Cox <alan@linux.intel.com>
Thu, 21 May 2015 22:07:52 +0000 (23:07 +0100)
committerAlan Cox <alan@linux.intel.com>
Thu, 21 May 2015 22:07:52 +0000 (23:07 +0100)
Library/libs/error.c

index c9723e9..7cdc530 100644 (file)
@@ -1,52 +1,52 @@
-/* Copyright (C) 1996 Robert de Bath <robert@debath.thenet.co.uk>\r
- * This file is part of the Linux-8086 C library and is distributed\r
- * under the GNU Library General Public License.\r
- *\r
- * Rewritten by Alan Cox to use a binary file format and save a lot of space\r
- */  \r
-#include <unistd.h>\r
-#include <string.h>\r
-#include <stdlib.h>\r
-#include <paths.h>\r
-#include <errno.h>\r
-#include <fcntl.h>\r
-\r
+/* Copyright (C) 1996 Robert de Bath <robert@debath.thenet.co.uk>
+ * This file is part of the Linux-8086 C library and is distributed
+ * under the GNU Library General Public License.
+ *
+ * Rewritten by Alan Cox to use a binary file format and save a lot of space
+ */
+
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <paths.h>
+#include <errno.h>
+#include <fcntl.h>
+
 static uint8_t *__sys_errlist;
 static uint16_t *__sys_errptr;
 static int __sys_nerr;
 static char retbuf[80];
-\r
-static void _load_errlist(void)\r
-{\r
-       struct stat st;\r
-       int fd = open(_PATH_LIBERR, O_RDONLY);\r
-       if (fd < 0)\r
-               return;\r
-       if (fstat(fd, &st) < 0 || !S_ISREG(st.st_mode))\r
-               goto bad;\r
-       __sys_errlist = sbrk((st.st_size + 3)&~3);\r
-       if (__sys_errlist == (void *) -1)\r
-               goto bad;\r
-       if (read(fd,__sys_errlist, st.st_size) == st.st_size) {\r
-               __sys_nerr = *__sys_errlist;\r
-               __sys_errptr = (uint16_t *)__sys_errlist + 2;\r
-               close(fd);\r
-               return;\r
-       }\r
-bad:\r
-       close(fd);\r
-       __sys_errlist = NULL;\r
-       return;\r
-}\r
-       \r
-char *strerror(int err) \r
-{\r
-\r
-       if (!__sys_errlist)\r
-               _load_errlist();\r
-       if (__sys_errlist && err >= 0 && err < __sys_nerr)\r
-               return __sys_errlist[__sys_errptr[err]];\r
-       strcpy(retbuf, "Unknown error ");\r
+
+static void _load_errlist(void)
+{
+       struct stat st;
+       int fd = open(_PATH_LIBERR, O_RDONLY|O_CLOEXEC);
+       if (fd < 0)
+               return;
+       if (fstat(fd, &st) < 0 || !S_ISREG(st.st_mode))
+               goto bad;
+       __sys_errlist = sbrk((st.st_size + 3)&~3);
+       if (__sys_errlist == (void *) -1)
+               goto bad;
+       if (read(fd,__sys_errlist, st.st_size) == st.st_size) {
+               __sys_nerr = *__sys_errlist;
+               __sys_errptr = (uint16_t *)__sys_errlist + 1;
+               close(fd);
+               return;
+       }
+bad:
+       close(fd);
+       __sys_errlist = NULL;
+       return;
+}
+
+char *strerror(int err)
+{
+       if (!__sys_errlist)
+               _load_errlist();
+       if (__sys_errlist && err >= 0 && err < __sys_nerr)
+               return __sys_errlist + __sys_errptr[err];
+       strcpy(retbuf, "Unknown error ");
        strcpy(retbuf + 14, _itoa(err));
        return retbuf;
 }