]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix file-name-case-insensitive-p on non-existent files
authorKen Brown <kbrown@cornell.edu>
Fri, 27 Jul 2018 18:24:01 +0000 (14:24 -0400)
committerKen Brown <kbrown@cornell.edu>
Fri, 27 Jul 2018 21:22:23 +0000 (17:22 -0400)
* src/fileio.c (Ffile_name_case_insensitive_p): If the file
doesn't exist, move up the filesystem tree until an existing
directory is found.  Then test that directory for
case-insensitivity.  (Bug#32246)

src/fileio.c

index b92492c93a6e3fac52e4bc54020584e5d76ec127..2dcfb73b0d5888fa93b70ca8e16566e9b03c36eb 100644 (file)
@@ -2296,6 +2296,21 @@ The arg must be a string.  */)
   if (!NILP (handler))
     return call2 (handler, Qfile_name_case_insensitive_p, filename);
 
+  /* If the file doesn't exist, move up the filesystem tree until we
+     reach an existing directory or the root.  */
+  if (NILP (Ffile_exists_p (filename)))
+    {
+      filename = Ffile_name_directory (filename);
+      while (NILP (Ffile_exists_p (filename)))
+       {
+         Lisp_Object newname = expand_and_dir_to_file (filename);
+         /* Avoid infinite loop if the root is reported as non-existing
+            (impossible?).  */
+         if (!NILP (Fstring_equal (newname, filename)))
+           break;
+         filename = newname;
+       }
+    }
   filename = ENCODE_FILE (filename);
   return file_name_case_insensitive_p (SSDATA (filename)) ? Qt : Qnil;
 }