]> git.wh0rd.org Git - nano.git/commitdiff
Being more specific in how a given path is invalid.
authorBenno Schulenberg <bensberg@justemail.net>
Sun, 31 Jan 2016 13:06:06 +0000 (13:06 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Sun, 31 Jan 2016 13:06:06 +0000 (13:06 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5602 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/files.c
src/proto.h

index e3db565b5a86270b4bd77e9f49be34cb1568c714..6872cdc0715a1c95c8aa875fdee4718cce41fe0b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-01-31  Benno Schulenberg  <bensberg@justemail.net>
+       * src/files.c (has_valid_path): Be more specific in how a given path
+       is invalid.  The change was improved by Rishabh Dave.
+
 2016-01-29  Benno Schulenberg  <bensberg@justemail.net>
        * src/files.c (do_insertfile): Do display the buffer when configured
        with only --disable-histories.  This fixes Savannah bug #47011.
index 604c77381d749d6aea1753815430265ad8bf6d73..a7aa1c59ff527792bede215597ff86a6c68e8204 100644 (file)
@@ -38,20 +38,32 @@ bool has_valid_path(const char *filename)
 {
     char *parentdir;
     struct stat parentinfo;
-    bool validity = TRUE;
+    bool validity = FALSE;
 
     if (strrchr(filename, '/') == NULL)
        parentdir = mallocstrcpy(NULL, ".");
     else
        parentdir = dirname(mallocstrcpy(NULL, filename));
 
-    if (stat(parentdir, &parentinfo) == -1 || !S_ISDIR(parentinfo.st_mode)) {
-       statusbar(_("Directory '%s' does not exist"), parentdir);
-       validity = FALSE;
-       beep();
+    if (stat(parentdir, &parentinfo) == -1) {
+       if (errno == ENOENT)
+           statusbar(_("Directory '%s' does not exist"), parentdir);
+       else
+           statusbar(_("Path '%s': %s"), parentdir, strerror(errno));
+    } else if (!S_ISDIR(parentinfo.st_mode)) {
+       statusbar(_("Path '%s' is not a directory"), parentdir);
+    } else {
+       if (access(parentdir, X_OK) == -1)
+           statusbar(_("Path '%s' is not accessible"), parentdir);
+       else
+           validity = TRUE;
     }
 
     free(parentdir);
+
+    if (!validity)
+       beep();
+
     return validity;
 }
 
index 2e342bd36625fef4f8a432ab90b2324aa11ba8f0..f8ca6a8a9f69133b67589762cb4b4f16ccb408c6 100644 (file)
@@ -280,8 +280,7 @@ void do_cut_till_eof(void);
 #endif
 void do_uncut_text(void);
 
-/* All functions in files.c. */
-void verify_path(const char *filename);
+/* Most functions in files.c. */
 void make_new_buffer(void);
 void initialize_buffer_text(void);
 bool open_buffer(const char *filename, bool undoable);