svn commit: r217461 - in head: bin/sh
tools/regression/bin/sh/builtins
Jilles Tjoelker
jilles at FreeBSD.org
Sat Jan 15 21:09:01 UTC 2011
Author: jilles
Date: Sat Jan 15 21:09:00 2011
New Revision: 217461
URL: http://svn.freebsd.org/changeset/base/217461
Log:
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.
Added:
head/tools/regression/bin/sh/builtins/trap5.0 (contents, props changed)
Modified:
head/bin/sh/trap.c
Modified: head/bin/sh/trap.c
==============================================================================
--- head/bin/sh/trap.c Sat Jan 15 20:37:56 2011 (r217460)
+++ head/bin/sh/trap.c Sat Jan 15 21:09:00 2011 (r217461)
@@ -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) {
Added: head/tools/regression/bin/sh/builtins/trap5.0
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/bin/sh/builtins/trap5.0 Sat Jan 15 21:09:00 2011 (r217461)
@@ -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" ]
More information about the svn-src-all
mailing list