diff options
author | jilles <jilles@FreeBSD.org> | 2011-01-15 21:09:00 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2011-01-15 21:09:00 +0000 |
commit | 31120cf0451bca6e369db5bba3896a425cc4f253 (patch) | |
tree | 86ec116a5ba2f93c9f0fca869422376bb05458fa /bin | |
parent | bb7c654baefbded0bb08435b269f1700d1fdec70 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | bin/sh/trap.c | 25 |
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) { |