summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Completion/Unix/Type/_signals3
-rw-r--r--Src/jobs.c24
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();