summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/url/ChangeLog5
-rw-r--r--lisp/url/url-handlers.el15
2 files changed, 15 insertions, 5 deletions
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 784e8d5c320..11f99ec5280 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * url-handlers.el (url-handler-unhandled-file-name-directory):
+ Handle `file' URLs specially. Return nil for non-local filenames.
+
2008-02-04 Magnus Henoch <mange@freemail.hu>
* url-expand.el: Require cl when compiling, for setf.
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el
index acc85b939a1..088e7a6a534 100644
--- a/lisp/url/url-handlers.el
+++ b/lisp/url/url-handlers.el
@@ -183,11 +183,16 @@ the arguments that would have been passed to OPERATION."
(url-run-real-handler 'directory-file-name (list dir))))
(defun url-handler-unhandled-file-name-directory (filename)
- ;; Copied from tramp.el. This is used as the cwd for subprocesses:
- ;; without it running call-process or start-process in a URL directory
- ;; signals an error.
- ;; FIXME: we can do better if `filename' is a "file://" URL.
- (expand-file-name "~/"))
+ (let ((url (url-generic-parse-url filename)))
+ (if (equal (url-type url) "file")
+ ;; `file' URLs are actually local. The filename part may be ""
+ ;; which really stands for "/".
+ ;; FIXME: maybe we should check that the host part is "" or "localhost"
+ ;; or some name that represents the local host?
+ (or (file-name-directory (url-filename url)) "/")
+ ;; All other URLs are not expected to be directly accessible from
+ ;; a local process.
+ nil)))
;; The actual implementation
;;;###autoload