From 3b8989b0a9c1b2d8a558cd97bf6f2f714639cf81 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Thu, 25 Feb 2016 14:08:47 +0000 Subject: [PATCH] Now putting things in the proper order: setting 'prev_dir' only when we've actually succeeded in changing directory. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5677 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 1 + src/browser.c | 16 +++++++--------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 13422056..700832c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 2016-02-25 Benno Schulenberg * src/browser.c (do_browser): Plug a memory leak by not copying a string twice. This fixes Savannah bug #47206. + * src/browser.c (do_browser): Now put things in the proper order. 2016-02-23 Benno Schulenberg * src/prompt.c (do_statusbar_output, do_statusbar_delete): diff --git a/src/browser.c b/src/browser.c index 5232733c..383adb37 100644 --- a/src/browser.c +++ b/src/browser.c @@ -318,24 +318,22 @@ char *do_browser(char *path, DIR *dir) * get out. */ retval = mallocstrcpy(NULL, filelist[selected]); break; - } else if (strcmp(tail(filelist[selected]), "..") == 0) - /* We've successfully opened the parent directory, - * save the current directory in prev_dir, so that - * we can easily return to it by hitting Enter. */ - prev_dir = striponedir(filelist[selected]); + } dir = opendir(filelist[selected]); + if (dir == NULL) { - /* We can't open this directory for some reason. - * Complain. */ statusbar(_("Error reading %s: %s"), filelist[selected], strerror(errno)); - free(prev_dir); - prev_dir = NULL; beep(); continue; } + /* If we moved up one level, remember where we came from, so + * this directory can be highlighted and easily reentered. */ + if (strcmp(tail(filelist[selected]), "..") == 0) + prev_dir = striponedir(filelist[selected]); + path = mallocstrcpy(path, filelist[selected]); /* Start over again with the new path value. */ -- 2.39.5