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
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=217461
@ -153,8 +153,18 @@ trapcmd(int argc, char **argv)
|
|||||||
char *action;
|
char *action;
|
||||||
int signo;
|
int signo;
|
||||||
int errors = 0;
|
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++) {
|
for (signo = 0 ; signo < sys_nsig ; signo++) {
|
||||||
if (signo < NSIG && trap[signo] != NULL) {
|
if (signo < NSIG && trap[signo] != NULL) {
|
||||||
out1str("trap -- ");
|
out1str("trap -- ");
|
||||||
@ -171,19 +181,12 @@ trapcmd(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
action = NULL;
|
action = NULL;
|
||||||
if (*++argv && strcmp(*argv, "--") == 0)
|
|
||||||
argv++;
|
|
||||||
if (*argv && sigstring_to_signum(*argv) == -1) {
|
if (*argv && sigstring_to_signum(*argv) == -1) {
|
||||||
if ((*argv)[0] != '-') {
|
if (strcmp(*argv, "-") == 0)
|
||||||
|
argv++;
|
||||||
|
else {
|
||||||
action = *argv;
|
action = *argv;
|
||||||
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) {
|
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