From b0f5282de2ca98b5995f60579b00726dcaadd17a Mon Sep 17 00:00:00 2001 From: Chris Allegretta Date: Thu, 4 Jan 2001 05:20:23 +0000 Subject: [PATCH] Fix segfault when width == 0 git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@442 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- files.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/files.c b/files.c index fcab7f88..e452966b 100644 --- a/files.c +++ b/files.c @@ -1197,6 +1197,7 @@ char *do_browser(char *inpath) static char *path = NULL; int numents = 0, i = 0, j = 0, kbinput = 0, longest = 0, abort = 0; int col = 0, selected = 0, editline = 0, width = 0, filecols = 0; + int lineno = 0; char **filelist = (char **) NULL; /* If path isn't the same as inpath, we are being passed a new @@ -1231,6 +1232,12 @@ char *do_browser(char *inpath) blank_statusbar(); editline = 0; col = 0; + + /* Compute line number we're on now so we don't divide by zero later */ + if (width == 0) + lineno = selected; + else + lineno = selected / width; switch (kbinput) { case KEY_UP: @@ -1256,31 +1263,32 @@ char *do_browser(char *inpath) case NANO_PREVPAGE_KEY: case NANO_PREVPAGE_FKEY: case KEY_PPAGE: - if ((selected / width) % editwinrows == 0) { + + if (lineno % editwinrows == 0) { if (selected - (editwinrows * width) >= 0) selected -= editwinrows * width; else selected = 0; } else if (selected - (editwinrows + - (selected / width) % editwinrows) * width >= 0) - selected -= (editwinrows + (selected / width) % - editwinrows) * width; + lineno % editwinrows) * width >= 0) + + selected -= (editwinrows + lineno % editwinrows) * width; else selected = 0; break; case NANO_NEXTPAGE_KEY: case NANO_NEXTPAGE_FKEY: case KEY_NPAGE: - if ((selected / width) % editwinrows == 0) { + if (lineno % editwinrows == 0) { if (selected + (editwinrows * width) <= numents - 1) selected += editwinrows * width; else selected = numents - 1; } else if (selected + (editwinrows - - (selected / width) % editwinrows) * width <= numents - 1) - selected += (editwinrows - (selected / width) % editwinrows) * width; + lineno % editwinrows) * width <= numents - 1) + selected += (editwinrows - lineno % editwinrows) * width; else selected = numents - 1; break; -- 2.39.5