Convert the remaining callers of errmsg() to use strerror(), and remove
authorPeter Avalos <pavalos@dragonflybsd.org>
Sat, 6 Jan 2007 03:44:04 +0000 (03:44 +0000)
committerPeter Avalos <pavalos@dragonflybsd.org>
Sat, 6 Jan 2007 03:44:04 +0000 (03:44 +0000)
errmsg() and its table of error messages.

Remove some white space at EOL.

Restore "not found" error message when searching for (or executing)
a program fails because the file or a path component does not exist.

Remove dead code which supported systems without O_APPEND, O_CREAT or SIGTSTP.

Obtained-from:  FreeBSD

bin/sh/error.c
bin/sh/error.h
bin/sh/exec.c
bin/sh/redir.c

index 1a5c3c3..f1d7f28 100644 (file)
@@ -34,8 +34,8 @@
  * SUCH DAMAGE.
  *
  * @(#)error.c 8.2 (Berkeley) 5/4/95
- * $FreeBSD: src/bin/sh/error.c,v 1.15.2.4 2002/08/27 01:36:28 tjr Exp $
- * $DragonFly: src/bin/sh/error.c,v 1.3 2004/03/19 18:39:41 cpressey Exp $
+ * $FreeBSD: src/bin/sh/error.c,v 1.26 2006/02/04 14:37:50 schweikh Exp $
+ * $DragonFly: src/bin/sh/error.c,v 1.4 2007/01/06 03:44:04 pavalos Exp $
  */
 
 /*
@@ -118,7 +118,7 @@ onint(void)
         * This doesn't seem to be needed, since main() emits a newline.
         */
 #if 0
-       if (tcgetpgrp(0) == getpid())   
+       if (tcgetpgrp(0) == getpid())
                write(STDERR_FILENO, "\n", 1);
 #endif
        if (rootshell && iflag)
@@ -176,91 +176,3 @@ exerror(int cond, const char *msg, ...)
        exverror(cond, msg, ap);
        va_end(ap);
 }
