[BACK]Return to exec.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / bin / sh

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/bin/sh/exec.c between version 1.17 and 1.17.6.2

version 1.17, 1995/06/09 01:53:50 version 1.17.6.2, 1997/03/04 15:18:10
Line 79  static char rcsid[] = "$NetBSD$";
Line 79  static char rcsid[] = "$NetBSD$";
 #include "mystring.h"  #include "mystring.h"
 #include "show.h"  #include "show.h"
 #include "jobs.h"  #include "jobs.h"
   #include "alias.h"
   
   
 #define CMDTABLESIZE 31         /* should be prime */  #define CMDTABLESIZE 31         /* should be prime */
Line 97  struct tblentry {
Line 98  struct tblentry {
   
 STATIC struct tblentry *cmdtable[CMDTABLESIZE];  STATIC struct tblentry *cmdtable[CMDTABLESIZE];
 STATIC int builtinloc = -1;             /* index in path of %builtin, or -1 */  STATIC int builtinloc = -1;             /* index in path of %builtin, or -1 */
   int exerrno = 0;                        /* Last exec error */
   
   
 STATIC void tryexec __P((char *, char **, char **));  STATIC void tryexec __P((char *, char **, char **));
Line 136  shellexec(argv, envp, path, index)
Line 138  shellexec(argv, envp, path, index)
                         stunalloc(cmdname);                          stunalloc(cmdname);
                 }                  }
         }          }
         error2(argv[0], errmsg(e, E_EXEC));  
           /* Map to POSIX errors */
           switch (e) {
           case EACCES:
                   exerrno = 126;
                   break;
           case ENOENT:
                   exerrno = 127;
                   break;
           default:
                   exerrno = 2;
                   break;
           }
           exerror(EXEXEC, "%s: %s", argv[0], errmsg(e, E_EXEC));
 }  }
   
   
Line 275  padvance(path, name)
Line 290  padvance(path, name)
         char **path;          char **path;
         char *name;          char *name;
         {          {
         register char *p, *q;          char *p, *q;
         char *start;          char *start;
         int len;          int len;
   
Line 313  padvance(path, name)
Line 328  padvance(path, name)
 int  int
 hashcmd(argc, argv)  hashcmd(argc, argv)
         int argc;          int argc;
         char **argv;          char **argv;
 {  {
         struct tblentry **pp;          struct tblentry **pp;
         struct tblentry *cmdp;          struct tblentry *cmdp;
Line 542  int
Line 557  int
 find_builtin(name)  find_builtin(name)
         char *name;          char *name;
 {  {
         register const struct builtincmd *bp;          const struct builtincmd *bp;
   
         for (bp = builtincmd ; bp->name ; bp++) {          for (bp = builtincmd ; bp->name ; bp++) {
                 if (*bp->name == *name && equal(bp->name, name))                  if (*bp->name == *name && equal(bp->name, name))
Line 582  hashcd() {
Line 597  hashcd() {
   
 void  void
 changepath(newval)  changepath(newval)
         char *newval;          const char *newval;
 {  {
         char *old, *new;          const char *old, *new;
         int index;          int index;
         int firstchange;          int firstchange;
         int bltin;          int bltin;
Line 705  cmdlookup(name, add)
Line 720  cmdlookup(name, add)
         int add;          int add;
 {  {
         int hashval;          int hashval;
         register char *p;          char *p;
         struct tblentry *cmdp;          struct tblentry *cmdp;
         struct tblentry **pp;          struct tblentry **pp;
   
Line 755  delete_cmd_entry() {
Line 770  delete_cmd_entry() {
 void  void
 getcmdentry(name, entry)  getcmdentry(name, entry)
         char *name;          char *name;
         struct cmdentry *entry;          struct cmdentry *entry;
         {          {
         struct tblentry *cmdp = cmdlookup(name, 0);          struct tblentry *cmdp = cmdlookup(name, 0);
   
Line 829  unsetfunc(name)
Line 844  unsetfunc(name)
         }          }
         return (1);          return (1);
 }  }
   
   /*
    * Locate and print what a word is...
    */
   
   int
   typecmd(argc, argv)
           int argc;
           char **argv;
   {
           struct cmdentry entry;
           struct tblentry *cmdp;
           char **pp;
           struct alias *ap;
           int i;
           int error = 0;
           extern char *const parsekwd[];
   
           for (i = 1; i < argc; i++) {
                   out1str(argv[i]);
                   /* First look at the keywords */
                   for (pp = (char **)parsekwd; *pp; pp++)
                           if (**pp == *argv[i] && equal(*pp, argv[i]))
                                   break;
   
                   if (*pp) {
                           out1str(" is a shell keyword\n");
                           continue;
                   }
   
                   /* Then look at the aliases */
                   if ((ap = lookupalias(argv[i], 1)) != NULL) {
                           out1fmt(" is an alias for %s\n", ap->val);
                           continue;
                   }
   
                   /* Then check if it is a tracked alias */
                   if ((cmdp = cmdlookup(argv[i], 0)) != NULL) {
                           entry.cmdtype = cmdp->cmdtype;
                           entry.u = cmdp->param;
                   }
                   else {
                           /* Finally use brute force */
                           find_command(argv[i], &entry, 0, pathval());
                   }
   
                   switch (entry.cmdtype) {
                   case CMDNORMAL: {
                           int j = entry.u.index;
                           char *path = pathval(), *name;
                           do {
                                   name = padvance(&path, argv[i]);
                                   stunalloc(name);
                           } while (--j >= 0);
                           out1fmt(" is%s %s\n",
                               cmdp ? " a tracked alias for" : "", name);
                           break;
                   }
                   case CMDFUNCTION:
                           out1str(" is a shell function\n");
                           break;
   
                   case CMDBUILTIN:
                           out1str(" is a shell builtin\n");
                           break;
   
                   default:
                           out1str(" not found\n");
                           error |= 127;
                           break;
                   }
           }
           return error;
   }

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.17.6.2

CVSweb <webmaster@jp.NetBSD.org>