aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorPaul Eggert2019-09-06 14:30:33 -0700
committerPaul Eggert2019-09-06 14:31:38 -0700
commita59839d7556ef85058e09b005f0ff32e59b20ec3 (patch)
tree7e4eb3909246dde8efdcaecd77cfd41e75b93593 /lisp
parent5b117511aa1b5c451773891b505a7098a67f9532 (diff)
downloademacs-a59839d7556ef85058e09b005f0ff32e59b20ec3.tar.gz
emacs-a59839d7556ef85058e09b005f0ff32e59b20ec3.zip
file-truename now uses realpath for local files
This uses fewer syscalls on GNU/Linux and other GNUish platforms. * lisp/files.el (file-truename): Try fileio--truename if there are no handlers. * src/fileio.c: Include stdlib.h, for realpath. (Ffileio__truename): New function.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/files.el11
1 files changed, 8 insertions, 3 deletions
diff --git a/lisp/files.el b/lisp/files.el
index ce4dd99bd53..d32c6acb82c 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1307,9 +1307,14 @@ containing it, until no links are left at any level.
1307 (let ((handler (find-file-name-handler filename 'file-truename))) 1307 (let ((handler (find-file-name-handler filename 'file-truename)))
1308 ;; For file name that has a special handler, call handler. 1308 ;; For file name that has a special handler, call handler.
1309 ;; This is so that ange-ftp can save time by doing a no-op. 1309 ;; This is so that ange-ftp can save time by doing a no-op.
1310 (if handler 1310 (or
1311 (setq filename (funcall handler 'file-truename filename) 1311 (if handler
1312 done t) 1312 (setq filename (funcall handler 'file-truename filename)
1313 done t)
1314 (condition-case nil
1315 (setq filename (fileio--truename filename)
1316 done t)
1317 (file-missing nil)))
1313 (let ((dir (or (file-name-directory filename) default-directory)) 1318 (let ((dir (or (file-name-directory filename) default-directory))
1314 target dirfile) 1319 target dirfile)
1315 ;; Get the truename of the directory. 1320 ;; Get the truename of the directory.