-
-
-
-/*
- * Table of error messages.
- */
-
-struct errname {
-       short errcode;          /* error number */
-       short action;           /* operation which encountered the error */
-       const char *msg;        /* text describing the error */
-};
-
-
-#define ALL (E_OPEN|E_CREAT|E_EXEC)
-
-STATIC const struct errname errormsg[] = {
-       { EINTR,        ALL,    "interrupted" },
-       { EACCES,       ALL,    "permission denied" },
-       { EIO,          ALL,    "I/O error" },
-       { ENOENT,       E_OPEN, "no such file" },
-       { ENOENT,       E_CREAT,"directory nonexistent" },
-       { ENOENT,       E_EXEC, "not found" },
-       { ENOTDIR,      E_OPEN, "no such file" },
-       { ENOTDIR,      E_CREAT,"directory nonexistent" },
-       { ENOTDIR,      E_EXEC, "not found" },
-       { EISDIR,       ALL,    "is a directory" },
-#ifdef notdef
-       { EMFILE,       ALL,    "too many open files" },
-#endif
-       { ENFILE,       ALL,    "file table overflow" },
-       { ENOSPC,       ALL,    "file system full" },
-#ifdef EDQUOT
-       { EDQUOT,       ALL,    "disk quota exceeded" },
-#endif
-#ifdef ENOSR
-       { ENOSR,        ALL,    "no streams resources" },
-#endif
-       { ENXIO,        ALL,    "no such device or address" },
-       { EROFS,        ALL,    "read-only file system" },
-       { ETXTBSY,      ALL,    "text busy" },
-       { ENOMEM,       ALL,    "not enough memory" },
-#ifdef ENOLINK
-       { ENOLINK,      ALL,    "remote access failed" },
-#endif
-#ifdef EMULTIHOP
-       { EMULTIHOP,    ALL,    "remote access failed" },
-#endif
-#ifdef ECOMM
-       { ECOMM,        ALL,    "remote access failed" },
-#endif
-#ifdef ESTALE
-       { ESTALE,       ALL,    "remote access failed" },
-#endif
-#ifdef ETIMEDOUT
-       { ETIMEDOUT,    ALL,    "remote access failed" },
-#endif
-#ifdef ELOOP
-       { ELOOP,        ALL,    "symbolic link loop" },
-#endif
-       { E2BIG,        E_EXEC, "argument list too long" },
-#ifdef ELIBACC
-       { ELIBACC,      E_EXEC, "shared library missing" },
-#endif
-       { EEXIST,       E_CREAT, "file exists" },
-       { 0,            0,      NULL },
-};
-
-
-/*
- * Return a string describing an error.  The returned string may be a
- * pointer to a static buffer that will be overwritten on the next call.
- * Action describes the operation that got the error.
- */
-
-const char *
-errmsg(int e, int action)
-{
-       struct errname const *ep;
-       static char buf[12];
-
-       for (ep = errormsg ; ep->errcode ; ep++) {
-               if (ep->errcode == e && (ep->action & action) != 0)
-                       return ep->msg;
-       }
-       fmtstr(buf, sizeof buf, "error %d", e);
-       return buf;
-}
index 4fb4d64..44a66fb 100644 (file)
  * SUCH DAMAGE.
  *
  *     @(#)error.h     8.2 (Berkeley) 5/4/95
- * $FreeBSD: src/bin/sh/error.h,v 1.11.2.4 2002/08/27 01:36:28 tjr Exp $
- * $DragonFly: src/bin/sh/error.h,v 1.3 2004/03/19 18:39:41 cpressey Exp $
+ * $FreeBSD: src/bin/sh/error.h,v 1.17 2004/04/06 20:06:51 markm Exp $
+ * $DragonFly: src/bin/sh/error.h,v 1.4 2007/01/06 03:44:04 pavalos Exp $
  */
 
-/*
- * Types of operations (passed to the errmsg routine).
- */
-
-#define E_OPEN 01      /* opening a file */
-#define E_CREAT 02     /* creating a file */
-#define E_EXEC 04      /* executing a program */
-
-
 /*
  * We enclose jmp_buf in a structure so that we can declare pointers to
  * jump locations.  The global variable handler contains the location to
@@ -94,7 +85,6 @@ void exraise(int);
 void onint(void);
 void error(const char *, ...) __printf0like(1, 2);
 void exerror(int, const char *, ...) __printf0like(2, 3);
-const char *errmsg(int, int);
 
 
 /*
index b995f61..bc43ec7 100644 (file)
@@ -35,7 +35,7 @@
  *
  * @(#)exec.c  8.4 (Berkeley) 6/8/95
  * $FreeBSD: src/bin/sh/exec.c,v 1.14.2.4 2002/08/27 01:36:28 tjr Exp $
- * $DragonFly: src/bin/sh/exec.c,v 1.8 2006/09/28 22:29:44 pavalos Exp $
+ * $DragonFly: src/bin/sh/exec.c,v 1.9 2007/01/06 03:44:04 pavalos Exp $
  */
 
 #include <sys/types.h>
@@ -140,7 +140,9 @@ shellexec(char **argv, char **envp, const char *path, int idx)
                exerrno = 2;
                break;
        }
-       exerror(EXEXEC, "%s: %s", argv[0], errmsg(e, E_EXEC));
+       if (e == ENOENT || e == ENOTDIR)
+               exerror(EXEXEC, "%s: not found", argv[0]);
+       exerror(EXEXEC, "%s: %s", argv[0], strerror(e));
 }
 
 
@@ -416,8 +418,12 @@ loop:
        /* We failed.  If there was an entry for this command, delete it */
        if (cmdp)
                delete_cmd_entry();
