From 3b8989b0a9c1b2d8a558cd97bf6f2f714639cf81 Mon Sep 17 00:00:00 2001
From: Benno Schulenberg <bensberg@justemail.net>
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  <bensberg@justemail.net>
 	* 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  <bensberg@justemail.net>
 	* 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