commit 6cefb9f21a74428fc818ce655ecf89cdf396ceee
parent d04037760d2f5c9a7eba2e18f8016d81de49511b
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date: Fri, 30 Jun 2006 07:03:42 +0000
in do_browser(), display an error messsage on the statusbar if we try to
move up from "/" via the "Go to Directory" prompt, for consistency
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3699 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
@@ -16,6 +16,9 @@ CVS code -
- Remove unneeded call to blank_edit(). (DLR)
- After entering "..", select the directory we were in before
instead of the first filename in the list, as Pico does. (DLR)
+ - Display an error messsage on the statusbar if we try to move
+ up from "/" via the "Go to Directory" prompt, for consistency.
+ (DLR)
browser_refresh()
- Simplify. (DLR)
- Fix problems where translated versions of "(dir)" could be
diff --git a/src/browser.c b/src/browser.c
@@ -107,7 +107,7 @@ char *do_browser(char *path, DIR *dir)
int i;
size_t fileline;
char *new_path;
- /* Used by the "Go To Directory" prompt. */
+ size_t new_path_len;
/* Compute the line number we're on now, so that we don't divide
* by zero. */
@@ -243,6 +243,7 @@ char *do_browser(char *path, DIR *dir)
ans = mallocstrcpy(ans, "");
new_path = real_dir_from_tilde(answer);
+ new_path_len = strlen(new_path) + 1;
if (new_path[0] != '/') {
new_path = charealloc(new_path, strlen(path) +
@@ -250,6 +251,16 @@ char *do_browser(char *path, DIR *dir)
sprintf(new_path, "%s%s", path, answer);
}
+ if (new_path[new_path_len - 1] == '/')
+ null_at(&new_path, new_path_len - 1);
+
+ /* We can't move up from "/". */
+ if (strcmp(new_path, "/..") == 0) {
+ statusbar(_("Can't move up a directory"));
+ beep();
+ break;
+ }
+
#ifndef DISABLE_OPERATINGDIR
if (check_operating_dir(new_path, FALSE)) {
statusbar(