* net/tramp-compat.el (tramp-compat-temporary-file-directory): Avoid infloop.
authorMichael Albinus <michael.albinus@gmx.de>
Fri, 8 Jun 2012 13:27:06 +0000 (15:27 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Fri, 8 Jun 2012 13:27:06 +0000 (15:27 +0200)
lisp/ChangeLog
lisp/net/tramp-compat.el

index 4609954..afec55e 100644 (file)
@@ -1,3 +1,8 @@
+2012-06-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       * net/tramp-compat.el (tramp-compat-temporary-file-directory):
+       Avoid infloop.
+
 2012-06-08  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * startup.el (argv, argi): Make lexically scoped.
index 3a79269..5ae987f 100644 (file)
   "Return name of directory for temporary files (compat function).
 For Emacs, this is the variable `temporary-file-directory', for XEmacs
 this is the function `temp-directory'."
-  (cond
-   ((and (boundp 'temporary-file-directory)
-        (not (file-remote-p (symbol-value 'temporary-file-directory))))
-    (symbol-value 'temporary-file-directory))
-   ((fboundp 'temp-directory) (tramp-compat-funcall 'temp-directory))
-   ((let ((d (getenv "TEMP"))) (and d (file-directory-p d)))
-    (file-name-as-directory (getenv "TEMP")))
-   ((let ((d (getenv "TMP"))) (and d (file-directory-p d)))
-    (file-name-as-directory (getenv "TMP")))
-   ((let ((d (getenv "TMPDIR"))) (and d (file-directory-p d)))
-    (file-name-as-directory (getenv "TMPDIR")))
-   ((file-exists-p "c:/temp") (file-name-as-directory "c:/temp"))
-   (t (message (concat "Neither `temporary-file-directory' nor "
-                      "`temp-directory' is defined -- using /tmp."))
-      (file-name-as-directory "/tmp"))))
+  (let (file-name-handler-alist)
+    (cond
+     ;; We must return a local directory.  If it is remote, we could
+     ;; run into an infloop.
+     ((boundp 'temporary-file-directory)
+      (eval (car (get 'temporary-file-directory 'standard-value))))
+     ((fboundp 'temp-directory) (tramp-compat-funcall 'temp-directory))
+     ((let ((d (getenv "TEMP"))) (and d (file-directory-p d)))
+      (file-name-as-directory (getenv "TEMP")))
+     ((let ((d (getenv "TMP"))) (and d (file-directory-p d)))
+      (file-name-as-directory (getenv "TMP")))
+     ((let ((d (getenv "TMPDIR"))) (and d (file-directory-p d)))
+      (file-name-as-directory (getenv "TMPDIR")))
+     ((file-exists-p "c:/temp") (file-name-as-directory "c:/temp"))
+     (t (message (concat "Neither `temporary-file-directory' nor "
+                        "`temp-directory' is defined -- using /tmp."))
+       (file-name-as-directory "/tmp")))))
 
 ;; `make-temp-file' exists in Emacs only.  On XEmacs, we use our own
 ;; implementation with `make-temp-name', creating the temporary file