-       if (printerr)
-               outfmt(out2, "%s: %s\n", name, errmsg(e, E_EXEC));
+       if (printerr) {
+               if (e == ENOENT || e == ENOTDIR)
+                       outfmt(out2, "%s: not found\n", name);
+               else
+                       outfmt(out2, "%s: %s\n", name, strerror(e));
+       }
        entry->cmdtype = CMDUNKNOWN;
        return;
 
index 70c29d2..5ad81d0 100644 (file)
@@ -35,7 +35,7 @@
  *
  * @(#)redir.c 8.2 (Berkeley) 5/4/95
  * $FreeBSD: src/bin/sh/redir.c,v 1.12.2.4 2002/08/27 01:36:28 tjr Exp $
- * $DragonFly: src/bin/sh/redir.c,v 1.3 2003/08/24 16:26:00 drhodus Exp $
+ * $DragonFly: src/bin/sh/redir.c,v 1.4 2007/01/06 03:44:04 pavalos Exp $
  */
 
 #include <sys/types.h>
@@ -175,7 +175,7 @@ openredirect(union node *redir, char memory[10])
        case NFROM:
                fname = redir->nfile.expfname;
                if ((f = open(fname, O_RDONLY)) < 0)
-                       error("cannot open %s: %s", fname, errmsg(errno, E_OPEN));
+                       error("cannot open %s: %s", fname, strerror(errno));
 movefd:
                if (f != fd) {
                        close(fd);
@@ -185,54 +185,26 @@ movefd:
                break;
        case NFROMTO:
                fname = redir->nfile.expfname;
-#ifdef O_CREAT
                if ((f = open(fname, O_RDWR|O_CREAT, 0666)) < 0)
-                       error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
-#else
-               if ((f = open(fname, O_RDWR, 0666)) < 0) {
-                       if (errno != ENOENT)
-                               error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
-                       else if ((f = creat(fname, 0666)) < 0)
-                               error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
-                       else {
-                               close(f);
-                               if ((f = open(fname, O_RDWR)) < 0) {
-                                       error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
-                                       remove(fname);
-                               }
-                       }
-               }
-#endif
+                       error("cannot create %s: %s", fname, strerror(errno));
                goto movefd;
        case NTO:
                fname = redir->nfile.expfname;
                if (Cflag && stat(fname, &sb) != -1 && S_ISREG(sb.st_mode))
                        error("cannot create %s: %s", fname,
-                           errmsg(EEXIST, E_CREAT));
-#ifdef O_CREAT
+                           strerror(EEXIST));
                if ((f = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0)
-                       error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
-#else
-               if ((f = creat(fname, 0666)) < 0)
-                       error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
-#endif
+                       error("cannot create %s: %s", fname, strerror(errno));
                goto movefd;
        case NCLOBBER:
                fname = redir->nfile.expfname;
                if ((f = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0)
-                       error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
+                       error("cannot create %s: %s", fname, strerror(errno));
                goto movefd;
        case NAPPEND:
                fname = redir->nfile.expfname;
-#ifdef O_APPEND
                if ((f = open(fname, O_WRONLY|O_CREAT|O_APPEND, 0666)) < 0)
-                       error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
-#else
-               if ((f = open(fname, O_WRONLY)) < 0
-                && (f = creat(fname, 0666)) < 0)
-                       error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
-               lseek(f, (off_t)0, 2);
-#endif
+                       error("cannot create %s: %s", fname, strerror(errno));
                goto movefd;
        case NTOFD:
        case NFROMFD:
@@ -283,9 +255,7 @@ openhere(union node *redir)
                signal(SIGINT, SIG_IGN);
                signal(SIGQUIT, SIG_IGN);
                signal(SIGHUP, SIG_IGN);
-#ifdef SIGTSTP
                signal(SIGTSTP, SIG_IGN);
-#endif
                signal(SIGPIPE, SIG_DFL);
                if (redir->type == NHERE)
                        xwrite(pip[1], redir->nhere.doc->narg.text, len);