sh: Fix some things about -- in trap:
* Make 'trap --' do the same as 'trap' instead of nothing. * Make '--' stop option processing (note that '-' action is not an option). Side effect: The error message for an unknown option is different.
This commit is contained in:
parent
951f1334b6
commit
a043cc4c68
@ -153,8 +153,18 @@ trapcmd(int argc, char **argv)
|
||||
char *action;
|
||||
int signo;
|
||||
int errors = 0;
|
||||
int i;
|
||||
|
||||
if (argc <= 1) {
|
||||
while ((i = nextopt("l")) != '\0') {
|
||||
switch (i) {
|
||||
case 'l':
|
||||
printsignals();
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
argv = argptr;
|
||||
|
||||
if (*argv == NULL) {
|
||||
for (signo = 0 ; signo < sys_nsig ; signo++) {
|
||||
if (signo < NSIG && trap[signo] != NULL) {
|
||||
out1str("trap -- ");
|
||||
@ -171,19 +181,12 @@ trapcmd(int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
action = NULL;
|
||||
if (*++argv && strcmp(*argv, "--") == 0)
|
||||
argv++;
|
||||
if (*argv && sigstring_to_signum(*argv) == -1) {
|
||||
if ((*argv)[0] != '-') {
|
||||
if (strcmp(*argv, "-") == 0)
|
||||
argv++;
|
||||
else {
|
||||
action = *argv;
|
||||
argv++;
|
||||
} else if ((*argv)[1] == '\0') {
|
||||
argv++;
|
||||
} else if ((*argv)[1] == 'l' && (*argv)[2] == '\0') {
|
||||
printsignals();
|
||||
return 0;
|
||||
} else {
|
||||
error("bad option %s", *argv);
|
||||
}
|
||||
}
|
||||
while (*argv) {
|
||||
|
19
tools/regression/bin/sh/builtins/trap5.0
Normal file
19
tools/regression/bin/sh/builtins/trap5.0
Normal file
@ -0,0 +1,19 @@
|
||||
# $FreeBSD$
|
||||
|
||||
set -e
|
||||
trap - USR1
|
||||
initial=$(trap)
|
||||
trap -- -l USR1
|
||||
added=$(trap)
|
||||
[ -n "$added" ]
|
||||
trap - USR1
|
||||
second=$(trap)
|
||||
[ "$initial" = "$second" ]
|
||||
eval "$added"
|
||||
added2=$(trap)
|
||||
added3=$(trap --)
|
||||
[ "$added" = "$added2" ]
|
||||
[ "$added2" = "$added3" ]
|
||||
trap -- - USR1
|
||||
third=$(trap)
|
||||
[ "$initial" = "$third" ]
|
Loading…
Reference in New Issue
Block a user