diff options
author | Oliver Kiddle <opk@users.sourceforge.net> | 2001-12-21 16:33:39 +0000 |
---|---|---|
committer | Oliver Kiddle <opk@users.sourceforge.net> | 2001-12-21 16:33:39 +0000 |
commit | 1b608e1b9af7a86c7c26c5f8aea27602af3077ea (patch) | |
tree | 1258c01138b360a911cbae72f8065dc2ede2cd15 | |
parent | 1d6f9fc0f03422007adc7fd23328d53691b9513f (diff) | |
download | zsh-1b608e1b9af7a86c7c26c5f8aea27602af3077ea.tar.gz zsh-1b608e1b9af7a86c7c26c5f8aea27602af3077ea.tar.xz zsh-1b608e1b9af7a86c7c26c5f8aea27602af3077ea.zip |
16372: allow signal names to be prefixed by `SIG' with kill builtin and fix
problem with no argument to kill -n and -s options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Completion/Unix/Type/_signals | 3 | ||||
-rw-r--r-- | Src/jobs.c | 24 |
3 files changed, 27 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index 3c7ffede8..f33d1bf55 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-12-21 Oliver Kiddle <opk@zsh.org> + + * 16372: Src/jobs.c, Completion/Unix/Type/_signals: allow signals + to be specified with `SIG' prefix to kill builtin and fix bug with + lack of argument to kill -n/-s. + 2001-12-21 Geoff Wing <gcw@zsh.org> * 16332: zshconfig.ac, Config/defs.mk.in, Src/Makefile.in, diff --git a/Completion/Unix/Type/_signals b/Completion/Unix/Type/_signals index f882ca9ff..32cb8285c 100644 --- a/Completion/Unix/Type/_signals +++ b/Completion/Unix/Type/_signals @@ -21,9 +21,10 @@ fi if [[ -z "$minus" ]] || ! zstyle -T ":completion:${curcontext}:signals" prefix-needed || - [[ "$PREFIX" = -* ]]; then + [[ -prefix -* ]]; then local disp tmp + [[ -prefix ${minus}SIG* ]] && minus+=SIG if zstyle -t ":completion:${curcontext}:signals" prefix-hidden; then tmp=( "${(@)signals[1,last]}" ) disp=(-d tmp) diff --git a/Src/jobs.c b/Src/jobs.c index f3519ae2c..fc3737fa9 100644 --- a/Src/jobs.c +++ b/Src/jobs.c @@ -1504,20 +1504,29 @@ bin_kill(char *nam, char **argv, char *ops, int func) if ((*argv)[1] == 'n' && (*argv)[2] == '\0') { char *endp; - sig = zstrtol(*++argv, &endp, 10); + if (!*++argv) { + zwarnnam(nam, "-n: argument expected", NULL, 0); + return 1; + } + sig = zstrtol(*argv, &endp, 10); if (*endp) { zwarnnam(nam, "invalid signal number", signame, 0); return 1; } } else { - if ((*argv)[1] == 's' && (*argv)[2] == '\0') - signame = *++argv; - else + if (!((*argv)[1] == 's' && (*argv)[2] == '\0')) signame = *argv + 1; + else if (!(*++argv)) { + zwarnnam(nam, "-s: argument expected", NULL, 0); + return 1; + } else + signame = *argv; + makeuppercase(&signame); + if (!strncmp(signame, "SIG", 3)) signame+=3; /* check for signal matching specified name */ for (sig = 1; sig <= SIGCOUNT; sig++) - if (!cstrpcmp(sigs + sig, &signame)) + if (!strcmp(*(sigs + sig), signame)) break; if (*signame == '0' && !signame[1]) sig = 0; @@ -1531,6 +1540,11 @@ bin_kill(char *nam, char **argv, char *ops, int func) argv++; } + if (!*argv) { + zwarnnam(nam, "not enough arguments", NULL, 0); + return 1; + } + queue_signals(); setcurjob(); |