diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Src/init.c | 6 |
2 files changed, 8 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index afd3085a6..13bb6d5ec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2007-11-26 Peter Stephenson <pws@csr.com> + * 24120: Src/init.c: memory allocation for termcap strings + was screwy, in particular when terminal couldn't move left. + * c.f. users/12248: Doc/Zsh/.distfiles: zshcalsys.1 was missing from distribution. diff --git a/Src/init.c b/Src/init.c index 55f32079b..bd582ad2b 100644 --- a/Src/init.c +++ b/Src/init.c @@ -598,19 +598,22 @@ init_term(void) if (tccan(TCUP)) termflags &= ~TERM_NOUP; else { + zsfree(tcstr[TCUP]); tcstr[TCUP] = NULL; termflags |= TERM_NOUP; } /* most termcaps don't define "bc" because they use \b. */ if (!tccan(TCBACKSPACE)) { + zsfree(tcstr[TCBACKSPACE]); tcstr[TCBACKSPACE] = ztrdup("\b"); tclen[TCBACKSPACE] = 1; } /* if there's no termcap entry for cursor left, use backspace. */ if (!tccan(TCLEFT)) { - tcstr[TCLEFT] = tcstr[TCBACKSPACE]; + zsfree(tcstr[TCLEFT]); + tcstr[TCLEFT] = ztrdup(tcstr[TCBACKSPACE]); tclen[TCLEFT] = tclen[TCBACKSPACE]; } @@ -629,6 +632,7 @@ init_term(void) /* if there's no termcap entry for clear, use ^L. */ if (!tccan(TCCLEARSCREEN)) { + zsfree(tcstr[TCCLEARSCREEN]); tcstr[TCCLEARSCREEN] = ztrdup("\14"); tclen[TCCLEARSCREEN] = 1; } |