summaryrefslogtreecommitdiffstats
path: root/bin/sh
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2011-01-15 21:09:00 +0000
committerjilles <jilles@FreeBSD.org>2011-01-15 21:09:00 +0000
commit31120cf0451bca6e369db5bba3896a425cc4f253 (patch)
tree86ec116a5ba2f93c9f0fca869422376bb05458fa /bin/sh
parentbb7c654baefbded0bb08435b269f1700d1fdec70 (diff)
downloadFreeBSD-src-31120cf0451bca6e369db5bba3896a425cc4f253.zip
FreeBSD-src-31120cf0451bca6e369db5bba3896a425cc4f253.tar.gz
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.
Diffstat (limited to 'bin/sh')
-rw-r--r--bin/sh/trap.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/bin/sh/trap.c b/bin/sh/trap.c
index 2b3a4d3..d2e5308 100644
--- a/bin/sh/trap.c
+++ b/bin/sh/trap.c
@@ -153,8 +153,18 @@ trapcmd(int argc, char **argv)
char *action;
int signo;
int errors = 0;
+ int i;
+
+ while ((i = nextopt("l")) != '\0') {
+ switch (i) {
+ case 'l':
+ printsignals();
+ return (0);
+ }
+ }
+ argv = argptr;
- if (argc <= 1) {
+ 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] != '-') {
- action = *argv;
+ if (strcmp(*argv, "-") == 0)
argv++;
- } else if ((*argv)[1] == '\0') {
+ else {
+ action = *argv;
argv++;
- } else if ((*argv)[1] == 'l' && (*argv)[2] == '\0') {
- printsignals();
- return 0;
- } else {
- error("bad option %s", *argv);
}
}
while (*argv) {
OpenPOWER on IntegriCloud