summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvcrhonek <vcrhonek@fedoraproject.org>2009-12-15 16:19:54 +0000
committervcrhonek <vcrhonek@fedoraproject.org>2009-12-15 16:19:54 +0000
commit7cc421e822706e6fb44d8b1311efb3e7ac9d4273 (patch)
tree18c2724f8d085d0965c79a05679da80d97a0aeed
parent3bbb34859d4f05646a9a23f28fb3ae32371fb5b9 (diff)
downloadtcsh-rebase-6.19.00-7cc421e822706e6fb44d8b1311efb3e7ac9d4273.tar.gz
tcsh-rebase-6.19.00-7cc421e822706e6fb44d8b1311efb3e7ac9d4273.tar.xz
tcsh-rebase-6.19.00-7cc421e822706e6fb44d8b1311efb3e7ac9d4273.zip
Fix tcsh obeys printexitvalue for back-ticks
-rw-r--r--tcsh-6.17.00-printexitvalue.patch82
-rw-r--r--tcsh.spec8
2 files changed, 89 insertions, 1 deletions
diff --git a/tcsh-6.17.00-printexitvalue.patch b/tcsh-6.17.00-printexitvalue.patch
new file mode 100644
index 0000000..d9d4f31
--- /dev/null
+++ b/tcsh-6.17.00-printexitvalue.patch
@@ -0,0 +1,82 @@
+diff -up tcsh-6.17.00/sh.glob.c_old tcsh-6.17.00/sh.glob.c
+--- tcsh-6.17.00/sh.glob.c_old 2009-12-15 12:38:48.000000000 +0100
++++ tcsh-6.17.00/sh.glob.c 2009-12-15 12:40:52.000000000 +0100
+@@ -882,6 +882,10 @@ backeval(struct blk_buf *bb, struct Strb
+ alias(&paraml);
+ t = syntax(paraml.next, &paraml, 0);
+ cleanup_push(t, syntax_cleanup);
++ /* The F_BACKQ flag must set so the job output is correct if
++ * printexitvalue is set. If it's not set, the job output
++ * will have "Exit N" appended where N is the exit status. */
++ t->t_dflg = F_BACKQ;
+ if (seterr)
+ stderror(ERR_OLD);
+ #ifdef SIGTSTP
+diff -up tcsh-6.17.00/sh.sem.c_old tcsh-6.17.00/sh.sem.c
+--- tcsh-6.17.00/sh.sem.c_old 2009-12-15 12:41:03.000000000 +0100
++++ tcsh-6.17.00/sh.sem.c 2009-12-15 12:57:49.000000000 +0100
+@@ -664,31 +664,31 @@ execute(struct command *t, volatile int
+ #endif /* !CLOSE_ON_EXEC */
+ didfds = 0;
+ wanttty = -1;
+- t->t_dspr->t_dflg |= t->t_dflg & F_NOINTERRUPT;
++ t->t_dspr->t_dflg |= t->t_dflg & (F_NOINTERRUPT | F_BACKQ);
+ execute(t->t_dspr, wanttty, NULL, NULL, do_glob);
+ exitstat();
+
+ case NODE_PIPE:
+ #ifdef BACKPIPE
+ t->t_dcdr->t_dflg |= F_PIPEIN | (t->t_dflg &
+- (F_PIPEOUT | F_AMPERSAND | F_NOFORK | F_NOINTERRUPT));
++ (F_PIPEOUT | F_AMPERSAND | F_NOFORK | F_NOINTERRUPT | F_BACKQ));
+ execute(t->t_dcdr, wanttty, pv, pipeout, do_glob);
+ t->t_dcar->t_dflg |= F_PIPEOUT |
+- (t->t_dflg & (F_PIPEIN | F_AMPERSAND | F_STDERR | F_NOINTERRUPT));
++ (t->t_dflg & (F_PIPEIN | F_AMPERSAND | F_STDERR | F_NOINTERRUPT | F_BACKQ));
+ execute(t->t_dcar, wanttty, pipein, pv, do_glob);
+ #else /* !BACKPIPE */
+ t->t_dcar->t_dflg |= F_PIPEOUT |
+- (t->t_dflg & (F_PIPEIN | F_AMPERSAND | F_STDERR | F_NOINTERRUPT));
++ (t->t_dflg & (F_PIPEIN | F_AMPERSAND | F_STDERR | F_NOINTERRUPT | F_BACKQ));
+ execute(t->t_dcar, wanttty, pipein, pv, do_glob);
+ t->t_dcdr->t_dflg |= F_PIPEIN | (t->t_dflg &
+- (F_PIPEOUT | F_AMPERSAND | F_NOFORK | F_NOINTERRUPT));
++ (F_PIPEOUT | F_AMPERSAND | F_NOFORK | F_NOINTERRUPT | F_BACKQ));
+ execute(t->t_dcdr, wanttty, pv, pipeout, do_glob);
+ #endif /* BACKPIPE */
+ break;
+
+ case NODE_LIST:
+ if (t->t_dcar) {
+- t->t_dcar->t_dflg |= t->t_dflg & F_NOINTERRUPT;
++ t->t_dcar->t_dflg |= t->t_dflg & (F_NOINTERRUPT | F_BACKQ);
+ execute(t->t_dcar, wanttty, NULL, NULL, do_glob);
+ /*
+ * In strange case of A&B make a new job after A
+@@ -699,7 +699,7 @@ execute(struct command *t, volatile int
+ }
+ if (t->t_dcdr) {
+ t->t_dcdr->t_dflg |= t->t_dflg &
+- (F_NOFORK | F_NOINTERRUPT);
++ (F_NOFORK | F_NOINTERRUPT | F_BACKQ);
+ execute(t->t_dcdr, wanttty, NULL, NULL, do_glob);
+ }
+ break;
+@@ -707,7 +707,7 @@ execute(struct command *t, volatile int
+ case NODE_OR:
+ case NODE_AND:
+ if (t->t_dcar) {
+- t->t_dcar->t_dflg |= t->t_dflg & F_NOINTERRUPT;
++ t->t_dcar->t_dflg |= t->t_dflg & (F_NOINTERRUPT | F_BACKQ);
+ execute(t->t_dcar, wanttty, NULL, NULL, do_glob);
+ if ((getn(varval(STRstatus)) == 0) !=
+ (t->t_dtyp == NODE_AND)) {
+@@ -716,7 +716,7 @@ execute(struct command *t, volatile int
+ }
+ if (t->t_dcdr) {
+ t->t_dcdr->t_dflg |= t->t_dflg &
+- (F_NOFORK | F_NOINTERRUPT);
++ (F_NOFORK | F_NOINTERRUPT | F_BACKQ);
+ execute(t->t_dcdr, wanttty, NULL, NULL, do_glob);
+ }
+ break;
diff --git a/tcsh.spec b/tcsh.spec
index 90fecfb..c7ff7ef 100644
--- a/tcsh.spec
+++ b/tcsh.spec
@@ -3,7 +3,7 @@
Summary: An enhanced version of csh, the C shell
Name: tcsh
Version: 6.17
-Release: 5%{?dist}
+Release: 6%{?dist}
License: BSD
Group: System Environment/Shells
Source: ftp://ftp.astron.com/pub/tcsh/%{name}-%{version}.00.tar.gz
@@ -23,6 +23,8 @@ Patch13: tcsh-6.17.00-mh-color.patch
Patch14: tcsh-6.17.00-glob-automount.patch
# Accepted by upstream:
Patch15: tcsh-6.17.00-history.patch
+# Accepted by upstream:
+Patch16: tcsh-6.17.00-printexitvalue.patch
Provides: csh = %{version}
Requires(post): grep
Requires(postun): coreutils, grep
@@ -53,6 +55,7 @@ like syntax.
%patch13 -p1 -b .mh-color
%patch14 -p1 -b .glob-automount
%patch15 -p1 -b .history
+%patch16 -p1 -b .printexitvalue
for i in Fixes WishList; do
iconv -f iso-8859-1 -t utf-8 "$i" > "${i}_" && \
@@ -126,6 +129,9 @@ fi
%{_mandir}/man1/*.1*
%changelog
+* Tue Dec 15 2009 Vitezslav Crhonek <vcrhonek@redhat.com> - 6.17-6
+- Fix tcsh obeys printexitvalue for back-ticks
+
* Wed Nov 4 2009 Vitezslav Crhonek <vcrhonek@redhat.com> - 6.17-5
- Fix few globbing problems