summaryrefslogtreecommitdiff
path: root/Src
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2004-07-11 22:53:01 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2004-07-11 22:53:01 +0000
commit86ae90bc1c2866b1b10a326d4cdbdb8b02a9f9a9 (patch)
tree0411ce469f4c945ade10a3aca46d1ea1c79e8237 /Src
parentf63b677f53d19553e7f63755fe4575638d64ae86 (diff)
downloadzsh-86ae90bc1c2866b1b10a326d4cdbdb8b02a9f9a9.tar.gz
zsh-86ae90bc1c2866b1b10a326d4cdbdb8b02a9f9a9.zip
20149: improve prompt-reset code
20150: commit ancient memory leak fix(?) in completion
Diffstat (limited to 'Src')
-rw-r--r--Src/Zle/compresult.c3
-rw-r--r--Src/Zle/zle_main.c17
-rw-r--r--Src/init.c6
-rw-r--r--Src/input.c13
-rw-r--r--Src/loop.c2
-rw-r--r--Src/zsh.h2
6 files changed, 24 insertions, 19 deletions
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. */