diff --git a/cmd-display-menu.c b/cmd-display-menu.c index 3f26dba2..e1766fc2 100644 --- a/cmd-display-menu.c +++ b/cmd-display-menu.c @@ -370,7 +370,7 @@ cmd_display_menu_exec(struct cmd *self, struct cmdq_item *item) flags |= MENU_NOMOUSE; if (menu_display(menu, flags, starting_choice, item, px, py, tc, lines, style, selected_style, border_style, target, NULL, NULL) != 0) - return (CMD_RETURN_NORMAL); + goto out; return (CMD_RETURN_WAIT); out: diff --git a/grid.c b/grid.c index df5951f6..d4955f96 100644 --- a/grid.c +++ b/grid.c @@ -495,7 +495,7 @@ static void grid_expand_line(struct grid *gd, u_int py, u_int sx, u_int bg) { struct grid_line *gl; - u_int xx, old_cellsize; + u_int xx; gl = &gd->linedata[py]; if (sx <= gl->cellsize) @@ -508,10 +508,13 @@ grid_expand_line(struct grid *gd, u_int py, u_int sx, u_int bg) else if (gd->sx > sx) sx = gd->sx; - old_cellsize = gl->cellsize; - gl->celldata = xrecallocarray(gl->celldata, old_cellsize, sx, + gl->celldata = xreallocarray(gl->celldata, sx, sizeof *gl->celldata); - for (xx = old_cellsize; xx < sx; xx++) + if (gl->cellsize < sx) { + memset(gl->celldata + gl->cellsize, 0, + (sx - gl->cellsize) * sizeof *gl->celldata); + } + for (xx = gl->cellsize; xx < sx; xx++) grid_clear_cell(gd, xx, py, bg); gl->cellsize = sx; }