diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/fileio.c | 13 | ||||
-rw-r--r-- | src/w32fns.c | 11 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/fileio.c b/src/fileio.c index 11370279d1b..d460f123a82 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -5789,6 +5789,18 @@ If the underlying system call fails, value is nil. */) (Lisp_Object filename) { Lisp_Object encoded = ENCODE_FILE (Fexpand_file_name (filename, Qnil)); + + /* If the file name has special constructs in it, + call the corresponding file handler. */ + Lisp_Object handler = Ffind_file_name_handler (encoded, Qfile_system_info); + if (!NILP (handler)) + { + Lisp_Object result = call2 (handler, Qfile_system_info, encoded); + if (CONSP (result) || NILP (result)) + return result; + error ("Invalid handler in `file-name-handler-alist'"); + } + struct fs_usage u; if (get_fs_usage (SSDATA (encoded), NULL, &u) != 0) return Qnil; @@ -5870,6 +5882,7 @@ syms_of_fileio (void) DEFSYM (Qwrite_region, "write-region"); DEFSYM (Qverify_visited_file_modtime, "verify-visited-file-modtime"); DEFSYM (Qset_visited_file_modtime, "set-visited-file-modtime"); + DEFSYM (Qfile_system_info, "file-system-info"); /* The symbol bound to coding-system-for-read when insert-file-contents is called for recovering a file. This is not diff --git a/src/w32fns.c b/src/w32fns.c index efbd81b22d9..e3de22d68ab 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -9336,6 +9336,17 @@ If the underlying system call fails, value is nil. */) filename = Fexpand_file_name (filename, Qnil); encoded = ENCODE_FILE (filename); + /* If the file name has special constructs in it, + call the corresponding file handler. */ + Lisp_Object handler = Ffind_file_name_handler (encoded, Qfile_system_info); + if (!NILP (handler)) + { + value = call2 (handler, Qfile_system_info, encoded); + if (CONSP (value) || NILP (value)) + return value; + error ("Invalid handler in `file-name-handler-alist'"); + } + value = Qnil; /* Determining the required information on Windows turns out, sadly, |