summaryrefslogtreecommitdiff
path: root/lisp/files.el
diff options
context:
space:
mode:
authorKarl Heuer <kwzh@gnu.org>1994-02-02 04:39:22 +0000
committerKarl Heuer <kwzh@gnu.org>1994-02-02 04:39:22 +0000
commitb1fa544fda46cbf18b599ba3ede88b1ec797aa7e (patch)
treea4339c358c5facb39a92eb5e82c9054270086f76 /lisp/files.el
parent1892807a4da003baad3b890cc25c458502f74e36 (diff)
downloademacs-b1fa544fda46cbf18b599ba3ede88b1ec797aa7e.tar.gz
Fix file-relative-name to allow for ancestors as well as descendants.
Diffstat (limited to 'lisp/files.el')
-rw-r--r--lisp/files.el16
1 files changed, 5 insertions, 11 deletions
diff --git a/lisp/files.el b/lisp/files.el
index 8eb4ff490e2..f5aad139dd1 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1382,22 +1382,16 @@ Value is a list whose car is the name for the backup file
"Return number of names file FILENAME has."
(car (cdr (file-attributes filename))))
-(defun file-relative-name-1 (directory)
- (cond ((string= directory "/")
- filename)
- ((string-match (concat "^" (regexp-quote directory))
- filename)
- (substring filename (match-end 0)))
- (t
- (file-relative-name-1
- (file-name-directory (substring directory 0 -1))))))
-
(defun file-relative-name (filename &optional directory)
"Convert FILENAME to be relative to DIRECTORY (default: default-directory)."
(setq filename (expand-file-name filename)
directory (file-name-as-directory (expand-file-name
(or directory default-directory))))
- (file-relative-name-1 directory))
+ (let ((ancestor ""))
+ (while (not (string-match (concat "^" (regexp-quote directory)) filename))
+ (setq directory (file-name-directory (substring directory 0 -1))
+ ancestor (concat "../" ancestor)))
+ (concat ancestor (substring filename (match-end 0)))))
(defun save-buffer (&optional args)
"Save current buffer in visited file if modified. Versions described below.