diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2003-05-14 10:16:01 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2003-05-14 10:16:01 +0000 |
commit | 2b744cb21d87de89495d2e66843946008c98f556 (patch) | |
tree | 0e682a12e00403186d59f91634283d78366acdf0 /Src | |
parent | da74eb63387aa8560eab844e8315f0d135c1c965 (diff) | |
download | zsh-2b744cb21d87de89495d2e66843946008c98f556.tar.gz zsh-2b744cb21d87de89495d2e66843946008c98f556.tar.xz zsh-2b744cb21d87de89495d2e66843946008c98f556.zip |
18513: Work around crash on resize in menu selection
Diffstat (limited to 'Src')
-rw-r--r-- | Src/Zle/complist.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c index 5190511bf..ee68a6726 100644 --- a/Src/Zle/complist.c +++ b/Src/Zle/complist.c @@ -395,6 +395,7 @@ static int mnew, mlastcols, mlastlines, mhasstat, mfirstl, mlastm; static int mlprinted, molbeg = -2, mocol = 0, moline = 0, mstatprinted; static char *mstatus, *mlistp; static Cmatch **mtab, **mmtabp; +static int mtab_been_reallocated; static Cmgroup *mgtab, *mgtabp; static struct listcols mcolors; @@ -1657,6 +1658,8 @@ complistmatches(Hookdef dummy, Chdata dat) if (mnew) { int i; + mtab_been_reallocated = 1; + i = columns * listdat.nlines; free(mtab); mtab = (Cmatch **) zalloc(i * sizeof(Cmatch **)); @@ -1934,6 +1937,7 @@ domenuselect(Hookdef dummy, Chdata dat) Cmatch **p; Cmgroup *pg; Thingy cmd; + int do_last_key = 0; Menustack u = NULL; int i = 0, acc = 0, wishcol = 0, setwish = 0, oe = onlyexpl, wasnext = 0; int space, lbeg = 0, step = 1, wrap, pl = nlnct, broken = 0, first = 1; @@ -1999,6 +2003,7 @@ domenuselect(Hookdef dummy, Chdata dat) mlbeg = 0; molbeg = -42; for (;;) { + mtab_been_reallocated = 0; if (mline < 0) { int x, y; Cmatch **p = mtab; @@ -2115,7 +2120,16 @@ domenuselect(Hookdef dummy, Chdata dat) getk: - if (!(cmd = getkeycmd()) || cmd == Th(z_sendbreak)) { + if (!do_last_key) { + cmd = getkeycmd(); + if (mtab_been_reallocated) { + do_last_key = 1; + continue; + } + } + do_last_key = 0; + + if (!cmd || cmd == Th(z_sendbreak)) { zbeep(); molbeg = -1; break; |