]> code.delx.au - gnu-emacs/blobdiff - lisp/net/ange-ftp.el
Don't use the abbreviation "win" to refer to Windows (Bug#10421).
[gnu-emacs] / lisp / net / ange-ftp.el
index 6ac01a1cd69509a68ed457ce001224bdf54dde33..1501fa41baabbb5737aaab1def38e711e41d817e 100644 (file)
@@ -1200,6 +1200,11 @@ only return the directory part of FILE."
 
 (defun ange-ftp-get-passwd (host user)
   "Return the password for specified HOST and USER, asking user if necessary."
+  ;; If `non-essential' is non-nil, don't ask for a password.  It will
+  ;; be caught in Tramp.
+  (when non-essential
+    (throw 'non-essential 'non-essential))
+
   (ange-ftp-parse-netrc)
 
   ;; look up password in the hash table first; user might have overridden the
@@ -1776,7 +1781,7 @@ good, skip, fatal, or unknown."
 (defun ange-ftp-gwp-start (host user name args)
   "Login to the gateway machine and fire up an FTP process."
   ;; If `non-essential' is non-nil, don't reopen a new connection.  It
-  ;; will be catched in Tramp.
+  ;; will be caught in Tramp.
   (when non-essential
     (throw 'non-essential 'non-essential))
   (let (;; It would be nice to make process-connection-type nil,
@@ -1911,7 +1916,7 @@ been queued with no result.  CONT will still be called, however."
 If HOST is only FTP-able through a gateway machine then spawn a shell
 on the gateway machine to do the FTP instead."
   ;; If `non-essential' is non-nil, don't reopen a new connection.  It
-  ;; will be catched in Tramp.
+  ;; will be caught in Tramp.
   (when non-essential
     (throw 'non-essential 'non-essential))
   (let* ((use-gateway (ange-ftp-use-gateway-p host))
@@ -2133,7 +2138,7 @@ Create a new process if needed."
     (if (and proc (memq (process-status proc) '(run open)))
        proc
       ;; If `non-essential' is non-nil, don't reopen a new connection.  It
-      ;; will be catched in Tramp.
+      ;; will be caught in Tramp.
       (when non-essential
        (throw 'non-essential 'non-essential))
 
@@ -2613,7 +2618,7 @@ away in the internal cache."
                                          (format
                                           "list data file %s not readable"
                                           temp))))
-                      ;; remove ^M inserted by the win32 ftp client
+                      ;; remove ^M inserted by the w32 ftp client
                       (while (re-search-forward "\r$" nil t)
                         (replace-match ""))
                       (goto-char 1)
@@ -3138,21 +3143,15 @@ logged in as user USER and cd'd to directory DIR."
   "Documented as `expand-file-name'."
   (save-match-data
     (setq default (or default default-directory))
-    (cond ((eq (string-to-char name) ?~)
-          (ange-ftp-real-expand-file-name name))
-         ((eq (string-to-char name) ?/)
-          (ange-ftp-canonize-filename name))
-         ((and (eq system-type 'windows-nt)
-               (eq (string-to-char name) ?\\))
-          (ange-ftp-canonize-filename name))
-         ((and (eq system-type 'windows-nt)
-               (or (string-match "\\`[a-zA-Z]:" name)
-                   (string-match "\\`[a-zA-Z]:" default)))
-          (ange-ftp-real-expand-file-name name default))
-         ((zerop (length name))
-          (ange-ftp-canonize-filename default))
-         ((ange-ftp-canonize-filename
-           (concat (file-name-as-directory default) name))))))
+    (cond
+     ((ange-ftp-ftp-name name)
+      ;; `default' is irrelevant.
+      (ange-ftp-canonize-filename name))
+     ((file-name-absolute-p name)
+      ;; `name' is absolute but is not an ange-ftp name => not ange-ftp.
+      (ange-ftp-real-expand-file-name name "/"))
+     ((ange-ftp-canonize-filename
+       (concat (file-name-as-directory default) name))))))
 \f
 ;;; These are problems--they are currently not enabled.
 
@@ -3385,7 +3384,7 @@ system TYPE.")
       (if (ange-ftp-file-entry-p name)
          (let ((file-ent (ange-ftp-get-file-entry name)))
            (if (stringp file-ent)
-               (file-exists-p
+               (ange-ftp-file-exists-p
                 (ange-ftp-expand-symlink file-ent
                                          (file-name-directory
                                           (directory-file-name name))))
@@ -3794,7 +3793,8 @@ so return the size on the remote host exactly. See RFC 3659."
                   (format "Copying %s to %s" f-abbr t-abbr)))
             (list 'ange-ftp-cf2
                   newname t-host t-user binary temp1 temp2 cont)
-            nowait))
+            nowait)
+           (ange-ftp-add-file-entry newname))
 
        ;; newname wasn't remote.
        (ange-ftp-cf2 t nil newname t-host t-user binary temp1 temp2 cont))
@@ -3969,10 +3969,15 @@ E.g.,
           (string-match "\\`[a-zA-Z]:[/\\]\\'" dir))
       (string-equal "/" dir)))
 
+(defmacro ange-ftp-ignore-errors-if-non-essential (&rest body)
+  `(if non-essential
+       (ignore-errors ,@body)
+     (progn ,@body)))
+
 (defun ange-ftp-file-name-all-completions (file dir)
   (let ((ange-ftp-this-dir (expand-file-name dir)))
     (if (ange-ftp-ftp-name ange-ftp-this-dir)
-       (progn
+       (ange-ftp-ignore-errors-if-non-essential
          (ange-ftp-barf-if-not-directory ange-ftp-this-dir)
          (setq ange-ftp-this-dir
                (ange-ftp-real-file-name-as-directory ange-ftp-this-dir))