summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2022-06-26 16:49:52 -0400
committerPaul Smith <psmith@gnu.org>2022-07-09 10:46:47 -0400
commit9992cb0b8334f48fbac3d7267198453d822a4bf8 (patch)
tree275c7c3d4aacfa0ef8747e7ecb92bfe558e19491
parent0cbee1b475710a247c20d772699f10cf9d2badc9 (diff)
downloadmake-git-9992cb0b8334f48fbac3d7267198453d822a4bf8.tar.gz
bootstrap: Remove strerror()
* bootstrap.conf: Remove strerror module * configure.ac: Add a check for strerror * src/misc.c: Add a default strerror() if not found
-rw-r--r--bootstrap.conf1
-rw-r--r--configure.ac2
-rw-r--r--src/misc.c119
3 files changed, 120 insertions, 2 deletions
diff --git a/bootstrap.conf b/bootstrap.conf
index 2543748b..066c9e1b 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -57,5 +57,4 @@ fdl
findprog-in
getloadavg
host-cpu-c-abi
-strerror
make-glob"
diff --git a/configure.ac b/configure.ac
index bb2eb331..e0b7d060 100644
--- a/configure.ac
+++ b/configure.ac
@@ -136,7 +136,7 @@ AS_IF([test "$ac_cv_func_gettimeofday" = yes],
AC_CHECK_FUNCS([strtoll strdup strndup memrchr mempcpy umask mkstemp mktemp \
fdopen dup dup2 getcwd realpath sigsetmask sigaction \
getgroups seteuid setegid setlinebuf setreuid setregid \
- getrlimit setrlimit setvbuf pipe strsignal \
+ getrlimit setrlimit setvbuf pipe strerror strsignal \
lstat readlink atexit isatty ttyname pselect posix_spawn \
posix_spawnattr_setsigmask])
diff --git a/src/misc.c b/src/misc.c
index ae9fae68..25700dc5 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -891,3 +891,122 @@ mempcpy (void *dest, const void *src, size_t n)
# define QUAD 1
# include <strtol.c>
#endif
+
+#if !HAVE_STRERROR
+char *
+strerror (int errnum)
+{
+ static char msg[256];
+
+#define SETMSG(_e, _m) case _e: strcpy(msg, _m); break
+
+ switch (errnum)
+ {
+#ifdef EPERM
+ SETMSG (EPERM , "Operation not permitted");
+#endif
+#ifdef ENOENT
+ SETMSG (ENOENT , "No such file or directory");
+#endif
+#ifdef ESRCH
+ SETMSG (ESRCH , "No such process");
+#endif
+#ifdef EINTR
+ SETMSG (EINTR , "Interrupted system call");
+#endif
+#ifdef EIO
+ SETMSG (EIO , "I/O error");
+#endif
+#ifdef ENXIO
+ SETMSG (ENXIO , "No such device or address");
+#endif
+#ifdef E2BIG
+ SETMSG (E2BIG , "Argument list too long");
+#endif
+#ifdef ENOEXEC
+ SETMSG (ENOEXEC, "Exec format error");
+#endif
+#ifdef EBADF
+ SETMSG (EBADF , "Bad file number");
+#endif
+#ifdef ECHILD
+ SETMSG (ECHILD , "No child processes");
+#endif
+#ifdef EAGAIN
+ SETMSG (EAGAIN , "Try again");
+#endif
+#ifdef ENOMEM
+ SETMSG (ENOMEM , "Out of memory");
+#endif
+#ifdef EACCES
+ SETMSG (EACCES , "Permission denied");
+#endif
+#ifdef EFAULT
+ SETMSG (EFAULT , "Bad address");
+#endif
+#ifdef ENOTBLK
+ SETMSG (ENOTBLK, "Block device required");
+#endif
+#ifdef EBUSY
+ SETMSG (EBUSY , "Device or resource busy");
+#endif
+#ifdef EEXIST
+ SETMSG (EEXIST , "File exists");
+#endif
+#ifdef EXDEV
+ SETMSG (EXDEV , "Cross-device link");
+#endif
+#ifdef ENODEV
+ SETMSG (ENODEV , "No such device");
+#endif
+#ifdef ENOTDIR
+ SETMSG (ENOTDIR, "Not a directory");
+#endif
+#ifdef EISDIR
+ SETMSG (EISDIR , "Is a directory");
+#endif
+#ifdef EINVAL
+ SETMSG (EINVAL , "Invalid argument");
+#endif
+#ifdef ENFILE
+ SETMSG (ENFILE , "File table overflow");
+#endif
+#ifdef EMFILE
+ SETMSG (EMFILE , "Too many open files");
+#endif
+#ifdef ENOTTY
+ SETMSG (ENOTTY , "Not a typewriter");
+#endif
+#ifdef ETXTBSY
+ SETMSG (ETXTBSY, "Text file busy");
+#endif
+#ifdef EFBIG
+ SETMSG (EFBIG , "File too large");
+#endif
+#ifdef ENOSPC
+ SETMSG (ENOSPC , "No space left on device");
+#endif
+#ifdef ESPIPE
+ SETMSG (ESPIPE , "Illegal seek");
+#endif
+#ifdef EROFS
+ SETMSG (EROFS , "Read-only file system");
+#endif
+#ifdef EMLINK
+ SETMSG (EMLINK , "Too many links");
+#endif
+#ifdef EPIPE
+ SETMSG (EPIPE , "Broken pipe");
+#endif
+#ifdef EDOM
+ SETMSG (EDOM , "Math argument out of domain of func");
+#endif
+#ifdef ERANGE
+ SETMSG (ERANGE , "Math result not representable");
+#endif
+ default: sprintf (msg, "Unknown error %d", errnum); break;
+ }
+
+ return msg;
+}
+#endif