Update to tcsh-6.18.00 - update sources & remove obsolte patches
- Remove obsolete patches: tcsh-6.15.00-ca-color.patch, tcsh-6.17.00-tc-color.patch, tcsh-6.17.00-mh-color.patch, tcsh-6.17.00-history.patch, tcsh-6.17.00-printexitvalue.patch, tcsh-6.17.00-testsuite.patch, tcsh-6.17.00-negative_jobs.patch, tcsh-6.17.00-wait-intr.patch, tcsh-6.17.00-dont-set-empty-remotehost.patch, tcsh-6.17.00-dont-print-history-on-verbose.patch, tcsh-6.14.00-set.patch, tcsh-6.17.00-extrafork.patch, tcsh-6.17.00-avoid-null-cwd.patch, tcsh-6.17.00-avoid-infinite-loop-pendjob-xprintf.patch, tcsh-6.17.00-variable-names.patch, tcsh-6.17.00-handle-signals-before-flush.patch tcsh-6.17.00-status-pipeline-backquote-list-of-cmds.patch (reverted!)
This commit is contained in:
parent
a1b402c44a
commit
66fbce9c1e
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ tcsh-6.14.00.tar.gz
|
||||
tcsh-6.15.00.tar.gz
|
||||
tcsh-6.16.00.tar.gz
|
||||
tcsh-6.17.00.tar.gz
|
||||
/tcsh-6.18.00.tar.gz
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
c47de903e3d52f6824c8dd0c91eeb477 tcsh-6.17.00.tar.gz
|
||||
ee9b3aa36fb38d32eab6a37a34e4c341 tcsh-6.18.00.tar.gz
|
||||
|
@ -1,11 +0,0 @@
|
||||
diff -up tcsh-6.15.00/tcsh.man.set tcsh-6.15.00/tcsh.man
|
||||
--- tcsh-6.15.00/tcsh.man.set 2008-09-03 11:43:55.000000000 +0200
|
||||
+++ tcsh-6.15.00/tcsh.man 2008-09-03 11:43:55.000000000 +0200
|
||||
@@ -3213,7 +3213,6 @@ The fifth form sets the \fIindex\fR'th c
|
||||
this component must already exist.
|
||||
The sixth form lists only the names of all shell variables that are read-only.
|
||||
The seventh form makes \fIname\fR read-only, whether or not it has a value.
|
||||
-The second form sets \fIname\fR to the null string.
|
||||
The eighth form is the same as the third form, but
|
||||
make \fIname\fR read-only at the same time.
|
||||
.PD
|
@ -1,11 +0,0 @@
|
||||
diff -up tcsh-6.17.00/tw.color.c_old tcsh-6.17.00/tw.color.c
|
||||
--- tcsh-6.17.00/tw.color.c_old 2009-07-20 14:35:59.000000000 +0200
|
||||
+++ tcsh-6.17.00/tw.color.c 2009-07-20 14:36:54.000000000 +0200
|
||||
@@ -86,6 +86,7 @@ static Variable variables[] = {
|
||||
VAR(NOS, "ow", ""), /* Other writable dir (o+w) but not sticky */
|
||||
VAR(NOS, "st", ""), /* Sticky dir (+t) but not other writable */
|
||||
VAR(NOS, "rs", "0"), /* Reset to normal color */
|
||||
+ VAR(NOS, "ca", ""), /* file with capability */
|
||||
};
|
||||
|
||||
enum FileType {
|
@ -1,11 +0,0 @@
|
||||
diff -up tcsh-6.17.00/tw.color.c_old tcsh-6.17.00/tw.color.c
|
||||
--- tcsh-6.17.00/tw.color.c_old 2009-07-20 15:14:22.000000000 +0200
|
||||
+++ tcsh-6.17.00/tw.color.c 2009-07-20 15:15:26.000000000 +0200
|
||||
@@ -87,6 +87,7 @@ static Variable variables[] = {
|
||||
VAR(NOS, "st", ""), /* Sticky dir (+t) but not other writable */
|
||||
VAR(NOS, "rs", "0"), /* Reset to normal color */
|
||||
VAR(NOS, "ca", ""), /* file with capability */
|
||||
+ VAR(NOS, "hl", ""), /* Hardlink */
|
||||
};
|
||||
|
||||
enum FileType {
|
@ -1,10 +0,0 @@
|
||||
--- tcsh-6.17.00/sh.proc.c.orig 2011-02-03 12:31:14.000000000 -0700
|
||||
+++ tcsh-6.17.00/sh.proc.c 2011-02-03 12:32:00.000000000 -0700
|
||||
@@ -910,6 +910,7 @@
|
||||
|
||||
if (pcurrjob && (pcurrjob->p_flags & (PFOREGND | PSTOPPED)) == 0) {
|
||||
pp = pcurrjob;
|
||||
+ pcurrjob = 0;
|
||||
while (pp->p_procid != pp->p_jobid)
|
||||
pp = pp->p_friends;
|
||||
xprintf("[%d]", pp->p_index);
|
@ -1,12 +0,0 @@
|
||||
diff -up tcsh-6.17.00/sh.proc.c.bz607368 tcsh-6.17.00/sh.proc.c
|
||||
--- tcsh-6.17.00/sh.proc.c.bz607368 2011-04-28 14:14:24.000000000 +0900
|
||||
+++ tcsh-6.17.00/sh.proc.c 2011-04-28 14:14:55.000000000 +0900
|
||||
@@ -367,7 +367,7 @@ found:
|
||||
#ifdef notdef
|
||||
jobflags & PAEXITED ||
|
||||
#endif /* notdef */
|
||||
- !eq(dcwd->di_name, fp->p_cwd->di_name))) {
|
||||
+ fp->p_cwd == NULL || !eq(dcwd->di_name, fp->p_cwd->di_name))) {
|
||||
/* PWP: print a newline after ^C */
|
||||
if (jobflags & PINTERRUPTED) {
|
||||
xputchar('\r' | QUOTE);
|
@ -1,23 +0,0 @@
|
||||
diff -u -p -r3.40 -r3.41
|
||||
--- tcsh-6.17.00/sh.hist.c 1 Mar 2007 17:14:51 -0000 3.40
|
||||
+++ tcsh-6.17.00/sh.hist.c 6 May 2010 14:16:24 -0000 3.41
|
||||
@@ -422,8 +422,18 @@ rechist(Char *fname, int ref)
|
||||
oldidfds = didfds;
|
||||
didfds = 0;
|
||||
if ((shist = adrof(STRsavehist)) != NULL && shist->vec != NULL)
|
||||
- if (shist->vec[1] && eq(shist->vec[1], STRmerge))
|
||||
+ if (shist->vec[1] && eq(shist->vec[1], STRmerge)) {
|
||||
+ /*
|
||||
+ * Unset verbose while we read the history file. From:
|
||||
+ * jbastian@redhat.com (Jeffrey Bastian)
|
||||
+ */
|
||||
+ Char *verb = varval(STRverbose);
|
||||
+ if (verb != STRNULL)
|
||||
+ unsetv(STRverbose);
|
||||
loadhist(fname, 1);
|
||||
+ if (verb != STRNULL)
|
||||
+ setv(STRverbose, verb, VAR_READWRITE);
|
||||
+ }
|
||||
fp = xcreat(short2str(fname), 0600);
|
||||
if (fp == -1) {
|
||||
didfds = oldidfds;
|
@ -1,18 +0,0 @@
|
||||
--- tcsh-6.17.00-orig/tc.func.c 2009-06-25 23:15:38.000000000 +0200
|
||||
+++ tcsh-6.17.00/tc.func.c 2011-01-14 12:48:54.959051220 +0100
|
||||
@@ -2025,12 +2025,13 @@ remotehost(void)
|
||||
}
|
||||
wait_options = 0;
|
||||
done:
|
||||
+ cleanup_push(&hostname, strbuf_cleanup);
|
||||
xclose(fds[0]);
|
||||
while ((wait_res = waitpid(pid, &status, wait_options)) == -1
|
||||
&& errno == EINTR)
|
||||
handle_pending_signals();
|
||||
- cleanup_push(&hostname, strbuf_cleanup);
|
||||
- if (wait_res == pid && WIFEXITED(status) && WEXITSTATUS(status) == 0) {
|
||||
+ if (hostname.len > 0 && wait_res == pid && WIFEXITED(status)
|
||||
+ && WEXITSTATUS(status) == 0) {
|
||||
strbuf_terminate(&hostname);
|
||||
tsetenv(STRREMOTEHOST, str2short(hostname.s));
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
diff -up tcsh-6.17.00/sh.glob.c.orig tcsh-6.17.00/sh.glob.c
|
||||
--- tcsh-6.17.00/sh.glob.c.orig 2010-10-06 10:27:21.015893878 +0200
|
||||
+++ tcsh-6.17.00/sh.glob.c 2010-10-06 10:28:17.503914951 +0200
|
||||
@@ -881,11 +881,13 @@ backeval(struct blk_buf *bb, struct Strb
|
||||
stderror(ERR_OLD);
|
||||
alias(¶ml);
|
||||
t = syntax(paraml.next, ¶ml, 0);
|
||||
+ if (t == NULL)
|
||||
+ return;
|
||||
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;
|
||||
+ t->t_dflg = F_BACKQ|F_NOFORK;
|
||||
if (seterr)
|
||||
stderror(ERR_OLD);
|
||||
#ifdef SIGTSTP
|
@ -1,36 +0,0 @@
|
||||
From 466297a90d3520d5521c9ca6858a5b7981b3edb8 Mon Sep 17 00:00:00 2001
|
||||
From: "Vojtech Vitek (V-Teq)" <vvitek@redhat.com>
|
||||
Date: Thu, 10 Nov 2011 17:33:01 +0100
|
||||
Subject: [PATCH 1/2] Handle pending signals before flush so that the the
|
||||
history file does not get truncated. (Ted Anderson)
|
||||
|
||||
Patch adapted from upstream patch in tcsh V6.17.01 - 20100506
|
||||
http://mx.gw.com/pipermail/tcsh/2010-May/004066.html
|
||||
---
|
||||
sh.c | 3 +++
|
||||
1 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/sh.c b/sh.c
|
||||
index 73b6d7f..da818fb 100644
|
||||
--- a/sh.c
|
||||
+++ b/sh.c
|
||||
@@ -1288,6 +1288,8 @@ main(int argc, char **argv)
|
||||
*/
|
||||
process(setintr);
|
||||
|
||||
+ /* Take care of these (especially HUP) here instead of inside flush. */
|
||||
+ handle_pending_signals();
|
||||
/*
|
||||
* Mop-up.
|
||||
*/
|
||||
@@ -2018,6 +2020,7 @@ process(int catch)
|
||||
cleanup_pop_mark(omark);
|
||||
resexit(osetexit);
|
||||
exitset--;
|
||||
+ handle_pending_signals();
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
--
|
||||
1.7.6.2
|
||||
|
@ -1,12 +0,0 @@
|
||||
diff -up tcsh-6.17.00/sh.c_old tcsh-6.17.00/sh.c
|
||||
--- tcsh-6.17.00/sh.c_old 2009-10-19 17:18:01.000000000 +0200
|
||||
+++ tcsh-6.17.00/sh.c 2009-10-19 17:18:50.000000000 +0200
|
||||
@@ -1291,6 +1291,8 @@ main(int argc, char **argv)
|
||||
/*
|
||||
* Mop-up.
|
||||
*/
|
||||
+ /* Take care of these (especially HUP) here instead of inside flush. */
|
||||
+ handle_pending_signals();
|
||||
if (intty) {
|
||||
if (loginsh) {
|
||||
xprintf("logout\n");
|
@ -1,12 +0,0 @@
|
||||
diff -up tcsh-6.17.00/tw.color.c_old tcsh-6.17.00/tw.color.c
|
||||
--- tcsh-6.17.00/tw.color.c_old 2009-08-26 13:29:05.000000000 +0200
|
||||
+++ tcsh-6.17.00/tw.color.c 2009-08-26 13:52:51.000000000 +0200
|
||||
@@ -88,6 +88,8 @@ static Variable variables[] = {
|
||||
VAR(NOS, "rs", "0"), /* Reset to normal color */
|
||||
VAR(NOS, "ca", ""), /* file with capability */
|
||||
VAR(NOS, "hl", ""), /* Hardlink */
|
||||
+ VAR(NOS, "mh", ""), /* MULTIHARDLINK */
|
||||
+ VAR(NOS, "cl", ""), /* CLRTOEOL */
|
||||
};
|
||||
|
||||
enum FileType {
|
@ -1,13 +0,0 @@
|
||||
diff -up tcsh-6.17.00/tc.prompt.c.orig tcsh-6.17.00/tc.prompt.c
|
||||
--- tcsh-6.17.00/tc.prompt.c.orig 2010-06-17 12:40:40.422571577 +0200
|
||||
+++ tcsh-6.17.00/tc.prompt.c 2010-06-17 12:41:28.628519727 +0200
|
||||
@@ -526,6 +526,9 @@ tprintf(int what, const Char *fmt, const
|
||||
int njobs = -1;
|
||||
struct process *pp;
|
||||
|
||||
+ if (!proclist.p_next)
|
||||
+ njobs++;
|
||||
+
|
||||
for (pp = proclist.p_next; pp; pp = pp->p_next)
|
||||
njobs++;
|
||||
p = Itoa(njobs, 1, attributes);
|
@ -1,82 +0,0 @@
|
||||
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(¶ml);
|
||||
t = syntax(paraml.next, ¶ml, 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;
|
@ -1,141 +0,0 @@
|
||||
diff -u -r3.164 -r3.165
|
||||
--- tcsh-6.17.00/sh.h 5 Feb 2011 16:14:20 -0000 3.164
|
||||
+++ tcsh-6.17.00/sh.h 14 Apr 2011 18:25:25 -0000 3.165
|
||||
@@ -578,6 +578,7 @@
|
||||
EXTERN int editing IZERO; /* doing filename expansion and line editing */
|
||||
EXTERN int noediting IZERO; /* initial $term defaulted to noedit */
|
||||
EXTERN int bslash_quote IZERO;/* PWP: tcsh-style quoting? (in sh.c) */
|
||||
+EXTERN int anyerror IZERO; /* propagate errors from pipelines/backq */
|
||||
EXTERN int compat_expr IZERO;/* csh-style expressions? */
|
||||
EXTERN int isoutatty IZERO; /* is SHOUT a tty */
|
||||
EXTERN int isdiagatty IZERO;/* is SHDIAG a tty */
|
||||
diff -u -r3.118 -r3.119
|
||||
--- tcsh-6.17.00/sh.proc.c 24 Mar 2011 14:06:59 -0000 3.118
|
||||
+++ tcsh-6.17.00/sh.proc.c 14 Apr 2011 18:25:25 -0000 3.119
|
||||
@@ -557,6 +557,11 @@
|
||||
reason = 0;
|
||||
fp = pp;
|
||||
do {
|
||||
+ /* In case of pipelines only the result of the last
|
||||
+ * command should be taken in account */
|
||||
+ if (!anyerror && !(fp->p_flags & PBRACE)
|
||||
+ && ((fp->p_flags & PPOU) || (fp->p_flags & PBACKQ)))
|
||||
+ continue;
|
||||
if (fp->p_reason)
|
||||
reason = fp->p_flags & (PSIGNALED | PINTERRUPTED) ?
|
||||
fp->p_reason | META : fp->p_reason;
|
||||
@@ -734,6 +739,8 @@
|
||||
pp->p_flags |= PBACKQ;
|
||||
if (t->t_dflg & F_HUP)
|
||||
pp->p_flags |= PHUP;
|
||||
+ if (t->t_dcom && t->t_dcom[0] && (*t->t_dcom[0] == '{'))
|
||||
+ pp->p_flags |= PBRACE;
|
||||
if (cmdmax == 0)
|
||||
morecommand(CMD_INIT);
|
||||
cmdp = cmdstr;
|
||||
diff -u -r3.14 -r3.15
|
||||
--- tcsh-6.17.00/sh.proc.h 7 May 2010 18:16:07 -0000 3.14
|
||||
+++ tcsh-6.17.00/sh.proc.h 14 Apr 2011 18:25:25 -0000 3.15
|
||||
@@ -103,6 +103,7 @@
|
||||
#define PNEEDNOTE (1<<15) /* notify as soon as practical */
|
||||
#define PBACKQ (1<<16) /* Process is `` evaluation */
|
||||
#define PHUP (1<<17) /* Process is marked for SIGHUP on exit */
|
||||
+#define PBRACE (1<<18) /* Process is {} evaluation */
|
||||
|
||||
/* defines for arguments to pprint */
|
||||
#define NUMBER 01
|
||||
diff -u -r3.81 -r3.82
|
||||
--- tcsh-6.17.00/sh.set.c 4 Feb 2011 18:00:26 -0000 3.81
|
||||
+++ tcsh-6.17.00/sh.set.c 14 Apr 2011 18:25:25 -0000 3.82
|
||||
@@ -106,6 +106,9 @@
|
||||
else if (eq(vp, STRloginsh)) {
|
||||
loginsh = 1;
|
||||
}
|
||||
+ else if (eq(vp, STRanyerror)) {
|
||||
+ anyerror = 1;
|
||||
+ }
|
||||
else if (eq(vp, STRsymlinks)) {
|
||||
Char *pn = varval(vp);
|
||||
|
||||
@@ -763,6 +766,8 @@
|
||||
HistLit = 0;
|
||||
if (adrof(STRloginsh) == 0)
|
||||
loginsh = 0;
|
||||
+ if (adrof(STRanyerror) == 0)
|
||||
+ anyerror = 0;
|
||||
if (adrof(STRwordchars) == 0)
|
||||
word_chars = STR_WORD_CHARS;
|
||||
if (adrof(STRedit) == 0)
|
||||
diff -u -r3.97 -r3.98
|
||||
--- tcsh-6.17.00/tc.const.c 27 Feb 2011 00:14:38 -0000 3.97
|
||||
+++ tcsh-6.17.00/tc.const.c 14 Apr 2011 18:25:26 -0000 3.98
|
||||
@@ -43,6 +43,7 @@
|
||||
#endif
|
||||
Char STRautomatic[] = { 'a', 'u', 't', 'o', 'm', 'a', 't', 'i', 'c',
|
||||
'\0' };
|
||||
+Char STRanyerror[] = { 'a', 'n', 'y', 'e', 'r', 'r', 'o', 'r', '\0' };
|
||||
Char STRhangup[] = { 'h', 'a', 'n', 'g', 'u', 'p', '\0' };
|
||||
Char STRaout[] = { 'a', '.', 'o', 'u', 't', '\0' };
|
||||
Char STRtty[] = { 't', 't', 'y', '\0' };
|
||||
diff -u -r3.226 -r3.227
|
||||
--- tcsh-6.17.00/tcsh.man 1 Feb 2011 19:56:50 -0000 3.226
|
||||
+++ tcsh-6.17.00/tcsh.man 14 Apr 2011 18:25:26 -0000 3.227
|
||||
@@ -4352,7 +4352,12 @@
|
||||
See also \fBloginsh\fR.
|
||||
.TP 8
|
||||
.B status
|
||||
-The status returned by the last command. If it terminated
|
||||
+The status returned by the last command, unless the variable
|
||||
+.B anyerror
|
||||
+is set, and any error in a pipeline or a backquote expansion will be
|
||||
+propagated (this was the default
|
||||
+.B csh
|
||||
+behavior). If it terminated
|
||||
abnormally, then 0200 is added to the status. Builtin commands
|
||||
which fail return exit status `1', all other builtin commands
|
||||
return status `0'.
|
||||
diff -u -r1.6 -r1.7
|
||||
--- tcsh-6.17.00/tests/lexical.at 6 May 2010 14:36:10 -0000 1.6
|
||||
+++ tcsh-6.17.00/tests/lexical.at 14 Apr 2011 18:25:26 -0000 1.7
|
||||
@@ -57,7 +57,7 @@
|
||||
set verbose
|
||||
echo `&|;<>()&||<<>>space tab end`
|
||||
]])
|
||||
-AT_CHECK([tcsh -f nosplit.csh], 1,
|
||||
+AT_CHECK([tcsh -f nosplit.csh], 0,
|
||||
[&|;<>()&||<<>>space tab end
|
||||
&|;<>()&||<<>>space tab end
|
||||
&|;<>()&||<<>>space tab end
|
||||
@@ -132,7 +132,7 @@
|
||||
AT_CHECK([tcsh -f -c 'echo "$OK"'], 1, , [OK: Undefined variable.
|
||||
])
|
||||
|
||||
-AT_CHECK([tcsh -f -c 'echo "`OK`"'], 1, [
|
||||
+AT_CHECK([tcsh -f -c 'echo "`OK`"'], 0, [
|
||||
],
|
||||
[OK: Command not found.
|
||||
])
|
||||
diff -u -r1.2 -r1.3
|
||||
--- tcsh-6.17.00/tests/subst.at 16 Feb 2006 03:12:00 -0000 1.2
|
||||
+++ tcsh-6.17.00/tests/subst.at 14 Apr 2011 18:25:26 -0000 1.3
|
||||
@@ -14,7 +14,7 @@
|
||||
echo `echo 1; \\
|
||||
echo 2`
|
||||
]])
|
||||
-AT_CHECK([tcsh -f backq.csh], 1,
|
||||
+AT_CHECK([tcsh -f backq.csh], 0,
|
||||
[4
|
||||
2
|
||||
1 2
|
||||
diff -u -r1.2 -r1.3
|
||||
--- tcsh-6.17.00/tests/syntax.at 16 Feb 2006 03:12:00 -0000 1.2
|
||||
+++ tcsh-6.17.00/tests/syntax.at 14 Apr 2011 18:25:26 -0000 1.3
|
||||
@@ -156,7 +156,7 @@
|
||||
[OK
|
||||
])
|
||||
|
||||
-AT_CHECK([tcsh -f -c '(echo $this_does_not_exist) |& cat'], 1,
|
||||
+AT_CHECK([tcsh -f -c '(echo $this_does_not_exist) |& cat'], 0,
|
||||
[this_does_not_exist: Undefined variable.
|
||||
])
|
||||
|
@ -1,49 +0,0 @@
|
||||
diff -up tcsh-6.17.00/tests/lexical.at.testsuite tcsh-6.17.00/tests/lexical.at
|
||||
--- tcsh-6.17.00/tests/lexical.at.testsuite 2008-10-17 21:56:59.000000000 +0200
|
||||
+++ tcsh-6.17.00/tests/lexical.at 2010-04-08 16:27:27.286413600 +0200
|
||||
@@ -30,15 +30,15 @@ AT_CLEANUP
|
||||
|
||||
AT_SETUP([Comments])
|
||||
|
||||
-AT_CHECK([echo 'echo OK#comment' | tcsh -f], , [OK
|
||||
+AT_CHECK([echo 'echo OK@%:@comment' | tcsh -f], , [OK
|
||||
])
|
||||
|
||||
-AT_CHECK([tcsh -f -c 'echo #no comment'], ,
|
||||
-[#no comment
|
||||
+AT_CHECK([tcsh -f -c 'echo @%:@no comment'], ,
|
||||
+[@%:@no comment
|
||||
])
|
||||
|
||||
AT_DATA([comment2.csh],
|
||||
-[[echo testing...#\
|
||||
+[[echo testing...@%:@\
|
||||
OK
|
||||
]])
|
||||
AT_CHECK([tcsh -f comment2.csh], ,
|
||||
@@ -194,7 +194,7 @@ AT_DATA([nohist.csh],
|
||||
[[echo ! space ! tab != "!(" newline !
|
||||
]])
|
||||
AT_CHECK([tcsh -f nohist.csh], ,
|
||||
-[! space ! tab != !( newline !
|
||||
+[! space ! tab != !@{:@ newline !
|
||||
])
|
||||
|
||||
AT_CLEANUP
|
||||
@@ -230,14 +230,14 @@ AT_CHECK([tcsh -f -q -i < negative.csh],
|
||||
[echo 1
|
||||
])
|
||||
|
||||
-AT_CHECK([echo 'echo !#:0' | tcsh -f -q -i], ,
|
||||
+AT_CHECK([echo 'echo !@%:@:0' | tcsh -f -q -i], ,
|
||||
[> echo
|
||||
> exit
|
||||
],
|
||||
[echo echo
|
||||
])
|
||||
|
||||
-AT_CHECK([echo 'echo !#:1' | tcsh -f -q -i], 1,
|
||||
+AT_CHECK([echo 'echo !@%:@:1' | tcsh -f -q -i], 1,
|
||||
[> > exit
|
||||
],
|
||||
[Bad ! arg selector.
|
@ -1,92 +0,0 @@
|
||||
--- tcsh-6.17.00-orig/sh.func.c 2009-06-25 23:15:37.000000000 +0200
|
||||
+++ tcsh-6.17.00/sh.func.c 2011-01-17 12:19:47.477051757 +0100
|
||||
@@ -520,12 +520,13 @@ doforeach(Char **v, struct command *c)
|
||||
|
||||
USE(c);
|
||||
v++;
|
||||
- sp = cp = strip(*v);
|
||||
- if (!letter(*sp))
|
||||
+ cp = sp = strip(*v);
|
||||
+ if (!letter(*cp))
|
||||
stderror(ERR_NAME | ERR_VARBEGIN);
|
||||
- while (*cp && alnum(*cp))
|
||||
+ do {
|
||||
cp++;
|
||||
- if (*cp)
|
||||
+ } while (alnum(*cp));
|
||||
+ if (*cp != '\0')
|
||||
stderror(ERR_NAME | ERR_VARALNUM);
|
||||
cp = *v++;
|
||||
if (v[0][0] != '(' || v[blklen(v) - 1][0] != ')')
|
||||
@@ -1376,13 +1364,16 @@ dosetenv(Char **v, struct command *c)
|
||||
}
|
||||
|
||||
vp = *v++;
|
||||
-
|
||||
lp = vp;
|
||||
-
|
||||
- for (; *lp != '\0' ; lp++) {
|
||||
- if (*lp == '=')
|
||||
- stderror(ERR_NAME | ERR_SYNTAX);
|
||||
- }
|
||||
+
|
||||
+ if (!letter(*lp))
|
||||
+ stderror(ERR_NAME | ERR_VARBEGIN);
|
||||
+ do {
|
||||
+ lp++;
|
||||
+ } while (alnum(*lp));
|
||||
+ if (*lp != '\0')
|
||||
+ stderror(ERR_NAME | ERR_VARALNUM);
|
||||
+
|
||||
if ((lp = *v++) == 0)
|
||||
lp = STRNULL;
|
||||
|
||||
--- tcsh-6.17.00-orig/sh.set.c 2007-09-28 23:02:03.000000000 +0200
|
||||
+++ tcsh-6.17.00/sh.set.c 2011-01-17 15:02:42.785021782 +0100
|
||||
@@ -222,7 +222,7 @@ void
|
||||
doset(Char **v, struct command *c)
|
||||
{
|
||||
Char *p;
|
||||
- Char *vp, op;
|
||||
+ Char *vp;
|
||||
Char **vecp;
|
||||
int hadsub;
|
||||
int subscr;
|
||||
@@ -262,27 +262,26 @@ doset(Char **v, struct command *c)
|
||||
do {
|
||||
hadsub = 0;
|
||||
vp = p;
|
||||
- if (letter(*p))
|
||||
- for (; alnum(*p); p++)
|
||||
- continue;
|
||||
- if (vp == p || !letter(*vp))
|
||||
+ if (!letter(*p))
|
||||
stderror(ERR_NAME | ERR_VARBEGIN);
|
||||
+ do {
|
||||
+ p++;
|
||||
+ } while (alnum(*p));
|
||||
if (*p == '[') {
|
||||
hadsub++;
|
||||
p = getinx(p, &subscr);
|
||||
}
|
||||
- if ((op = *p) != 0) {
|
||||
- *p++ = 0;
|
||||
- if (*p == 0 && *v && **v == '(')
|
||||
+ if (*p != '\0' && *p != '=')
|
||||
+ stderror(ERR_NAME | ERR_VARALNUM);
|
||||
+ if (*p == '=') {
|
||||
+ *p++ = '\0';
|
||||
+ if (*p == '\0' && *v != NULL && **v == '(')
|
||||
p = *v++;
|
||||
}
|
||||
else if (*v && eq(*v, STRequal)) {
|
||||
- op = '=', v++;
|
||||
- if (*v)
|
||||
+ if (*++v != NULL)
|
||||
p = *v++;
|
||||
}
|
||||
- if (op && op != '=')
|
||||
- stderror(ERR_NAME | ERR_SYNTAX);
|
||||
if (eq(p, STRLparen)) {
|
||||
Char **e = v;
|
||||
|
@ -1,34 +0,0 @@
|
||||
--- tcsh-6.17.00/sh.proc.c 2009-06-25 23:15:37.000000000 +0200
|
||||
+++ sh.proc.c 2010-11-25 17:36:16.500751242 +0100
|
||||
@@ -596,6 +596,10 @@ loop:
|
||||
pp->p_flags & PRUNNING) {
|
||||
handle_pending_signals();
|
||||
sigsuspend(&pause_mask);
|
||||
+ if (pintr_pending) {
|
||||
+ handle_pending_signals();
|
||||
+ break;
|
||||
+ }
|
||||
handle_pending_signals();
|
||||
goto loop;
|
||||
}
|
||||
--- tcsh-6.17.00/sh.h 2009-06-25 23:27:37.000000000 +0200
|
||||
+++ sh.h 2010-11-26 11:42:16.160119671 +0100
|
||||
@@ -533,6 +533,7 @@ typedef union {
|
||||
* Global flags
|
||||
*/
|
||||
EXTERN int chkstop IZERO; /* Warned of stopped jobs... allow exit */
|
||||
+EXTERN volatile sig_atomic_t pintr_pending; /* Interrupted by SIGINT */
|
||||
|
||||
#if (defined(FIOCLEX) && defined(FIONCLEX)) || defined(F_SETFD)
|
||||
# define CLOSE_ON_EXEC
|
||||
--- tcsh-6.17.00/tc.sig.c 2006-08-24 22:56:31.000000000 +0200
|
||||
+++ tc.sig.c 2010-11-26 11:40:09.779223509 +0100
|
||||
@@ -55,7 +55,7 @@ sigset_interrupting(int sig, void (*fn)
|
||||
static volatile sig_atomic_t alrmcatch_pending; /* = 0; */
|
||||
static volatile sig_atomic_t pchild_pending; /* = 0; */
|
||||
static volatile sig_atomic_t phup_pending; /* = 0; */
|
||||
-static volatile sig_atomic_t pintr_pending; /* = 0; */
|
||||
+volatile sig_atomic_t pintr_pending; /* = 0; */
|
||||
int alrmcatch_disabled; /* = 0; */
|
||||
int phup_disabled; /* = 0; */
|
||||
int pchild_disabled; /* = 0; */
|
@ -1,8 +1,8 @@
|
||||
From c0612dbd1c6d78668f46910c20cb801a5c67780b Mon Sep 17 00:00:00 2001
|
||||
From d73747f08a9576f360e0e0b6c5f537547c30c5fa Mon Sep 17 00:00:00 2001
|
||||
From: "Vojtech Vitek (V-Teq)" <vvitek@redhat.com>
|
||||
Date: Thu, 10 Nov 2011 18:19:57 +0100
|
||||
Subject: [PATCH 2/2] Implement .history file locking - shared readers,
|
||||
exclusive writer
|
||||
Date: Thu, 15 Mar 2012 03:13:01 +0100
|
||||
Subject: [PATCH] Implement .history file locking - shared readers, exclusive
|
||||
writer
|
||||
|
||||
Originally reported at Red Hat Bugzilla:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=648592
|
||||
@ -15,13 +15,13 @@ Patch by Vojtech Vitek (V-Teq) <vvitek@redhat.com>
|
||||
sh.dol.c | 2 +-
|
||||
sh.err.c | 16 ++++++++++
|
||||
sh.h | 17 +++++++++++
|
||||
sh.hist.c | 83 +++++++++++++++++++++++++++++-------------------------
|
||||
sh.hist.c | 62 +++++++++++++++++++++++------------------
|
||||
sh.lex.c | 8 ++--
|
||||
sh.sem.c | 2 +-
|
||||
9 files changed, 154 insertions(+), 72 deletions(-)
|
||||
9 files changed, 145 insertions(+), 60 deletions(-)
|
||||
|
||||
diff --git a/sh.c b/sh.c
|
||||
index da818fb..283af06 100644
|
||||
index dcd9116..aaf32bc 100644
|
||||
--- a/sh.c
|
||||
+++ b/sh.c
|
||||
@@ -140,6 +140,7 @@ struct saved_state {
|
||||
@ -32,7 +32,7 @@ index da818fb..283af06 100644
|
||||
};
|
||||
|
||||
static int srccat (Char *, Char *);
|
||||
@@ -1251,7 +1252,7 @@ main(int argc, char **argv)
|
||||
@@ -1369,7 +1370,7 @@ main(int argc, char **argv)
|
||||
/*
|
||||
* Source history before .login so that it is available in .login
|
||||
*/
|
||||
@ -41,7 +41,7 @@ index da818fb..283af06 100644
|
||||
#ifndef LOGINFIRST
|
||||
if (loginsh)
|
||||
(void) srccat(varval(STRhome), STRsldotlogin);
|
||||
@@ -1404,20 +1405,52 @@ static int
|
||||
@@ -1522,20 +1523,52 @@ static int
|
||||
#else
|
||||
int
|
||||
#endif /*WINNT_NATIVE*/
|
||||
@ -107,7 +107,7 @@ index da818fb..283af06 100644
|
||||
}
|
||||
|
||||
|
||||
@@ -1475,10 +1508,14 @@ st_save(struct saved_state *st, int unit, int hflg, Char **al, Char **av)
|
||||
@@ -1593,10 +1626,14 @@ st_save(struct saved_state *st, int unit, int hflg, Char **al, Char **av)
|
||||
st->onelflg = onelflg;
|
||||
st->enterhist = enterhist;
|
||||
st->justpr = justpr;
|
||||
@ -123,7 +123,7 @@ index da818fb..283af06 100644
|
||||
st->cantell = cantell;
|
||||
cpybin(st->B, B);
|
||||
|
||||
@@ -1550,7 +1587,8 @@ st_restore(void *xst)
|
||||
@@ -1668,7 +1705,8 @@ st_restore(void *xst)
|
||||
}
|
||||
cpybin(B, st->B);
|
||||
|
||||
@ -133,7 +133,7 @@ index da818fb..283af06 100644
|
||||
|
||||
insource = st->insource;
|
||||
SHIN = st->SHIN;
|
||||
@@ -2024,24 +2062,25 @@ process(int catch)
|
||||
@@ -2153,24 +2191,25 @@ process(int catch)
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
@ -164,7 +164,7 @@ index da818fb..283af06 100644
|
||||
}
|
||||
|
||||
f = globone(*t++, G_ERROR);
|
||||
@@ -2049,9 +2088,13 @@ dosource(Char **t, struct command *c)
|
||||
@@ -2178,9 +2217,13 @@ dosource(Char **t, struct command *c)
|
||||
cleanup_push(file, xfree);
|
||||
xfree(f);
|
||||
t = glob_all_or_error(t);
|
||||
@ -182,7 +182,7 @@ index da818fb..283af06 100644
|
||||
|
||||
/*
|
||||
diff --git a/sh.decls.h b/sh.decls.h
|
||||
index 70f76a4..806ae3a 100644
|
||||
index db90288..d4332f3 100644
|
||||
--- a/sh.decls.h
|
||||
+++ b/sh.decls.h
|
||||
@@ -37,7 +37,7 @@
|
||||
@ -194,7 +194,7 @@ index 70f76a4..806ae3a 100644
|
||||
extern void exitstat (void);
|
||||
extern void goodbye (Char **, struct command *);
|
||||
extern void importpath (Char *);
|
||||
@@ -97,6 +97,7 @@ extern void cleanup_until_mark(void);
|
||||
@@ -98,6 +98,7 @@ extern void cleanup_until_mark(void);
|
||||
extern size_t cleanup_push_mark(void);
|
||||
extern void cleanup_pop_mark(size_t);
|
||||
extern void open_cleanup(void *);
|
||||
@ -202,20 +202,20 @@ index 70f76a4..806ae3a 100644
|
||||
extern void opendir_cleanup(void *);
|
||||
extern void sigint_cleanup(void *);
|
||||
extern void sigprocmask_cleanup(void *);
|
||||
@@ -216,7 +217,7 @@ extern struct Hist *enthist (int, struct wordent *, int, int);
|
||||
@@ -219,7 +220,7 @@ extern struct Hist *enthist (int, struct wordent *, int, int, int);
|
||||
extern void savehist (struct wordent *, int);
|
||||
extern char *fmthist (int, ptr_t);
|
||||
extern void rechist (Char *, int);
|
||||
-extern void loadhist (Char *, int);
|
||||
+extern int loadhist (Char *, int);
|
||||
extern void displayHistStats(const char *);
|
||||
|
||||
/*
|
||||
* sh.init.c
|
||||
diff --git a/sh.dir.c b/sh.dir.c
|
||||
index 9f72951..b75c366 100644
|
||||
index ab89855..4bfe430 100644
|
||||
--- a/sh.dir.c
|
||||
+++ b/sh.dir.c
|
||||
@@ -1336,7 +1336,7 @@ loaddirs(Char *fname)
|
||||
@@ -1342,7 +1342,7 @@ loaddirs(Char *fname)
|
||||
loaddirs_cmd[1] = fname;
|
||||
else
|
||||
loaddirs_cmd[1] = STRtildotdirs;
|
||||
@ -225,10 +225,10 @@ index 9f72951..b75c366 100644
|
||||
}
|
||||
|
||||
diff --git a/sh.dol.c b/sh.dol.c
|
||||
index bafb971..b9fe82a 100644
|
||||
index 45b10e0..02dfe98 100644
|
||||
--- a/sh.dol.c
|
||||
+++ b/sh.dol.c
|
||||
@@ -1099,6 +1099,6 @@ again:
|
||||
@@ -1110,6 +1110,6 @@ again:
|
||||
*obp = 0;
|
||||
tmp = short2str(obuf);
|
||||
(void) xwrite(0, tmp, strlen (tmp));
|
||||
@ -237,10 +237,10 @@ index bafb971..b9fe82a 100644
|
||||
cleanup_until(&inheredoc);
|
||||
}
|
||||
diff --git a/sh.err.c b/sh.err.c
|
||||
index 279c7b8..9759d72 100644
|
||||
index e157d6a..29d41c3 100644
|
||||
--- a/sh.err.c
|
||||
+++ b/sh.err.c
|
||||
@@ -505,6 +505,22 @@ open_cleanup(void *xptr)
|
||||
@@ -514,6 +514,22 @@ open_cleanup(void *xptr)
|
||||
}
|
||||
|
||||
void
|
||||
@ -264,7 +264,7 @@ index 279c7b8..9759d72 100644
|
||||
{
|
||||
DIR *dir;
|
||||
diff --git a/sh.h b/sh.h
|
||||
index 83a3e93..c05870f 100644
|
||||
index 691add3..558b093 100644
|
||||
--- a/sh.h
|
||||
+++ b/sh.h
|
||||
@@ -50,6 +50,23 @@
|
||||
@ -292,10 +292,10 @@ index 83a3e93..c05870f 100644
|
||||
typedef unsigned long intptr_t;
|
||||
#endif
|
||||
diff --git a/sh.hist.c b/sh.hist.c
|
||||
index 2863d5c..f0583cb 100644
|
||||
index 6a12737..7df84e5 100644
|
||||
--- a/sh.hist.c
|
||||
+++ b/sh.hist.c
|
||||
@@ -255,7 +255,7 @@ dohist(Char **vp, struct command *c)
|
||||
@@ -1173,7 +1173,7 @@ dohist(Char **vp, struct command *c)
|
||||
}
|
||||
|
||||
if (hflg & (HIST_LOAD | HIST_MERGE))
|
||||
@ -304,7 +304,7 @@ index 2863d5c..f0583cb 100644
|
||||
else if (hflg & HIST_SAVE)
|
||||
rechist(*vp, 1);
|
||||
else {
|
||||
@@ -374,8 +374,8 @@ fmthist(int fmt, ptr_t ptr)
|
||||
@@ -1224,8 +1224,8 @@ fmthist(int fmt, ptr_t ptr)
|
||||
void
|
||||
rechist(Char *fname, int ref)
|
||||
{
|
||||
@ -315,7 +315,15 @@ index 2863d5c..f0583cb 100644
|
||||
struct varent *shist;
|
||||
static Char *dumphist[] = {STRhistory, STRmhT, 0, 0};
|
||||
|
||||
@@ -405,15 +405,12 @@ rechist(Char *fname, int ref)
|
||||
@@ -1239,7 +1239,6 @@ rechist(Char *fname, int ref)
|
||||
((snum = varval(STRhistory)) == STRNULL))
|
||||
snum = STRmaxint;
|
||||
|
||||
-
|
||||
if (fname == NULL) {
|
||||
if ((fname = varval(STRhistfile)) == STRNULL)
|
||||
fname = Strspl(varval(STRhome), &STRtildothist[1]);
|
||||
@@ -1255,15 +1254,12 @@ rechist(Char *fname, int ref)
|
||||
* with numerous shells being in simultaneous use. Imagine
|
||||
* any kind of window system. All these shells 'share' the same
|
||||
* ~/.history file for recording their command line history.
|
||||
@ -325,10 +333,9 @@ index 2863d5c..f0583cb 100644
|
||||
- * Users that like to nuke their environment require here an atomic
|
||||
- * loadhist-creat-dohist(dumphist)-close
|
||||
- * sequence.
|
||||
- *
|
||||
*
|
||||
- * jw.
|
||||
- */
|
||||
+ *
|
||||
+ * Atomic merge loadhist-creat/ftrunc-dohist(dumphist)-close
|
||||
+ * implemented using fcntl (shared readers, exclusive writer)
|
||||
+ * by Vojtech Vitek (V-Teq) <vvitek@redhat.com>.
|
||||
@ -337,59 +344,28 @@ index 2863d5c..f0583cb 100644
|
||||
/*
|
||||
* We need the didfds stuff before loadhist otherwise
|
||||
* exec in a script will fail to print if merge is set.
|
||||
@@ -421,41 +418,49 @@ rechist(Char *fname, int ref)
|
||||
@@ -1271,22 +1267,34 @@ rechist(Char *fname, int ref)
|
||||
*/
|
||||
oldidfds = didfds;
|
||||
didfds = 0;
|
||||
- if ((shist = adrof(STRsavehist)) != NULL && shist->vec != NULL)
|
||||
- if (shist->vec[1] && eq(shist->vec[1], STRmerge)) {
|
||||
- /*
|
||||
- * Unset verbose while we read the history file. From:
|
||||
- * jbastian@redhat.com (Jeffrey Bastian)
|
||||
- */
|
||||
- Char *verb = varval(STRverbose);
|
||||
- if (verb != STRNULL)
|
||||
- unsetv(STRverbose);
|
||||
- if (shist->vec[1] && eq(shist->vec[1], STRmerge))
|
||||
- loadhist(fname, 1);
|
||||
- if (verb != STRNULL)
|
||||
- setv(STRverbose, verb, VAR_READWRITE);
|
||||
-
|
||||
- fp = xcreat(short2str(fname), 0600);
|
||||
- cleanup_until(fname);
|
||||
- if (fp == -1) {
|
||||
- didfds = oldidfds;
|
||||
- return;
|
||||
+ if ((shist = adrof(STRsavehist)) != NULL && shist->vec != NULL
|
||||
+ && shist->vec[1] && eq(shist->vec[1], STRmerge)) {
|
||||
+ /*
|
||||
+ * Unset verbose while we read the history file. From:
|
||||
+ * jbastian@redhat.com (Jeffrey Bastian)
|
||||
+ */
|
||||
+ Char *verb = varval(STRverbose);
|
||||
+ if (verb != STRNULL)
|
||||
+ unsetv(STRverbose);
|
||||
+ /* Read .history file, leave it's fd open for writing. */
|
||||
+ fd = loadhist(fname, SRC_MFLAG|FD_WRLCK|FD_LEAVE_OPEN|FD_LEAVE_LCKD);
|
||||
+ if (fd != -1) {
|
||||
+ /* Truncate the .history file. */
|
||||
+ (void) ftruncate(fd, 0);
|
||||
+ (void) lseek(fd, 0, SEEK_SET);
|
||||
}
|
||||
- fp = xcreat(short2str(fname), 0600);
|
||||
- if (fp == -1) {
|
||||
- didfds = oldidfds;
|
||||
- cleanup_until(fname);
|
||||
- return;
|
||||
+ if (verb != STRNULL)
|
||||
+ setv(STRverbose, verb, VAR_READWRITE);
|
||||
+ }
|
||||
+ if (fd == -1) {
|
||||
+ /* Open .history file for writing (if not open yet). */
|
||||
+ fd = xopen(short2str(fname), O_LARGEFILE|O_CREAT|O_WRONLY|O_TRUNC, 0600);
|
||||
+ if (fd != -1)
|
||||
+ cleanup_push(&fd, open_cleanup);
|
||||
+ }
|
||||
+ if (fd != -1) {
|
||||
+ ftmp = SHOUT;
|
||||
+ SHOUT = fd;
|
||||
+ dumphist[2] = snum;
|
||||
+ /* Write history to the .history file. */
|
||||
+ dohist(dumphist, NULL);
|
||||
+ SHOUT = ftmp;
|
||||
}
|
||||
- ftmp = SHOUT;
|
||||
- SHOUT = fp;
|
||||
@ -397,34 +373,32 @@ index 2863d5c..f0583cb 100644
|
||||
- dohist(dumphist, NULL);
|
||||
- xclose(fp);
|
||||
- SHOUT = ftmp;
|
||||
+
|
||||
+ /* Open .history file for writing (if not open yet). */
|
||||
+ if (fd == -1) {
|
||||
+ fd = xopen(short2str(fname), O_LARGEFILE|O_CREAT|O_WRONLY|O_TRUNC, 0600);
|
||||
+ cleanup_until(fname);
|
||||
+ if (fd != -1)
|
||||
+ cleanup_push(&fd, open_cleanup);
|
||||
+ }
|
||||
+
|
||||
+ if (fd != -1) {
|
||||
+ ftmp = SHOUT;
|
||||
+ SHOUT = fd;
|
||||
+ dumphist[2] = snum;
|
||||
+ /* Write history to the .history file. */
|
||||
+ dohist(dumphist, NULL);
|
||||
+ SHOUT = ftmp;
|
||||
+ }
|
||||
+
|
||||
didfds = oldidfds;
|
||||
cleanup_until(fname);
|
||||
}
|
||||
|
||||
|
||||
-void
|
||||
-loadhist(Char *fname, int mflg)
|
||||
+int
|
||||
+loadhist(Char *fname, int flg)
|
||||
{
|
||||
static Char *loadhist_cmd[] = {STRsource, NULL, NULL, NULL};
|
||||
- loadhist_cmd[1] = mflg ? STRmm : STRmh;
|
||||
+ loadhist_cmd[1] = (flg & SRC_MFLAG) ? STRmm : STRmh;
|
||||
|
||||
if (fname != NULL)
|
||||
loadhist_cmd[2] = fname;
|
||||
@@ -464,5 +469,5 @@ loadhist(Char *fname, int mflg)
|
||||
else
|
||||
loadhist_cmd[2] = STRtildothist;
|
||||
|
||||
- dosource(loadhist_cmd, NULL);
|
||||
+ return dosource(loadhist_cmd, NULL, flg);
|
||||
}
|
||||
diff --git a/sh.lex.c b/sh.lex.c
|
||||
index 536097e..2543552 100644
|
||||
index 80643f7..e128789 100644
|
||||
--- a/sh.lex.c
|
||||
+++ b/sh.lex.c
|
||||
@@ -1589,7 +1589,7 @@ wide_read(int fildes, Char *buf, size_t nchars, int use_fclens)
|
||||
@@ -1595,7 +1595,7 @@ wide_read(int fildes, Char *buf, size_t nchars, int use_fclens)
|
||||
/* Throwing away possible partial multibyte characters on error if the
|
||||
stream is not seekable */
|
||||
err = errno;
|
||||
@ -433,7 +407,7 @@ index 536097e..2543552 100644
|
||||
errno = err;
|
||||
return res != 0 ? res : r;
|
||||
}
|
||||
@@ -1604,7 +1604,7 @@ bgetc(void)
|
||||
@@ -1610,7 +1610,7 @@ bgetc(void)
|
||||
if (cantell) {
|
||||
if (fseekp < fbobp || fseekp > feobp) {
|
||||
fbobp = feobp = fseekp;
|
||||
@ -442,7 +416,7 @@ index 536097e..2543552 100644
|
||||
}
|
||||
if (fseekp == feobp) {
|
||||
#ifdef WIDE_STRINGS
|
||||
@@ -1808,7 +1808,7 @@ btell(struct Ain *l)
|
||||
@@ -1814,7 +1814,7 @@ btell(struct Ain *l)
|
||||
void
|
||||
btoeof(void)
|
||||
{
|
||||
@ -451,7 +425,7 @@ index 536097e..2543552 100644
|
||||
aret = TCSH_F_SEEK;
|
||||
fseekp = feobp;
|
||||
alvec = NULL;
|
||||
@@ -1826,7 +1826,7 @@ settell(void)
|
||||
@@ -1832,7 +1832,7 @@ settell(void)
|
||||
cantell = 0;
|
||||
if (arginp || onelflg || intty)
|
||||
return;
|
||||
@ -461,10 +435,10 @@ index 536097e..2543552 100644
|
||||
fbuf = xcalloc(2, sizeof(Char **));
|
||||
fblocks = 1;
|
||||
diff --git a/sh.sem.c b/sh.sem.c
|
||||
index 7c5511a..b8eee96 100644
|
||||
index c880974..765bf50 100644
|
||||
--- a/sh.sem.c
|
||||
+++ b/sh.sem.c
|
||||
@@ -879,7 +879,7 @@ doio(struct command *t, int *pipein, int *pipeout)
|
||||
@@ -892,7 +892,7 @@ doio(struct command *t, int *pipein, int *pipeout)
|
||||
fd = xopen(tmp, O_WRONLY|O_APPEND|O_LARGEFILE);
|
||||
#else /* !O_APPEND */
|
||||
fd = xopen(tmp, O_WRONLY|O_LARGEFILE);
|
||||
@ -474,5 +448,5 @@ index 7c5511a..b8eee96 100644
|
||||
}
|
||||
else
|
||||
--
|
||||
1.7.6.2
|
||||
1.7.6.5
|
||||
|
67
tcsh.spec
67
tcsh.spec
@ -2,48 +2,20 @@
|
||||
|
||||
Summary: An enhanced version of csh, the C shell
|
||||
Name: tcsh
|
||||
Version: 6.17
|
||||
Release: 19%{?dist}
|
||||
Version: 6.18.00
|
||||
Release: 1%{?dist}
|
||||
License: BSD
|
||||
Group: System Environment/Shells
|
||||
Source: ftp://ftp.astron.com/pub/tcsh/%{name}-%{version}.00.tar.gz
|
||||
Source: http://ftp.funet.fi/pub/unix/shells/tcsh/%{name}-%{version}.tar.gz
|
||||
Patch1: tcsh-6.15.00-closem.patch
|
||||
Patch2: tcsh-6.14.00-tinfo.patch
|
||||
Patch3: tcsh-6.14.00-unprintable.patch
|
||||
Patch4: tcsh-6.15.00-hist-sub.patch
|
||||
Patch6: tcsh-6.15.00-ca-color.patch
|
||||
Patch7: tcsh-6.14.00-set.patch
|
||||
Patch8: tcsh-6.14.00-syntax.patch
|
||||
Patch9: tcsh-6.13.00-memoryuse.patch
|
||||
Patch11: tcsh-6.14.00-order.patch
|
||||
Patch12: tcsh-6.15.00-rs-color.patch
|
||||
Patch13: tcsh-6.17.00-mh-color.patch
|
||||
# Accepted by upstream:
|
||||
Patch14: tcsh-6.17.00-history.patch
|
||||
# Accepted by upstream:
|
||||
Patch15: tcsh-6.17.00-printexitvalue.patch
|
||||
Patch16: tcsh-6.17.00-testsuite.patch
|
||||
# Proposed to upstream (http://bugs.gw.com/view.php?id=149):
|
||||
Patch17: tcsh-6.17.00-negative_jobs.patch
|
||||
# Accepted by upstream (tcsh-6.17.03b http://bugs.gw.com/view.php?id=109):
|
||||
Patch19: tcsh-6.17.00-wait-intr.patch
|
||||
# Accepted by upstream (tcsh-6.17.03b http://bugs.gw.com/view.php?id=112):
|
||||
Patch21: tcsh-6.17.00-dont-set-empty-remotehost.patch
|
||||
# Patch by upstream (tcsh-6.17.01b http://mx.gw.com/pipermail/tcsh-bugs/2010-May/000673.html):
|
||||
Patch22: tcsh-6.17.00-dont-print-history-on-verbose.patch
|
||||
# Accepted by upstream:
|
||||
Patch23: tcsh-6.17.00-extrafork.patch
|
||||
# Proposed to upstream (http://bugs.gw.com/view.php?id=122):
|
||||
Patch24: tcsh-6.17.00-avoid-null-cwd.patch
|
||||
# Accepted by upstream (tcsh-6.17.05b http://mx.gw.com/pipermail/tcsh-bugs/2011-March/000727.html):
|
||||
Patch25: tcsh-6.17.00-avoid-infinite-loop-pendjob-xprintf.patch
|
||||
# Accepted by upstream (tcsh-6.17.03b http://bugs.gw.com/view.php?id=113):
|
||||
Patch26: tcsh-6.17.00-variable-names.patch
|
||||
# Accepted by upstream (tcsh-6.17.06b http://bugs.gw.com/view.php?id=110)
|
||||
Patch27: tcsh-6.17.00-status-pipeline-backquote-list-of-cmds.patch
|
||||
# Proposed to upstream (http://bugs.gw.com/view.php?id=121)
|
||||
Patch28: tcsh-6.17.00-manpage-spelling.patch
|
||||
Patch30: tcsh-6.17.00-handle-signals-before-flush.patch
|
||||
Patch31: tcsh-6.17.00-history-file-locking.patch
|
||||
|
||||
Provides: csh = %{version}
|
||||
@ -62,32 +34,15 @@ spelling correction, a history mechanism, job control and a C language
|
||||
like syntax.
|
||||
|
||||
%prep
|
||||
%setup -q -n %{name}-%{version}.00
|
||||
%setup -q -n %{name}-%{version}
|
||||
%patch1 -p1 -b .closem
|
||||
%patch2 -p1 -b .tinfo
|
||||
%patch3 -p1 -b .unprintable
|
||||
%patch4 -p1 -b .hist-sub
|
||||
%patch6 -p1 -b .ca-color
|
||||
%patch7 -p1 -b .set
|
||||
%patch8 -p1 -b .syntax
|
||||
%patch9 -p1 -b .memoryuse
|
||||
%patch11 -p1 -b .order
|
||||
%patch12 -p1 -b .rs-color
|
||||
%patch13 -p1 -b .mh-color
|
||||
%patch14 -p1 -b .history
|
||||
%patch15 -p1 -b .printexitvalue
|
||||
%patch16 -p1 -b .testsuite
|
||||
%patch17 -p1 -b .negative_jobs
|
||||
%patch19 -p1 -b .wait-intr
|
||||
%patch21 -p1 -b .dont-set-empty-remotehost
|
||||
%patch22 -p1 -b .dont-print-history-on-verbose
|
||||
%patch23 -p1 -b .extrafork
|
||||
%patch24 -p1 -b .avoid-null-cwd
|
||||
%patch25 -p1 -b .avoid-infinite-loop-pendjob-xprintf
|
||||
%patch26 -p1 -b .variable-names
|
||||
%patch27 -p1 -b .status-pipeline-backquote-list-of-cmds
|
||||
%patch28 -p1 -b .manpage-spelling
|
||||
%patch30 -p1 -b .handle-signals-before-flush
|
||||
%patch31 -p1 -b .history-file-locking
|
||||
|
||||
for i in Fixes WishList; do
|
||||
@ -162,6 +117,20 @@ fi
|
||||
%{_mandir}/man1/*.1*
|
||||
|
||||
%changelog
|
||||
* Thu Mar 15 2012 Vojtech Vitek (V-Teq) <vvitek@redhat.com> - 6.18.00-1
|
||||
- Update to tcsh-6.18.00
|
||||
- Remove obsolete patches: tcsh-6.15.00-ca-color.patch,
|
||||
tcsh-6.17.00-tc-color.patch, tcsh-6.17.00-mh-color.patch,
|
||||
tcsh-6.17.00-history.patch, tcsh-6.17.00-printexitvalue.patch,
|
||||
tcsh-6.17.00-testsuite.patch, tcsh-6.17.00-negative_jobs.patch,
|
||||
tcsh-6.17.00-wait-intr.patch, tcsh-6.17.00-dont-set-empty-remotehost.patch,
|
||||
tcsh-6.17.00-dont-print-history-on-verbose.patch, tcsh-6.14.00-set.patch,
|
||||
tcsh-6.17.00-extrafork.patch, tcsh-6.17.00-avoid-null-cwd.patch,
|
||||
tcsh-6.17.00-avoid-infinite-loop-pendjob-xprintf.patch,
|
||||
tcsh-6.17.00-variable-names.patch,
|
||||
tcsh-6.17.00-handle-signals-before-flush.patch
|
||||
tcsh-6.17.00-status-pipeline-backquote-list-of-cmds.patch (reverted!)
|
||||
|
||||
* Thu Feb 16 2012 Vojtech Vitek (V-Teq) <vvitek@redhat.com> - 6.17-19
|
||||
- Handle pending signals before flush so that the the .history file
|
||||
does not get truncated (#653054)
|
||||
|
Loading…
Reference in New Issue
Block a user