Hello community,
here is the log from the commit of package tcsh for openSUSE:Factory checked in at 2015-05-07 09:21:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/tcsh (Old)
and /work/SRC/openSUSE:Factory/.tcsh.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "tcsh"
Changes:
--------
--- /work/SRC/openSUSE:Factory/tcsh/tcsh.changes 2015-02-01 12:29:51.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.tcsh.new/tcsh.changes 2015-05-07 09:21:09.000000000 +0200
@@ -1,0 +2,34 @@
+Tue May 5 10:16:14 UTC 2015 - werner@suse.de
+
+- Update tcsh to patch level 6.18.04 - 20150504
+ * revert fix echo "\1", it is incorrect.
+ * revert fix to PR/437, breaks short strings.
+
+-------------------------------------------------------------------
+Mon May 4 10:16:14 UTC 2015 - werner@suse.de
+
+- Update tcsh to patch level 6.18.03 - 20150503
+ * PR/437: Nakajima Akira: Fix segmentation fault reading input files
+ * PR/291: Print job status messages to stderr.
+ * Fridolin Pokorny NUL in `` does not mean EOF.
+ * Pavel Raiskup fix hang with:
+ while (1)
+ ( date & ; wait )
+ end
+ * Add cdtohome special variable (Martin Tournoij)
+ * Fix root prompt char for windows (Corinna Vinschen)
+ * For "next" completion matches only consider exact matches of the
+ previous word (Jamie Landeg-Jones)
+ * Fix echo "\1" for echo_style=both where the first character was
+ not processed properly (Gary Duzan)
+- Remove patches now upstream
+ * tcsh-6.18.01-blk_buf.patch
+ * tcsh-6.18.01-metakey.patch
+- Rename patches
+ tcsh-6.17.03-colorls.dif becomes tcsh-6.18.03-colorls.dif
+ tcsh-6.17.10-catalogs.dif becomes tcsh-6.18.03-catalogs.dif
+ tcsh-6.18.00-history-file-locking.patch becomes tcsh-6.18.03-history-file-locking.patch
+ tcsh-6.18.01-history-merge.dif becomes tcsh-6.18.03-history-merge.dif
+ tcsh-6.18.00.dif becomes tcsh-6.18.03.dif
+
+-------------------------------------------------------------------
Old:
----
tcsh-6.17.03-colorls.dif
tcsh-6.17.10-catalogs.dif
tcsh-6.18.00-history-file-locking.patch
tcsh-6.18.00.dif
tcsh-6.18.01-blk_buf.patch
tcsh-6.18.01-history-merge.dif
tcsh-6.18.01-metakey.patch
tcsh-6.18.01.tar.gz
New:
----
tcsh-6.18.03-catalogs.dif
tcsh-6.18.03-colorls.dif
tcsh-6.18.03-history-file-locking.patch
tcsh-6.18.03-history-merge.dif
tcsh-6.18.03.dif
tcsh-6.18.04.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ tcsh.spec ++++++
--- /var/tmp/diff_new_pack.tKRrIb/_old 2015-05-07 09:21:09.000000000 +0200
+++ /var/tmp/diff_new_pack.tKRrIb/_new 2015-05-07 09:21:09.000000000 +0200
@@ -17,26 +17,24 @@
Name: tcsh
-Version: 6.18.01
+Version: 6.18.04
Release: 0
Summary: The C SHell
License: BSD-3-Clause
Group: System/Shells
Url: http://www.tcsh.org/
-Source: ftp.astron.com:/pub/tcsh/tcsh-6.18.01.tar.gz
+Source: ftp.astron.com:/pub/tcsh/tcsh-6.18.04.tar.gz
Source2: bindkey.tcsh
Source3: complete.tcsh
-Patch0: tcsh-6.18.00.dif
+Patch0: tcsh-6.18.03.dif
Patch1: tcsh-6.15.00-pipe.dif
Patch2: tcsh-6.16.00-norm-cmd.dif
-Patch4: tcsh-6.17.03-colorls.dif
+Patch4: tcsh-6.18.03-colorls.dif
Patch5: tcsh-6.17.06-dspmbyte.dif
-Patch6: tcsh-6.17.10-catalogs.dif
-Patch7: tcsh-6.18.01-blk_buf.patch
-Patch8: tcsh-6.18.01-metakey.patch
+Patch6: tcsh-6.18.03-catalogs.dif
# PATCH-FIX-SUSE add history file locking (bsc#901076)
-Patch9: tcsh-6.18.00-history-file-locking.patch
-Patch10: tcsh-6.18.01-history-merge.dif
+Patch9: tcsh-6.18.03-history-file-locking.patch
+Patch10: tcsh-6.18.03-history-merge.dif
BuildRequires: autoconf
BuildRequires: ncurses-devel
BuildRequires: screen
@@ -61,13 +59,12 @@
%patch4 -b .colorls
%patch5 -b .dspmbyte
%patch6 -b .catalogs
-%patch7 -b .blk_buf
-%patch8 -b .metakey
-%patch9 -p1 -b .histlock
+%patch9 -b .histlock
%patch10 -b .histmerg
%patch0 -b .0
%build
+
cflags ()
{
local flag=$1; shift
++++++ tcsh-6.17.10-catalogs.dif -> tcsh-6.18.03-catalogs.dif ++++++
--- /work/SRC/openSUSE:Factory/tcsh/tcsh-6.17.10-catalogs.dif 2012-01-17 16:16:15.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.tcsh.new/tcsh-6.18.03-catalogs.dif 2015-05-07 09:21:08.000000000 +0200
@@ -1,27 +1,10 @@
---- sh.c
-+++ sh.c 2011-11-17 08:28:47.027646998 +0000
-@@ -168,8 +168,8 @@ static void st_restore (void *);
- static void
- add_localedir_to_nlspath(const char *path)
- {
-- static const char msgs_LOC[] = "/%L/LC_MESSAGES/%N.cat";
-- static const char msgs_lang[] = "/%l/LC_MESSAGES/%N.cat";
-+ static const char msgs_LOC[] = "/%L/LC_MESSAGES/%N";
-+ static const char msgs_lang[] = "/%l/LC_MESSAGES/%N";
- char *old;
- char *new, *new_p;
- size_t len;
-@@ -181,7 +181,7 @@ add_localedir_to_nlspath(const char *pat
- if (path == NULL)
- return;
-
-- (void) xsnprintf(trypath, sizeof(trypath), "%s/en/LC_MESSAGES/tcsh.cat",
-+ (void) xsnprintf(trypath, sizeof(trypath), "%s/en/LC_MESSAGES/tcsh",
- path);
- if (stat(trypath, &st) == -1)
- return;
+---
+ nls/Makefile.in | 48 ++++++++++++++++++++++++------------------------
+ sh.c | 6 +++---
+ 2 files changed, 27 insertions(+), 27 deletions(-)
+
--- nls/Makefile.in
-+++ nls/Makefile.in 2012-01-10 16:53:02.899145576 +0000
++++ nls/Makefile.in 2015-05-04 14:58:34.999037547 +0000
@@ -16,96 +16,96 @@ CATGEN= ${srcdir}/catgen
all: ${CATALOGS}
@@ -31,7 +14,7 @@
+INSTALLED+=${localedir}/C/LC_MESSAGES/tcsh
+${localedir}/C/LC_MESSAGES/tcsh: C.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
C.cat: ${srcdir}/C/charset ${srcdir}/C/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
@@ -41,7 +24,7 @@
+INSTALLED+=${localedir}/et/LC_MESSAGES/tcsh
+${localedir}/et/LC_MESSAGES/tcsh: et.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
et.cat: ${srcdir}/et/charset ${srcdir}/et/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
@@ -51,7 +34,7 @@
+INSTALLED+=${localedir}/fi/LC_MESSAGES/tcsh
+${localedir}/fi/LC_MESSAGES/tcsh: finnish.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
finnish.cat: ${srcdir}/finnish/charset ${srcdir}/finnish/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
@@ -61,7 +44,7 @@
+INSTALLED+=${localedir}/fr/LC_MESSAGES/tcsh
+${localedir}/fr/LC_MESSAGES/tcsh: french.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
french.cat: ${srcdir}/french/charset ${srcdir}/french/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
@@ -71,17 +54,17 @@
+INSTALLED+=${localedir}/de/LC_MESSAGES/tcsh
+${localedir}/de/LC_MESSAGES/tcsh: german.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
german.cat: ${srcdir}/german/charset ${srcdir}/german/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
-INSTALLED+=${localedir}/gr/LC_MESSAGES/tcsh.cat
-${localedir}/gr/LC_MESSAGES/tcsh.cat: greek.cat
-+INSTALLED+=${localedir}/el/LC_MESSAGES/tcsh
-+${localedir}/el/LC_MESSAGES/tcsh: greek.cat
++INSTALLED+=${localedir}/el_GR/LC_MESSAGES/tcsh
++${localedir}/el_GR/LC_MESSAGES/tcsh: greek.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
greek.cat: ${srcdir}/greek/charset ${srcdir}/greek/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
@@ -91,7 +74,7 @@
+INSTALLED+=${localedir}/it/LC_MESSAGES/tcsh
+${localedir}/it/LC_MESSAGES/tcsh: italian.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
italian.cat: ${srcdir}/italian/charset ${srcdir}/italian/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
@@ -101,7 +84,7 @@
+INSTALLED+=${localedir}/ja/LC_MESSAGES/tcsh
+${localedir}/ja/LC_MESSAGES/tcsh: ja.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
ja.cat: ${srcdir}/ja/charset ${srcdir}/ja/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
@@ -111,7 +94,7 @@
+INSTALLED+=${localedir}/pl/LC_MESSAGES/tcsh
+${localedir}/pl/LC_MESSAGES/tcsh: pl.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
pl.cat: ${srcdir}/pl/charset ${srcdir}/pl/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
@@ -121,7 +104,7 @@
+INSTALLED+=${localedir}/ru_RU/LC_MESSAGES/tcsh
+${localedir}/ru_RU/LC_MESSAGES/tcsh: russian.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
russian.cat: ${srcdir}/russian/charset ${srcdir}/russian/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
@@ -131,15 +114,37 @@
+INSTALLED+=${localedir}/es/LC_MESSAGES/tcsh
+${localedir}/es/LC_MESSAGES/tcsh: spanish.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
spanish.cat: ${srcdir}/spanish/charset ${srcdir}/spanish/*set[0-9]*
@${CATGEN} $(GENCAT) $@ $^ $>
--INSTALLED+=${localedir}/ru_UA.koi8u/LC_MESSAGES/tcsh.cat
--${localedir}/ru_UA.koi8u/LC_MESSAGES/tcsh.cat: ukrainian.cat
-+INSTALLED+=${localedir}/uk_UA/LC_MESSAGES/tcsh
-+${localedir}/uk_UA/LC_MESSAGES/tcsh: ukrainian.cat
+-INSTALLED+=${localedir}/ru_UA/LC_MESSAGES/tcsh.cat
+-${localedir}/ru_UA/LC_MESSAGES/tcsh.cat: ukrainian.cat
++INSTALLED+=${localedir}/ru_UA.koi8u/LC_MESSAGES/tcsh
++${localedir}/ru_UA.koi8u/LC_MESSAGES/tcsh: ukrainian.cat
mkdir -p $(@D)
- $(INSTALL) $< $@
+ $(INSTALL) $> $^ $@
+--- sh.c
++++ sh.c 2011-11-17 08:28:47.000000000 +0000
+@@ -169,8 +169,8 @@ static void st_restore (void *);
+ static void
+ add_localedir_to_nlspath(const char *path)
+ {
+- static const char msgs_LOC[] = "/%L/LC_MESSAGES/%N.cat";
+- static const char msgs_lang[] = "/%l/LC_MESSAGES/%N.cat";
++ static const char msgs_LOC[] = "/%L/LC_MESSAGES/%N";
++ static const char msgs_lang[] = "/%l/LC_MESSAGES/%N";
+ char *old;
+ char *new, *new_p;
+ size_t len;
+@@ -182,7 +182,7 @@ add_localedir_to_nlspath(const char *pat
+ if (path == NULL)
+ return;
+
+- (void) xsnprintf(trypath, sizeof(trypath), "%s/en/LC_MESSAGES/tcsh.cat",
++ (void) xsnprintf(trypath, sizeof(trypath), "%s/en/LC_MESSAGES/tcsh",
+ path);
+ if (stat(trypath, &st) == -1)
+ return;
++++++ tcsh-6.17.03-colorls.dif -> tcsh-6.18.03-colorls.dif ++++++
--- /work/SRC/openSUSE:Factory/tcsh/tcsh-6.17.03-colorls.dif 2011-11-21 12:51:58.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.tcsh.new/tcsh-6.18.03-colorls.dif 2015-05-07 09:21:08.000000000 +0200
@@ -1,14 +1,18 @@
+---
+ tw.color.c | 25 ++++++++++++-------------
+ 1 file changed, 12 insertions(+), 13 deletions(-)
+
--- tw.color.c
-+++ tw.color.c 2010-12-10 16:07:59.000000000 +0000
++++ tw.color.c 2015-05-04 13:33:41.521518502 +0000
@@ -89,6 +89,7 @@ static Variable variables[] = {
VAR(NOS, "hl", "44;37"), /* Reg file extra hard links, obsolete? */
VAR(NOS, "mh", "44;37"), /* Reg file extra hard links */
VAR(NOS, "ca", "30;41"), /* File with capability */
-+ VAR(NOS, "cl", ""), /* CLRTOEOL */
++ VAR(NOS, "cl", ""), /* CLRTOEOL */
};
- enum FileType {
-@@ -177,7 +178,7 @@ parseLS_COLORS(const Char *value)
+ #define nvariables (sizeof(variables)/sizeof(variables[0]))
+@@ -328,7 +329,7 @@ parseLS_COLORS(const Char *value)
size_t i, len;
const Char *v; /* pointer in value */
char *c; /* pointer in colors */
@@ -17,24 +21,24 @@
jmp_buf_t osetexit;
size_t omark;
-@@ -240,13 +241,10 @@ parseLS_COLORS(const Char *value)
- if ((Char)variables[i].variable[0] == (v[0] & CHAR) &&
- (Char)variables[i].variable[1] == (v[1] & CHAR))
- break;
-- if (i < nvariables) {
-- v += 3;
-+ v += 3;
-+ if (i < nvariables)
- getstring(&c, &v, &variables[i].color, ':');
-- continue;
-- }
-- else
-- stderror(ERR_BADCOLORVAR, v[0], v[1]);
-+ continue;
+@@ -385,13 +386,10 @@ parseLS_COLORS(const Char *value)
+ if ((Char)variables[i].variable[0] == (v[0] & CHAR) &&
+ (Char)variables[i].variable[1] == (v[1] & CHAR))
+ break;
+- if (i < nvariables) {
+- v += 3;
++ v += 3;
++ if (i < nvariables)
+ getstring(&c, &v, &variables[i].color, ':');
+- continue;
+- }
+- else
+- stderror(ERR_BADCOLORVAR, v[0], v[1]);
++ continue;
+ }
+ break;
}
- break;
- }
-@@ -301,12 +303,13 @@ print_color(const Char *fname, size_t le
+@@ -450,12 +448,13 @@ print_color(const Char *fname, size_t le
break;
}
if (i == nvariables) {
@@ -43,14 +47,14 @@
- && strncmp(last - extensions[i].extension.len,
- extensions[i].extension.s,
- extensions[i].extension.len) == 0) {
-- color = &extensions[i].color;
+- colorp = &extensions[i].color;
+ int j;
+ for (j = 0; j < nextensions; j++)
+ if (len >= extensions[j].extension.len
+ && strncmp(last - extensions[j].extension.len,
+ extensions[j].extension.s,
+ extensions[j].extension.len) == 0) {
-+ color = &extensions[j].color;
++ colorp = &extensions[j].color;
break;
}
}
++++++ tcsh-6.18.00-history-file-locking.patch -> tcsh-6.18.03-history-file-locking.patch ++++++
--- /work/SRC/openSUSE:Factory/tcsh/tcsh-6.18.00-history-file-locking.patch 2015-01-23 16:19:33.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.tcsh.new/tcsh-6.18.03-history-file-locking.patch 2015-05-07 09:21:08.000000000 +0200
@@ -1,4 +1,4 @@
-From f813180f2fc1d682dd097e4a05ef4d15000204ad Mon Sep 17 00:00:00 2001
+Based on f813180f2fc1d682dd097e4a05ef4d15000204ad Mon Sep 17 00:00:00 2001
From: Roman Kollar
Date: Mon, 29 Oct 2012 17:52:52 +0100
Subject: [PATCH] Add .history file locking - shared readers, exclusive writer
@@ -14,11 +14,19 @@
Changes by Fridolin Pokorny
---
+ sh.c | 102 +++++++++++++++++++++++++++++++++++++--------------
+ sh.decls.h | 4 +-
+ sh.dol.c | 2 -
+ sh.err.c | 16 ++++++++
+ sh.h | 18 +++++++++
+ sh.hist.c | 122 ++++++++++++++++++++++++++++++-------------------------------
+ sh.lex.c | 8 ++--
+ sh.sem.c | 2 -
+ 8 files changed, 178 insertions(+), 96 deletions(-)
-diff -upr tcsh-6.18.00_orig/sh.c tcsh-6.18.00_work/sh.c
---- tcsh-6.18.00_orig/sh.c 2013-03-28 10:06:17.969859477 +0100
-+++ tcsh-6.18.00_work/sh.c 2013-03-28 10:07:21.155082032 +0100
-@@ -140,6 +140,7 @@ struct saved_state {
+--- sh.c
++++ sh.c 2015-05-04 13:53:54.000000000 +0000
+@@ -141,6 +141,7 @@ struct saved_state {
int cantell;
struct Bin B;
int justpr;
@@ -26,7 +34,7 @@
};
static int srccat (Char *, Char *);
-@@ -1369,7 +1370,7 @@ main(int argc, char **argv)
+@@ -1378,7 +1379,7 @@ main(int argc, char **argv)
/*
* Source history before .login so that it is available in .login
*/
@@ -35,7 +43,7 @@
#ifndef LOGINFIRST
if (loginsh)
(void) srccat(varval(STRhome), STRsldotlogin);
-@@ -1492,7 +1493,7 @@ static int
+@@ -1501,7 +1502,7 @@ static int
srccat(Char *cp, Char *dp)
{
if (cp[0] == '/' && cp[1] == '\0')
@@ -44,7 +52,7 @@
else {
Char *ep;
char *ptr;
-@@ -1508,7 +1509,7 @@ srccat(Char *cp, Char *dp)
+@@ -1517,7 +1518,7 @@ srccat(Char *cp, Char *dp)
cleanup_push(ep, xfree);
ptr = short2str(ep);
@@ -53,7 +61,7 @@
cleanup_until(ep);
return rv;
}
-@@ -1522,20 +1523,49 @@ static int
+@@ -1531,20 +1532,49 @@ static int
#else
int
#endif /*WINNT_NATIVE*/
@@ -61,7 +69,8 @@
+srcfile(const char *f, int onlyown, int flg, Char **av)
{
- int unit;
--
++ int *unit;
+
- if ((unit = xopen(f, O_RDONLY|O_LARGEFILE)) == -1)
- return 0;
- cleanup_push(&unit, open_cleanup);
@@ -72,8 +81,6 @@
- (void) close_on_exec(unit, 1);
- srcunit(unit, onlyown, flag, av);
- return 1;
-+ int *unit;
-+
+ unit = xmalloc(sizeof(*unit));
+ cleanup_push(unit, xfree);
+ *unit = xopen(f, O_LARGEFILE |
@@ -116,7 +123,7 @@
}
-@@ -1544,7 +1574,7 @@ srcfile(const char *f, int onlyown, int
+@@ -1553,7 +1583,7 @@ srcfile(const char *f, int onlyown, int
* fd.
*/
static void
@@ -125,7 +132,7 @@
{
st->insource = insource;
st->SHIN = SHIN;
-@@ -1593,10 +1623,14 @@ st_save(struct saved_state *st, int unit
+@@ -1602,10 +1632,14 @@ st_save(struct saved_state *st, int unit
st->onelflg = onelflg;
st->enterhist = enterhist;
st->justpr = justpr;
@@ -141,7 +148,7 @@
st->cantell = cantell;
cpybin(st->B, B);
-@@ -1635,7 +1669,7 @@ st_save(struct saved_state *st, int unit
+@@ -1644,7 +1678,7 @@ st_save(struct saved_state *st, int unit
evalp = 0;
alvec = al;
alvecp = 0;
@@ -150,7 +157,7 @@
if (enterhist)
HIST = '\0';
insource = 1;
-@@ -1668,7 +1702,8 @@ st_restore(void *xst)
+@@ -1677,7 +1711,8 @@ st_restore(void *xst)
}
cpybin(B, st->B);
@@ -160,7 +167,7 @@
insource = st->insource;
SHIN = st->SHIN;
-@@ -1704,7 +1739,7 @@ st_restore(void *xst)
+@@ -1713,7 +1748,7 @@ st_restore(void *xst)
* we don't chance it. This occurs on ".cshrc"s and the like.
*/
static void
@@ -169,7 +176,7 @@
{
struct saved_state st;
-@@ -1730,7 +1765,7 @@ srcunit(int unit, int onlyown, int hflg,
+@@ -1739,7 +1774,7 @@ srcunit(int unit, int onlyown, int hflg,
}
/* Save the current state and move us to a new state */
@@ -178,7 +185,7 @@
/*
* Now if we are allowing commands to be interrupted, we let ourselves be
-@@ -2069,7 +2104,7 @@ process(int catch)
+@@ -2078,7 +2113,7 @@ process(int catch)
* elsewhere...
*/
if (enterhist || (catch && intty && !whyles && !tellwhat && !arun))
@@ -187,7 +194,7 @@
if (Expand && seterr)
Expand = 0;
-@@ -2156,21 +2191,28 @@ process(int catch)
+@@ -2165,21 +2200,28 @@ process(int catch)
void
dosource(Char **t, struct command *c)
{
@@ -219,16 +226,15 @@
}
f = globone(*t++, G_ERROR);
-@@ -2178,9 +2220,16 @@ dosource(Char **t, struct command *c)
- cleanup_push(file, xfree);
+@@ -2188,9 +2230,15 @@ dosource(Char **t, struct command *c)
xfree(f);
t = glob_all_or_error(t);
+ cleanup_push(t, blk_cleanup);
- if ((!srcfile(file, 0, hflg, t)) && (!hflg) && (!bequiet))
+ fd = srcfile(file, 0, (flg | newflg), t);
+ if ((!fd) && (!newflg) && (!bequiet))
stderror(ERR_SYSTEM, file, strerror(errno));
- cleanup_until(file);
-+
+ /* We need to preserve fd and it's cleaning routines on the top of the
+ * cleaning stack. Don't call cleanup_until() but clean it manually. */
+ cleanup_ignore(file);
@@ -238,9 +244,8 @@
}
/*
-diff -upr tcsh-6.18.00_orig/sh.decls.h tcsh-6.18.00_work/sh.decls.h
---- tcsh-6.18.00_orig/sh.decls.h 2013-03-28 10:06:17.988859538 +0100
-+++ tcsh-6.18.00_work/sh.decls.h 2013-03-28 10:06:42.897948590 +0100
+--- sh.decls.h
++++ sh.decls.h 2015-05-04 13:56:16.000000000 +0000
@@ -38,6 +38,7 @@
*/
extern Char *gethdir (const Char *);
@@ -249,7 +254,7 @@
extern void exitstat (void);
extern void goodbye (Char **, struct command *);
extern void importpath (Char *);
-@@ -98,6 +99,7 @@ extern void cleanup_until_mark(void);
+@@ -99,6 +100,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 *);
@@ -257,19 +262,18 @@
extern void opendir_cleanup(void *);
extern void sigint_cleanup(void *);
extern void sigprocmask_cleanup(void *);
-@@ -219,7 +221,7 @@ extern struct Hist *enthist (int, str
+@@ -220,7 +222,7 @@ extern struct Hist *enthist (int, str
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 *);
+ extern void sethistory (int);
- /*
-diff -upr tcsh-6.18.00_orig/sh.dol.c tcsh-6.18.00_work/sh.dol.c
---- tcsh-6.18.00_orig/sh.dol.c 2013-03-28 10:06:17.988859538 +0100
-+++ tcsh-6.18.00_work/sh.dol.c 2013-03-28 10:06:42.898948594 +0100
-@@ -1110,6 +1110,6 @@ again:
+--- sh.dol.c
++++ sh.dol.c 2013-03-28 09:06:43.000000000 +0000
+@@ -1120,6 +1120,6 @@ again:
*obp = 0;
tmp = short2str(obuf);
(void) xwrite(0, tmp, strlen (tmp));
@@ -277,9 +281,8 @@
+ (void) lseek(0, (off_t) 0, SEEK_SET);
cleanup_until(&inheredoc);
}
-diff -upr tcsh-6.18.00_orig/sh.err.c tcsh-6.18.00_work/sh.err.c
---- tcsh-6.18.00_orig/sh.err.c 2013-03-28 10:06:17.972859480 +0100
-+++ tcsh-6.18.00_work/sh.err.c 2013-03-28 10:06:42.824948331 +0100
+--- sh.err.c
++++ sh.err.c 2013-03-28 09:06:43.000000000 +0000
@@ -514,6 +514,22 @@ open_cleanup(void *xptr)
}
@@ -303,9 +306,8 @@
opendir_cleanup(void *xdir)
{
DIR *dir;
-diff -upr tcsh-6.18.00_orig/sh.h tcsh-6.18.00_work/sh.h
---- tcsh-6.18.00_orig/sh.h 2013-03-28 10:06:17.988859538 +0100
-+++ tcsh-6.18.00_work/sh.h 2013-03-28 10:06:42.899948597 +0100
+--- sh.h
++++ sh.h 2013-03-28 09:06:43.000000000 +0000
@@ -50,6 +50,24 @@
# include
#endif
@@ -331,10 +333,18 @@
#if !defined(HAVE_STDINT_H) && !defined(HAVE_INTTYPES_H) && !defined(WINNT_NATIVE)
typedef unsigned long intptr_t;
#endif
-diff -upr tcsh-6.18.00_orig/sh.hist.c tcsh-6.18.00_work/sh.hist.c
---- tcsh-6.18.00_orig/sh.hist.c 2013-03-28 10:06:17.967859465 +0100
-+++ tcsh-6.18.00_work/sh.hist.c 2013-03-28 10:06:42.815948309 +0100
-@@ -44,14 +44,6 @@ Char HistLit = 0;
+--- sh.hist.c
++++ sh.hist.c 2015-05-04 14:51:57.995328370 +0000
+@@ -36,6 +36,8 @@ RCSID("$tcsh: sh.hist.c,v 3.60 2015/02/2
+
+ #include /* for rename(2), grr. */
+ #include
++#include
++#include
+ #include "tc.h"
+ #include "dotlock.h"
+
+@@ -46,14 +48,6 @@ Char HistLit = 0;
static int heq (const struct wordent *, const struct wordent *);
static void hfree (struct Hist *);
@@ -349,34 +359,32 @@
/*
* C shell
*/
-@@ -143,7 +135,7 @@ discardExcess(int histlen)
+@@ -145,13 +139,13 @@ discardExcess(int hlen)
void
savehist(
struct wordent *sp,
- int mflg) /* true if -m (merge) specified */
-+ int flg)
++ int flg) /* true if -m (merge) specified */
{
- int histlen = 0;
- Char *cp;
-@@ -160,7 +152,7 @@ savehist(
- histlen = histlen * 10 + *cp++ - '0';
- }
+ /* throw away null lines */
+ if (sp && sp->next->word[0] == '\n')
+ return;
if (sp)
- (void) enthist(++eventno, sp, 1, mflg, histlen);
+ (void) enthist(++eventno, sp, 1, flg, histlen);
discardExcess(histlen);
}
-@@ -933,7 +925,7 @@ enthist(
+@@ -923,7 +917,7 @@ enthist(
int event, /* newly incremented global eventno */
struct wordent *lp,
int docopy,
- int mflg, /* true if merge requested */
-+ int flg,
- int histlen) /* -1 if unknown */
++ int flg, /* true if merge requested */
+ int hlen) /* -1 if unknown */
{
struct Hist *p = NULL, *pp = &Histlist, *pTime = NULL;
-@@ -953,7 +945,7 @@ enthist(
+@@ -943,7 +937,7 @@ enthist(
Htime = p->Htime;
/* If we are merging, and the old entry is at the place we want
* to insert the new entry, then remember the place. */
@@ -385,7 +393,7 @@
pTime = p->Hprev;
if (!fastMergeErase)
renumberHist(p); /* Reset Href of subsequent entries */
-@@ -1012,7 +1004,7 @@ enthist(
+@@ -1002,7 +996,7 @@ enthist(
/* The head of history list is the default insertion point.
If merging, advance insertion point, in pp, according to Htime. */
/* XXX -- In histdup=all, Htime values can be non-monotonic. */
@@ -394,19 +402,21 @@
pp = mergeInsertionPoint(np, pTime);
for (p = pp->Hnext; p && p->Htime == np->Htime; pp = p, p = p->Hnext) {
if (heq(&p->Hlex, &np->Hlex)) {
-@@ -1051,9 +1043,9 @@ hfree(struct Hist *hp)
+@@ -1041,11 +1035,11 @@ hfree(struct Hist *hp)
}
PG_STATIC void
-phist(struct Hist *hp, int hflg)
+phist(struct Hist *hp, int flg)
{
+ if (hp->Href < 0)
+ return;
- if (hflg & HIST_ONLY) {
+ if (flg & HIST_ONLY) {
int old_output_raw;
/*
-@@ -1065,7 +1057,7 @@ phist(struct Hist *hp, int hflg)
+@@ -1057,7 +1051,7 @@ phist(struct Hist *hp, int hflg)
old_output_raw = output_raw;
output_raw = 1;
cleanup_push(&old_output_raw, output_raw_restore);
@@ -415,7 +425,7 @@
/*
* Make file entry with history time in format:
* "+NNNNNNNNNN" (10 digits, left padded with ascii '0')
-@@ -1096,7 +1088,7 @@ phist(struct Hist *hp, int hflg)
+@@ -1088,7 +1082,7 @@ phist(struct Hist *hp, int hflg)
}
PG_STATIC void
@@ -424,7 +434,7 @@
{
struct Hist *hp;
if (setintr) {
-@@ -1105,7 +1097,7 @@ dophist(int n, int hflg)
+@@ -1097,7 +1091,7 @@ dophist(int n, int hflg)
pintr_push_enable(&old_pintr_disabled);
cleanup_until(&old_pintr_disabled);
}
@@ -433,7 +443,7 @@
/* Since the history list is stored most recent first, non-reversing
* print needs to print (backwards) up the list. */
if ((unsigned)n >= histCount)
-@@ -1119,10 +1111,10 @@ dophist(int n, int hflg)
+@@ -1111,10 +1105,10 @@ dophist(int n, int hflg)
if (hp == NULL)
return; /* nothing to print */
for (; hp != &Histlist; hp = hp->Hprev)
@@ -446,7 +456,7 @@
}
}
-@@ -1130,7 +1122,7 @@ dophist(int n, int hflg)
+@@ -1122,7 +1116,7 @@ dophist(int n, int hflg)
void
dohist(Char **vp, struct command *c)
{
@@ -455,7 +465,7 @@
USE(c);
if (getn(varval(STRhistory)) == 0)
-@@ -1141,40 +1133,40 @@ dohist(Char **vp, struct command *c)
+@@ -1133,40 +1127,40 @@ dohist(Char **vp, struct command *c)
while (*++vp2)
switch (*vp2) {
case 'c':
@@ -507,7 +517,7 @@
rechist(*vp, 1);
else {
if (*vp)
-@@ -1182,7 +1174,7 @@ dohist(Char **vp, struct command *c)
+@@ -1174,7 +1168,7 @@ dohist(Char **vp, struct command *c)
else {
n = getn(varval(STRhistory));
}
@@ -516,83 +526,75 @@
}
}
-@@ -1224,8 +1216,8 @@ fmthist(int fmt, ptr_t ptr)
+@@ -1222,10 +1216,9 @@ dotlock_cleanup(void* lockpath)
void
rechist(Char *fname, int ref)
{
-- Char *snum;
+- Char *snum, *rs;
- int fp, ftmp, oldidfds;
-+ Char *snum;
-+ int fd = -1, ftmp, oldidfds;
++ Char *snum;
++ int fd = -1, ftmp, oldidfds;
struct varent *shist;
+- char path[MAXPATHLEN];
+ struct stat st;
static Char *dumphist[] = {STRhistory, STRmhT, 0, 0};
-@@ -1255,15 +1247,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.
-- * Currently the automatic merge can only succeed when the shells
-- * nicely quit one after another.
-- *
-- * 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) .
-+ */
-+
- /*
- * We need the didfds stuff before loadhist otherwise
- * exec in a script will fail to print if merge is set.
-@@ -1271,32 +1260,42 @@ 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))
+@@ -1294,46 +1287,49 @@ rechist(Char *fname, int ref)
+ cleanup_push(lockpath, dotlock_cleanup);
+ #endif
+ }
- loadhist(fname, 1);
++ /* Read .history file, leave it's fd open for writing. */
++ fd = loadhist(fname, HIST_MERGE|HIST_FILE_WRLCK|HIST_FILE_OPEN|HIST_FILE_LOCK);
++ if (fd > 0) {
++ /* Truncate the .history file. */
++ (void) ftruncate(fd, 0);
++ (void) lseek(fd, (off_t) 0, SEEK_SET);
++ }
+ }
+ }
+- rs = randsuf();
+- xsnprintf(path, sizeof(path), "%S.%S", fname, rs);
+- xfree(rs);
-
-- fp = xcreat(short2str(fname), 0600);
-- cleanup_until(fname);
+- fp = xcreat(path, 0600);
- if (fp == -1) {
- didfds = oldidfds;
+- cleanup_until(fname);
- return;
-+ if (((shist = adrof(STRsavehist)) != NULL && shist->vec != NULL) &&
-+ (shist->vec[1] && eq(shist->vec[1], STRmerge))) {
-+ /* Read .history file, leave it's fd open for writing. */
-+ fd = loadhist(fname, HIST_MERGE|HIST_FILE_WRLCK|HIST_FILE_OPEN|HIST_FILE_LOCK);
-+ if (fd > 0) {
-+ /* Truncate the .history file. */
-+ (void) ftruncate(fd, 0);
-+ (void) lseek(fd, (off_t) 0, SEEK_SET);
-+ }
-+ }
+ if (fd <= 0) {
-+ /* Open .history file for writing (if not open yet). */
++ /* 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;
}
+ /* Try to preserve ownership and permissions of the original history file */
+ #ifndef WINNT_NATIVE
+ if (stat(short2str(fname), &st) != -1) {
+- TCSH_IGNORE(fchown(fp, st.st_uid, st.st_gid));
+- TCSH_IGNORE(fchmod(fp, st.st_mode));
++ TCSH_IGNORE(fchown(fd, st.st_uid, st.st_gid));
++ TCSH_IGNORE(fchmod(fd, st.st_mode));
+ }
+ #else
+ UNREFERENCED_PARAMETER(st);
+ #endif
- ftmp = SHOUT;
- SHOUT = fp;
- dumphist[2] = snum;
- dohist(dumphist, NULL);
- xclose(fp);
- SHOUT = ftmp;
++ if (fd != -1) {
++ ftmp = SHOUT;
++ SHOUT = fd;
++ dumphist[2] = snum;
++ dohist(dumphist, NULL);
++ SHOUT = ftmp;
++ }
didfds = oldidfds;
-+ cleanup_until(fname);
+- (void)rename(path, short2str(fname));
+ cleanup_until(fname);
}
@@ -609,7 +611,7 @@
if (fname != NULL)
loadhist_cmd[2] = fname;
-@@ -1305,15 +1304,17 @@ loadhist(Char *fname, int mflg)
+@@ -1342,17 +1338,19 @@ loadhist(Char *fname, int mflg)
else
loadhist_cmd[2] = STRtildothist;
@@ -631,9 +633,10 @@
+
+ return fd; /* Valid/invalid file descriptor (>FSAVE, -1). Zero on error. */
}
-diff -upr tcsh-6.18.00_orig/sh.lex.c tcsh-6.18.00_work/sh.lex.c
---- tcsh-6.18.00_orig/sh.lex.c 2013-03-28 10:06:17.971859478 +0100
-+++ tcsh-6.18.00_work/sh.lex.c 2013-03-28 10:06:42.820948316 +0100
+
+ void
+--- sh.lex.c
++++ sh.lex.c 2013-03-28 09:06:43.000000000 +0000
@@ -1595,7 +1595,7 @@ wide_read(int fildes, Char *buf, size_t
/* Throwing away possible partial multibyte characters on error if the
stream is not seekable */
@@ -670,10 +673,9 @@
return;
fbuf = xcalloc(2, sizeof(Char **));
fblocks = 1;
-diff -upr tcsh-6.18.00_orig/sh.sem.c tcsh-6.18.00_work/sh.sem.c
---- tcsh-6.18.00_orig/sh.sem.c 2013-03-28 10:06:17.970859477 +0100
-+++ tcsh-6.18.00_work/sh.sem.c 2013-03-28 10:06:42.819948308 +0100
-@@ -892,7 +892,7 @@ doio(struct command *t, int *pipein, int
+--- sh.sem.c
++++ sh.sem.c 2013-03-28 09:06:43.000000000 +0000
+@@ -903,7 +903,7 @@ doio(struct command *t, int *pipein, int
fd = xopen(tmp, O_WRONLY|O_APPEND|O_LARGEFILE);
#else /* !O_APPEND */
fd = xopen(tmp, O_WRONLY|O_LARGEFILE);
++++++ tcsh-6.18.01-history-merge.dif -> tcsh-6.18.03-history-merge.dif ++++++
--- /work/SRC/openSUSE:Factory/tcsh/tcsh-6.18.01-history-merge.dif 2015-01-23 16:19:33.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.tcsh.new/tcsh-6.18.03-history-merge.dif 2015-05-07 09:21:08.000000000 +0200
@@ -1,34 +1,38 @@
+---
+ sh.hist.c | 21 ++++++++++++++++-----
+ 1 file changed, 16 insertions(+), 5 deletions(-)
+
--- sh.hist.c
-+++ sh.hist.c 2013-10-15 17:04:45.518796367 +0000
-@@ -107,7 +107,7 @@ hremove(struct Hist *hp)
++++ sh.hist.c 2015-05-05 07:16:26.382084939 +0000
+@@ -103,7 +103,7 @@ hremove(struct Hist *hp)
/* Prune length of history list to specified size by history variable. */
PG_STATIC void
--discardExcess(int histlen)
-+discardExcess(int histlen, int flg)
+-discardExcess(int hlen)
++discardExcess(int hlen, int flg)
{
struct Hist *hp, *np;
if (histTail == NULL) {
-@@ -124,7 +124,7 @@ discardExcess(int histlen)
- break;
- }
- while (histCount > (unsigned)histlen && (np = histTail) != &Histlist) {
-- if (eventno - np->Href >= histlen || histlen == 0)
-+ if ((eventno - np->Href >= histlen || histlen == 0) && ! (flg & HIST_MERGE))
+@@ -114,7 +114,7 @@ discardExcess(int hlen)
+ * the list is still too long scan the whole list as before. But only do a
+ * full scan if the list is more than 6% (1/16th) too long. */
+ while (histCount > (unsigned)hlen && (np = Histlist.Hnext)) {
+- if (eventno - np->Href >= hlen || hlen == 0)
++ if ((eventno - np->Href >= hlen || hlen == 0) && ! (flg & HIST_MERGE))
hremove(np), hfree(np);
else
break;
-@@ -133,7 +133,7 @@ discardExcess(int histlen)
+@@ -129,7 +129,7 @@ discardExcess(int hlen)
return; /* don't bother doing the full scan */
- for (hp = &Histlist; histCount > (unsigned)histlen &&
+ for (hp = &Histlist; histCount > (unsigned)hlen &&
(np = hp->Hnext) != NULL;)
-- if (eventno - np->Href >= histlen || histlen == 0)
-+ if ((eventno - np->Href >= histlen || histlen == 0) || flg & HIST_MERGE)
+- if (eventno - np->Href >= hlen || hlen == 0)
++ if ((eventno - np->Href >= hlen || hlen == 0) || flg & HIST_MERGE)
hremove(np), hfree(np);
else
hp = np;
-@@ -161,7 +161,7 @@ savehist(
- }
+@@ -146,7 +146,7 @@ savehist(
+ return;
if (sp)
(void) enthist(++eventno, sp, 1, flg, histlen);
- discardExcess(histlen);
@@ -36,3 +40,21 @@
}
#define USE_JENKINS_HASH 1
+@@ -1357,5 +1357,16 @@ void
+ sethistory(int n)
+ {
+ histlen = n;
+- discardExcess(histlen);
++ int merge = 0;
++ struct varent *shist;
++ if ((shist = adrof(STRsavehist)) != NULL && shist->vec != NULL) {
++ size_t i;
++ for (i = 1; shist->vec[i]; i++) {
++ if (eq(shist->vec[i], STRmerge)) {
++ merge = HIST_MERGE;
++ break;
++ }
++ }
++ }
++ discardExcess(histlen, merge);
+ }
++++++ tcsh-6.17.03-colorls.dif -> tcsh-6.18.03.dif ++++++
--- /work/SRC/openSUSE:Factory/tcsh/tcsh-6.17.03-colorls.dif 2011-11-21 12:51:58.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.tcsh.new/tcsh-6.18.03.dif 2015-05-07 09:21:08.000000000 +0200
@@ -1,56 +1,296 @@
---- tw.color.c
-+++ tw.color.c 2010-12-10 16:07:59.000000000 +0000
-@@ -89,6 +89,7 @@ static Variable variables[] = {
- VAR(NOS, "hl", "44;37"), /* Reg file extra hard links, obsolete? */
- VAR(NOS, "mh", "44;37"), /* Reg file extra hard links */
- VAR(NOS, "ca", "30;41"), /* File with capability */
-+ VAR(NOS, "cl", ""), /* CLRTOEOL */
- };
-
- enum FileType {
-@@ -177,7 +178,7 @@ parseLS_COLORS(const Char *value)
- size_t i, len;
- const Char *v; /* pointer in value */
- char *c; /* pointer in colors */
-- Extension *volatile e; /* pointer in extensions */
-+ static Extension *volatile e; /* pointer in extensions */
- jmp_buf_t osetexit;
- size_t omark;
-
-@@ -240,13 +241,10 @@ parseLS_COLORS(const Char *value)
- if ((Char)variables[i].variable[0] == (v[0] & CHAR) &&
- (Char)variables[i].variable[1] == (v[1] & CHAR))
- break;
-- if (i < nvariables) {
-- v += 3;
-+ v += 3;
-+ if (i < nvariables)
- getstring(&c, &v, &variables[i].color, ':');
-- continue;
-- }
-- else
-- stderror(ERR_BADCOLORVAR, v[0], v[1]);
-+ continue;
- }
- break;
+---
+ config/linux | 7 +++++++
+ config_f.h | 13 +++++++++----
+ configure | 2 +-
+ configure.ac | 2 +-
+ glob.h | 3 ++-
+ pathnames.h | 2 +-
+ sh.c | 3 +++
+ sh.h | 2 +-
+ sh.print.c | 8 ++++----
+ tc.alloc.c | 10 ++++++----
+ tc.func.c | 8 ++++++--
+ tc.str.c | 2 +-
+ tc.who.c | 3 +++
+ tcsh.man | 2 +-
+ tw.h | 4 ++++
+ 15 files changed, 50 insertions(+), 21 deletions(-)
+
+--- config/linux
++++ config/linux 2011-11-16 12:15:09.000000000 +0000
+@@ -132,4 +132,11 @@
+ # define POSIX
+ #endif
+
++#if !defined(PW_SHADOW)
++# define PW_SHADOW
++#endif
++#if !defined(SuSE)
++# define SuSE
++#endif
++
+ #endif /* _h_config */
+--- config_f.h
++++ config_f.h 2011-11-16 12:17:18.000000000 +0000
+@@ -37,7 +37,7 @@
+ */
+ #ifndef _h_config_f
+ #define _h_config_f
+-
++#include
+ /*
+ * SHORT_STRINGS Use at least 16 bit characters instead of 8 bit chars
+ * This fixes up quoting problems and eases implementation
+@@ -60,7 +60,12 @@
+ /*
+ * LOGINFIRST Source ~/.login before ~/.cshrc
+ */
+-#undef LOGINFIRST
++#define LOGINFIRST
++
++/*
++ * USERLOGINFIRST Source ~/.login before ~/.cshrc
++ */
++#undef USERLOGINFIRST
+
+ /*
+ * VIDEFAULT Make the VI mode editor the default
+@@ -154,7 +159,7 @@
+ * successful, set $REMOTEHOST to the name or address of the
+ * host
+ */
+-#define REMOTEHOST
++#undef REMOTEHOST
+
+ /*
+ * COLOR_LS_F Do you want to use builtin color ls-F ?
+@@ -177,7 +182,7 @@
+ * RCSID This defines if we want rcs strings in the binary or not
+ *
+ */
+-#if !defined(lint) && !defined(SABER) && !defined(__CLCC__)
++#if !defined(lint) && !defined(SABER) && !defined(__CLCC__) && !defined(__linux__)
+ # ifndef __GNUC__
+ # define RCSID(id) static char *rcsid = (id);
+ # else
+--- configure
++++ configure 2011-11-16 10:49:20.000000000 +0000
+@@ -4277,7 +4277,7 @@ return tgetent ();
+ return 0;
+ }
+ _ACEOF
+-for ac_lib in '' termlib termcap curses ncurses; do
++for ac_lib in '' termlib termcap tinfo curses ncurses; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+--- configure.ac
++++ configure.ac 2015-05-04 14:27:52.000000000 +0000
+@@ -309,7 +309,7 @@ fi
+ dnl Checks for libraries
+ AC_SEARCH_LIBS(crypt, crypt)
+ AC_SEARCH_LIBS(getspnam, sec)
+-AC_SEARCH_LIBS(tgetent, termlib termcap curses ncurses)
++AC_SEARCH_LIBS(tgetent, termlib termcap tinfo curses ncurses)
+ AC_SEARCH_LIBS(gethostbyname, nsl)
+ AC_SEARCH_LIBS(connect, socket)
+ AC_SEARCH_LIBS(catgets, catgets)
+--- glob.h
++++ glob.h 2006-04-25 12:58:31.000000000 +0000
+@@ -72,6 +72,7 @@ typedef struct {
+ #define GLOB_NOSYS (-4) /* Implementation does not support function. */
+
+ /* #if !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE) */
++#if (!defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _BSD_SOURCE || defined _GNU_SOURCE)
+ #define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */
+ #define GLOB_BRACE 0x0080 /* Expand braces ala csh. */
+ #define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */
+@@ -84,7 +85,7 @@ typedef struct {
+ #define GLOB_DOT 0x8000 /* don't skip dotfiles (except . and ..) */
+
+ #define GLOB_ABEND GLOB_ABORTED /* source compatibility */
+-/* #endif */
++#endif
+
+ int glob (const char *, int, int (*)(const char *, int), glob_t *);
+ void globfree (glob_t *);
+--- pathnames.h
++++ pathnames.h 2006-04-25 12:58:31.000000000 +0000
+@@ -84,7 +84,7 @@
+ # endif /* !_PATH_DOTLOGIN */
+ #endif /* sgi || OREO || cray || AMIX || CDC */
+
+-#if (defined(_CRAYCOM) || defined(Lynx)) && !defined(_PATH_TCSHELL)
++#if (defined(_CRAYCOM) || defined(Lynx) || defined(linux)) && !defined(_PATH_TCSHELL)
+ # define _PATH_TCSHELL "/bin/tcsh" /* 1st class shell */
+ #endif /* _CRAYCOM && !_PATH_TCSHELL */
+
+--- sh.c
++++ sh.c 2010-12-10 16:10:45.000000000 +0000
+@@ -1365,6 +1365,9 @@ main(int argc, char **argv)
+ setintr = osetintr;
+ parintr = oparintr;
}
-@@ -301,12 +303,13 @@ print_color(const Char *fname, size_t le
- break;
- }
- if (i == nvariables) {
-- for (i = 0; i < nextensions; i++)
-- if (len >= extensions[i].extension.len
-- && strncmp(last - extensions[i].extension.len,
-- extensions[i].extension.s,
-- extensions[i].extension.len) == 0) {
-- color = &extensions[i].color;
-+ int j;
-+ for (j = 0; j < nextensions; j++)
-+ if (len >= extensions[j].extension.len
-+ && strncmp(last - extensions[j].extension.len,
-+ extensions[j].extension.s,
-+ extensions[j].extension.len) == 0) {
-+ color = &extensions[j].color;
- break;
- }
++#ifndef USERLOGINFIRST
++# undef LOGINFIRST
++#endif
+ #ifdef LOGINFIRST
+ if (loginsh)
+ (void) srccat(varval(STRhome), STRsldotlogin);
+--- sh.h
++++ sh.h 2015-05-05 07:20:23.946019208 +0000
+@@ -580,7 +580,7 @@ EXTERN int neednote IZERO; /* Need to
+ EXTERN int noexec IZERO; /* Don't execute, just syntax check */
+ EXTERN int pjobs IZERO; /* want to print jobs if interrupted */
+ EXTERN int setintr IZERO; /* Set interrupts on/off -> Wait intr... */
+-EXTERN int handle_intr IZERO;/* Are we currently handling an interrupt? */
++EXTERN int handle_interrupt IZERO;/* Are we currently handling an interrupt? */
+ EXTERN int havhash IZERO; /* path hashing is available */
+ EXTERN int editing IZERO; /* doing filename expansion and line editing */
+ EXTERN int noediting IZERO; /* initial $term defaulted to noedit */
+--- sh.print.c
++++ sh.print.c 2015-05-05 07:21:25.381518880 +0000
+@@ -231,13 +231,13 @@ flush(void)
+ return;
+ if (GettingInput && !Tty_raw_mode && linp < &linbuf[sizeof linbuf - 10])
+ return;
+- if (handle_intr)
++ if (handle_interrupt)
+ exitset = 1;
+
+ if (interrupted) {
+ interrupted = 0;
+ linp = linbuf; /* avoid recursion as stderror calls flush */
+- if (handle_intr)
++ if (handle_interrupt)
+ fixerror();
+ else
+ stderror(ERR_SILENT);
+@@ -298,11 +298,11 @@ flush(void)
+ case EDQUOT:
+ #endif
+ /* Nothing to do, but die */
+- if (handle_intr == 0)
++ if (handle_interrupt == 0)
+ xexit(1);
+ /*FALLTHROUGH*/
+ default:
+- if (handle_intr)
++ if (handle_interrupt)
+ fixerror();
+ else
+ stderror(ERR_SILENT);
+--- tc.alloc.c
++++ tc.alloc.c 2015-05-04 14:29:30.000000000 +0000
+@@ -514,7 +514,7 @@ smalloc(size_t n)
+ {
+ ptr_t ptr;
+
+- n = n ? n : 1;
++ n = n ? n+1 : 1;
+
+ #ifdef USE_SBRK
+ if (membot == NULL)
+@@ -537,7 +537,7 @@ srealloc(ptr_t p, size_t n)
+ {
+ ptr_t ptr;
+
+- n = n ? n : 1;
++ n = n ? n+1 : 1;
+
+ #ifdef USE_SBRK
+ if (membot == NULL)
+@@ -561,7 +561,7 @@ scalloc(size_t s, size_t n)
+ ptr_t ptr;
+
+ n *= s;
+- n = n ? n : 1;
++ n = n ? n+1 : 1;
+
+ #ifdef USE_SBRK
+ if (membot == NULL)
+@@ -586,8 +586,10 @@ scalloc(size_t s, size_t n)
+ void
+ sfree(ptr_t p)
+ {
+- if (p && !dont_free)
++ if (p && !dont_free) {
+ free(p);
++ p = (ptr_t)NULL;
++ }
+ }
+
+ #endif /* SYSMALLOC */
+--- tc.func.c
++++ tc.func.c 2007-07-13 11:15:03.000000000 +0000
+@@ -714,9 +714,13 @@ auto_lock(void)
+ handle_pending_signals();
+ errno = 0;
}
+- if (spw != NULL) /* shadowed passwd */
++ if (spw != NULL) /* shadowed passwd */
+ srpp = spw->sp_pwdp;
++ else
++ srpp = pw->pw_passwd; /* nis extended passwd? */
+ }
++ endspent();
++ endpwent();
+
+ #else
+
+@@ -1933,7 +1937,7 @@ getremotehost(int dest_fd)
+ * have not caught up yet.
+ */
+ addr.s_addr = inet_addr(name);
+- if (addr.s_addr != (unsigned int)~0)
++ if (addr.s_addr != ~0U)
+ host = name;
+ else {
+ if (sptr != name) {
+--- tc.str.c
++++ tc.str.c 2006-04-25 12:58:31.000000000 +0000
+@@ -342,7 +342,7 @@ s_strlen(const Char *str)
+ {
+ size_t n;
+
+- for (n = 0; *str++; n++)
++ for (n = 0; str && *str; n++, str++)
+ continue;
+ return (n);
+ }
+--- tc.who.c
++++ tc.who.c 2012-01-16 09:55:14.000000000 +0000
+@@ -280,6 +280,9 @@ watch_login(int force)
+ }
+ stlast = sta.st_mtime;
+ #if defined(HAVE_GETUTENT) || defined(HAVE_GETUTXENT)
++# ifndef HAVE_UTMPX_H
++ utmpname( _PATH_UTMP );
++# endif
+ setutent();
+ #else
+ if ((utmpfd = xopen(TCSH_PATH_UTMP, O_RDONLY|O_LARGEFILE)) < 0) {
+--- tcsh.man
++++ tcsh.man 2006-04-25 12:58:31.000000000 +0000
+@@ -579,7 +579,7 @@ Repeating \fIdabbrev-expand\fR without a
+ changes to the next previous word etc., skipping identical matches
+ much like \fIhistory-search-backward\fR does.
+ .TP 8
+-.B delete-char \fR(not bound)
++.B delete-char \fR(bound to `Del' if using the standard \fI/etc/csh.cshrc\fR)
+ Deletes the character under the cursor.
+ See also \fIdelete-char-or-list-or-eof\fR.
+ .TP 8
+--- tw.h
++++ tw.h 2006-04-25 12:58:31.000000000 +0000
+@@ -33,6 +33,10 @@
+ #ifndef _h_tw
+ #define _h_tw
+
++#ifndef _h_sh
++# include "sh.h"
++#endif
++
+ #define TW_PATH 0x1000
+ #define TW_ZERO 0x0fff
+
++++++ tcsh-6.18.01.tar.gz -> tcsh-6.18.04.tar.gz ++++++
++++ 11675 lines of diff (skipped)