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

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

Diff for /src/bin/kill/kill.c between version 1.3 and 1.4

version 1.3, 1993/03/23 00:25:54 version 1.4, 1993/07/22 16:42:18
Line 50  static char rcsid[] = "$Header$";
Line 50  static char rcsid[] = "$Header$";
 #include <ctype.h>  #include <ctype.h>
   
 static char *signals[] = {  static char *signals[] = {
         "hup", "int", "quit", "ill", "trap", "iot",             /*  1 - 6  */          "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT",            /*  1 - 6  */
         "emt", "fpe", "kill", "bus", "segv", "sys",             /*  7 - 12 */          "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS",             /*  7 - 12 */
         "pipe", "alrm",  "term", "urg", "stop", "tstp",         /* 13 - 18 */          "PIPE", "ALRM", "TERM", "URG", "STOP", "TSTP",          /* 13 - 18 */
         "cont", "chld", "ttin", "ttou", "io", "xcpu",           /* 19 - 24 */          "CONT", "CHLD", "TTIN", "TTOU", "IO", "XCPU",           /* 19 - 24 */
         "xfsz", "vtalrm", "prof", "winch", "info", "usr1",      /* 25 - 30 */          "XFSZ", "VTALRM", "PROF", "WINCH", "INFO", "USR1",      /* 25 - 30 */
         "usr2", NULL,                                           /* 31 - 32 */          "USR2", NULL,                                           /* 31 - 32 */
 };  };
   
 main(argc, argv)  main(argc, argv)
Line 69  main(argc, argv)
Line 69  main(argc, argv)
         if (argc < 2)          if (argc < 2)
                 usage();                  usage();
   
         if (!strcmp(*++argv, "-l")) {  
                 printsig(stdout);  
                 exit(0);  
         }  
   
         numsig = SIGTERM;          numsig = SIGTERM;
         if (**argv == '-') {          argc--, argv++;
           if (strcmp(*argv, "-l") == 0) {
                   if (argc > 2) {
                           usage ();
                           /* NOTREACHED */
                   }
                   if (argc == 2) {
                           argv++;
                           if (isdigit(**argv)) {
                                   numsig = strtol(*argv, &ep, 10);
                                   if (*argv && !*ep) {
                                           if (numsig > 0 && numsig < NSIG) {
                                                   printsig (numsig);
                                                   exit (0);
                                           }
   
                                           numsig -= 128;
                                           if (numsig > 0 && numsig < NSIG) {
                                                   printsig (numsig);
                                                   exit (0);
                                           }
                                   }
                                   (void)fprintf(stderr,
                                       "kill: illegal signal number %s\n", *argv);
                                   exit(1);
                           }
                           usage ();
                           /* NOTREACHED */
                   }
                   printsignals(stdout);
                   exit(0);
           } else if (strcmp(*argv, "-s") == 0) {
                   if (argc < 2) {
                           (void)fprintf(stderr,
                                   "kill: option requires an argument -- s\n");
                           usage();
                   }
                   argc--,argv++;
                   if (strcmp (*argv, "0") == 0) {
                           numsig = 0;
                   } else {
                           if ((numsig = signame_to_signum (*argv)) < 0) {
                                   nosig(*argv);
                                   /* NOTREACHED */
                           }
                   }
                   argc--,argv++;
           } else if (**argv == '-') {
                 ++*argv;                  ++*argv;
                 if (isalpha(**argv)) {                  if (isalpha(**argv)) {
                         if (!strncasecmp(*argv, "sig", 3))                          if ((numsig = signame_to_signum (*argv)) < 0) {
                                 *argv += 3;                                  nosig(*argv);
                         for (p = signals;; ++p) {                                  /* NOTREACHED */
                                 if (!*p)  
                                         nosig(*argv);  
                                 if (!strcasecmp(*p, *argv)) {  
                                         numsig = p - signals + 1;  
                                         break;  
                                 }  
                         }                          }
                 } else if (isdigit(**argv)) {                  } else if (isdigit(**argv)) {
                         numsig = strtol(*argv, &ep, 10);                          numsig = strtol(*argv, &ep, 10);
Line 95  main(argc, argv)
Line 131  main(argc, argv)
                                     "kill: illegal signal number %s\n", *argv);                                      "kill: illegal signal number %s\n", *argv);
                                 exit(1);                                  exit(1);
                         }                          }
                         if (numsig <= 0 || numsig > NSIG)                          if (numsig <= 0 || numsig >= NSIG) {
                                 nosig(*argv);                                  nosig(*argv);
                                   /* NOTREACHED */
                           }
                 } else                  } else
                         nosig(*argv);                          nosig(*argv);
                 ++argv;                  argc--,argv++;
         }          }
   
         if (!*argv)          if (!*argv)
Line 121  main(argc, argv)
Line 159  main(argc, argv)
         exit(errors);          exit(errors);
 }  }
   
   int
   signame_to_signum (sig)
           char *sig;
   {
           char **p;
   
           if (!strncasecmp(sig, "sig", 3))
                   sig += 3;
           for (p = signals; *p; ++p) {
                   if (!strcasecmp(*p, sig)) {
                           return p - signals + 1;
                   }
           }
           return -1;
   }
   
 nosig(name)  nosig(name)
         char *name;          char *name;
 {  {
         (void)fprintf(stderr,          (void)fprintf(stderr,
             "kill: unknown signal %s; valid signals:\n", name);              "kill: unknown signal %s; valid signals:\n", name);
         printsig(stderr);          printsignals(stderr);
         exit(1);          exit(1);
 }  }
   
 printsig(fp)  printsig(sig)
           int sig;
   {
           printf ("%s\n", signals[sig - 1]);
   }
   
   printsignals(fp)
         FILE *fp;          FILE *fp;
 {  {
         register char **p;          register char **p = signals;;
   
         for (p = signals; *p; ++p) {          /* From POSIX 1003.2, Draft 11.2:
                 (void)fprintf(fp, "%s ", *p);                  When the -l option is specified, the symbolic name of each
                 if ((p - signals) == NSIG / 2 - 1)             signal shall be written in the following format:
                         (void)fprintf(fp, "\n");                  "%s%c", <signal_name>, <separator>
              where the <signal_name> is in uppercase, without the SIG prefix,
              and the <separator> shall either be a <newline> or a <space>.
              For the last signal written, <separator> shall be a <newline> */
   
           /* This looses if the signals array is empty; But, since it
              will "never happen", there is no need to add wrap this
              in a conditional that will always succeed. */
           (void)fprintf(fp, "%s", *p);
   
           for (++p ; *p; ++p) {
                   (void)fprintf(fp, " %s", *p);
         }          }
         (void)fprintf(fp, "\n");          (void)fprintf(fp, "\n");
 }  }
   
 usage()  usage()
 {  {
         (void)fprintf(stderr, "usage: kill [-l] [-sig] pid ...\n");          (void)fprintf(stderr, "usage: kill [-s signal_name] pid ...\n");
           (void)fprintf(stderr, "       kill -l [exit_status]\n");
           (void)fprintf(stderr, "obsolete usage:\n");
           (void)fprintf(stderr, "       kill -signal_name pid ...\n");
           (void)fprintf(stderr, "       kill -signal_number pid ...\n");
         exit(1);          exit(1);
 }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

CVSweb <webmaster@jp.NetBSD.org>