aboutsummaryrefslogtreecommitdiffstats
path: root/misc-utils/kill.c
diff options
context:
space:
mode:
authorKarel Zak <kzak@redhat.com>2006-12-07 00:25:41 +0100
committerKarel Zak <kzak@redhat.com>2006-12-07 00:25:41 +0100
commiteb63b9b8f4cecb34c2478282567862bc48ef256d (patch)
tree99243f8eecb44c2bb6a559982b99c680fcb649e7 /misc-utils/kill.c
parent7eda085c41faa3445b4b168ce78ab18dab87d98a (diff)
downloadutil-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.c32
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);