From 86ae90bc1c2866b1b10a326d4cdbdb8b02a9f9a9 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Sun, 11 Jul 2004 22:53:01 +0000 Subject: 20149: improve prompt-reset code 20150: commit ancient memory leak fix(?) in completion --- Src/Zle/compresult.c | 3 +++ Src/Zle/zle_main.c | 17 +++++++++-------- Src/init.c | 6 +++--- Src/input.c | 13 +++++++------ Src/loop.c | 2 +- Src/zsh.h | 2 +- 6 files changed, 24 insertions(+), 19 deletions(-) (limited to 'Src') diff --git a/Src/Zle/compresult.c b/Src/Zle/compresult.c index 83de2bd28..05f632d92 100644 --- a/Src/Zle/compresult.c +++ b/Src/Zle/compresult.c @@ -1768,6 +1768,9 @@ calclist(int showall) g->width += (max - (g->width * g->cols - CM_SPACE)) / g->cols; } } + else + for (g = amatches; g; g = g->next) + zfree(g->widths, 0); listdat.valid = 1; listdat.hidden = hidden; listdat.nlist = nlist; diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c index 3f13c8af3..765f4dfbe 100644 --- a/Src/Zle/zle_main.c +++ b/Src/Zle/zle_main.c @@ -150,7 +150,7 @@ int kungetct; /**/ mod_export char *zlenoargs[1] = { NULL }; -static char *raw_lp, *raw_rp; +static char **raw_lp, **raw_rp; #ifdef FIONREAD static int delayzsetterm; @@ -742,7 +742,7 @@ zlecore(void) /**/ unsigned char * -zleread(char *lp, char *rp, int flags, int context) +zleread(char **lp, char **rp, int flags, int context) { unsigned char *s; int old_errno = errno; @@ -761,7 +761,8 @@ zleread(char *lp, char *rp, int flags, int context) char *pptbuf; int pptlen; - pptbuf = unmetafy(promptexpand(lp, 0, NULL, NULL), &pptlen); + pptbuf = unmetafy(promptexpand(lp ? *lp : NULL, 0, NULL, NULL), + &pptlen); write(2, (WRITE_ARG_2_T)pptbuf, pptlen); free(pptbuf); return (unsigned char *)shingetline(); @@ -788,10 +789,10 @@ zleread(char *lp, char *rp, int flags, int context) eofsent = 0; resetneeded = 0; raw_lp = lp; - lpromptbuf = promptexpand(lp, 1, NULL, NULL); + lpromptbuf = promptexpand(lp ? *lp : NULL, 1, NULL, NULL); pmpt_attr = txtchange; raw_rp = rp; - rpromptbuf = promptexpand(rp, 1, NULL, NULL); + rpromptbuf = promptexpand(rp ? *rp : NULL, 1, NULL, NULL); rpmpt_attr = txtchange; free_prepostdisplay(); @@ -1169,7 +1170,7 @@ bin_vared(char *name, char **args, Options ops, UNUSED(int func)) if (OPT_ISSET(ops,'h')) hbegin(2); isfirstln = OPT_ISSET(ops,'e'); - t = (char *) zleread(p1, p2, OPT_ISSET(ops,'h') ? ZLRF_HISTORY : 0, + t = (char *) zleread(&p1, &p2, OPT_ISSET(ops,'h') ? ZLRF_HISTORY : 0, ZLCON_VARED); if (OPT_ISSET(ops,'h')) hend(NULL); @@ -1315,9 +1316,9 @@ void reexpandprompt(void) { free(lpromptbuf); - lpromptbuf = promptexpand(raw_lp, 1, NULL, NULL); + lpromptbuf = promptexpand(raw_lp ? *raw_lp : NULL, 1, NULL, NULL); free(rpromptbuf); - rpromptbuf = promptexpand(raw_rp, 1, NULL, NULL); + rpromptbuf = promptexpand(raw_rp ? *raw_rp : NULL, 1, NULL, NULL); } /**/ diff --git a/Src/init.c b/Src/init.c index 60e7d3609..ef101069c 100644 --- a/Src/init.c +++ b/Src/init.c @@ -1148,7 +1148,7 @@ mod_export ZleVoidIntFn zlesetkeymapptr = noop_function_int; /**/ unsigned char * -autoload_zleread(char *lp, char *rp, int ha, int con) +autoload_zleread(char **lp, char **rp, int ha, int con) { zlereadptr = fallback_zleread; if (load_module("zsh/zle")) @@ -1158,12 +1158,12 @@ autoload_zleread(char *lp, char *rp, int ha, int con) /**/ mod_export unsigned char * -fallback_zleread(char *lp, UNUSED(char *rp), UNUSED(int ha), UNUSED(int con)) +fallback_zleread(char **lp, UNUSED(char **rp), UNUSED(int ha), UNUSED(int con)) { char *pptbuf; int pptlen; - pptbuf = unmetafy(promptexpand(lp, 0, NULL, NULL), &pptlen); + pptbuf = unmetafy(promptexpand(lp ? *lp : NULL, 0, NULL, NULL), &pptlen); write(2, (WRITE_ARG_2_T)pptbuf, pptlen); free(pptbuf); diff --git a/Src/input.c b/Src/input.c index c07583781..739c7cf42 100644 --- a/Src/input.c +++ b/Src/input.c @@ -222,21 +222,21 @@ ingetc(void) static int inputline(void) { - char *ingetcline, *ingetcpmptl = NULL, *ingetcpmptr = NULL; + char *ingetcline, **ingetcpmptl = NULL, **ingetcpmptr = NULL; int context = ZLCON_LINE_START; /* If reading code interactively, work out the prompts. */ if (interact && isset(SHINSTDIN)) { if (!isfirstln) { - ingetcpmptl = prompt2; + ingetcpmptl = &prompt2; if (rprompt2) - ingetcpmptr = rprompt2; + ingetcpmptr = &rprompt2; context = ZLCON_LINE_CONT; } else { - ingetcpmptl = prompt; + ingetcpmptl = &prompt; if (rprompt) - ingetcpmptr = rprompt; + ingetcpmptr = &rprompt; } } if (!(interact && isset(SHINSTDIN) && SHTTY != -1 && isset(USEZLE))) { @@ -255,7 +255,8 @@ inputline(void) */ char *pptbuf; int pptlen; - pptbuf = unmetafy(promptexpand(ingetcpmptl, 0, NULL, NULL), &pptlen); + pptbuf = unmetafy(promptexpand(ingetcpmptl ? *ingetcpmptl : NULL, + 0, NULL, NULL), &pptlen); write(2, (WRITE_ARG_2_T)pptbuf, pptlen); free(pptbuf); } diff --git a/Src/loop.c b/Src/loop.c index 4c45c1f78..7e74f1783 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -245,7 +245,7 @@ execselect(Estate state, UNUSED(int do_exec)) int oef = errflag; isfirstln = 1; - str = (char *)zleread(prompt3, NULL, 0, ZLCON_SELECT); + str = (char *)zleread(&prompt3, NULL, 0, ZLCON_SELECT); if (errflag) str = NULL; errflag = oef; diff --git a/Src/zsh.h b/Src/zsh.h index c64632f4e..1501fdf8e 100644 --- a/Src/zsh.h +++ b/Src/zsh.h @@ -1800,7 +1800,7 @@ typedef int (*CompctlReadFn) _((char *, char **, Options, char *)); typedef void (*ZleVoidFn) _((void)); typedef void (*ZleVoidIntFn) _((int)); -typedef unsigned char * (*ZleReadFn) _((char *, char *, int, int)); +typedef unsigned char * (*ZleReadFn) _((char **, char **, int, int)); /***************************************/ /* Hooks in core. */ -- cgit 1.4.1