diff options
| author | Karel Zak <kzak@redhat.com> | 2006-12-07 00:25:41 +0100 |
|---|---|---|
| committer | Karel Zak <kzak@redhat.com> | 2006-12-07 00:25:41 +0100 |
| commit | eb63b9b8f4cecb34c2478282567862bc48ef256d (patch) | |
| tree | 99243f8eecb44c2bb6a559982b99c680fcb649e7 /misc-utils/kill.c | |
| parent | 7eda085c41faa3445b4b168ce78ab18dab87d98a (diff) | |
| download | util-linux-eb63b9b8f4cecb34c2478282567862bc48ef256d.tar.gz | |
Imported from util-linux-2.10f tarball.v2.10f
Diffstat (limited to 'misc-utils/kill.c')
| -rw-r--r-- | misc-utils/kill.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/misc-utils/kill.c b/misc-utils/kill.c index 768f5deab8..5372f52168 100644 --- a/misc-utils/kill.c +++ b/misc-utils/kill.c @@ -38,6 +38,8 @@ * 1999-02-22 Arkadiusz Mi�kiewicz <misiek@misiek.eu.org> * - added Native Language Support * + * 1999-11-13 aeb Accept signal numers 128+s. + * */ #include <stdio.h> @@ -137,7 +139,7 @@ struct signv { int main (int argc, char *argv[]); extern char *mybasename(char *); int signame_to_signum (char *sig); -int arg_to_signum (char *arg); +int arg_to_signum (char *arg, int mask); void nosig (char *name); void printsig (int sig); void printsignals (FILE *fp); @@ -146,16 +148,19 @@ int kill_verbose (char *procname, int pid, int sig); extern int *get_pids (char *, int); -char version_string[] = "kill v2.0\n"; char *whoami; int main (int argc, char *argv[]) { int errors, numsig, pid; - char *ep, *arg; + char *ep, *arg, *progname, *p; int do_pid, do_kill, check_all; int *pids, *ip; + progname = argv[0]; + if ((p = strrchr(progname, '/')) != NULL) + progname = p+1; + setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); @@ -174,11 +179,16 @@ int main (int argc, char *argv[]) if (*arg != '-') { break; } + if (! strcmp (arg, "--")) { + argc--, argv++; + break; + } if (! strcmp (arg, "-u")) { return usage (0); } - if (! strcmp (arg, "-v")) { - fputs (version_string, stdout); + if (! strcmp (arg, "-v") || ! strcmp (arg, "-V") || + ! strcmp (arg, "--version")) { + printf(_("%s from %s\n"), progname, util_linux_version); return 0; } if (! strcmp (arg, "-a")) { @@ -193,9 +203,9 @@ int main (int argc, char *argv[]) if (argc > 2) { return usage (1); } - /* argc == 2 */ + /* argc == 2, accept "kill -l $?" */ arg = argv[1]; - if ((numsig = arg_to_signum (arg)) < 0) { + if ((numsig = arg_to_signum (arg, 1)) < 0) { fprintf (stderr, _("%s: unknown signal %s\n"), whoami, arg); return 1; } @@ -217,7 +227,7 @@ int main (int argc, char *argv[]) return usage (1); argc--, argv++; arg = *argv; - if ((numsig = arg_to_signum (arg)) < 0) { + if ((numsig = arg_to_signum (arg, 0)) < 0) { nosig (arg); return 1; } @@ -231,7 +241,7 @@ int main (int argc, char *argv[]) if (do_kill) break; arg++; - if ((numsig = arg_to_signum (arg)) < 0) { + if ((numsig = arg_to_signum (arg, 0)) < 0) { return usage (1); } do_kill++; @@ -284,13 +294,15 @@ int signame_to_signum (char *sig) return (-1); } -int arg_to_signum (char *arg) +int arg_to_signum (char *arg, int maskbit) { int numsig; char *ep; if (isdigit (*arg)) { numsig = strtol (arg, &ep, 10); + if (numsig >= NSIG && maskbit && (numsig & 128) != 0) + numsig -= 128; if (*ep != 0 || numsig < 0 || numsig >= NSIG) return (-1); return (numsig); |
