From b4958f3f49d4cd9765be815bc5328385c1490c2d Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 29 Dec 2001 20:48:06 +0000 Subject: [PATCH] (ange-ftp-allow-child-lookup): Always return nil. This fixes a bug that treated all files as directories. (ange-ftp-insert-directory): Explicitly follow symlinks. (ange-ftp-file-modtime): Use save-match-data. --- lisp/ChangeLog | 6 +++++ lisp/net/ange-ftp.el | 59 +++++++++++++++++++++++++++----------------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a14b2d20dd1..1691198ea92 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2001-12-29 Richard M. Stallman + + * net/ange-ftp.el (ange-ftp-allow-child-lookup): Always return nil. + This fixes a bug that treated all files as directories. + (ange-ftp-insert-directory): Explicitly follow symlinks. + 2001-12-28 Simon Josefsson * mail/sendmail.el (mail-envelope-from): Fix :type. diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index a6e09464a2f..cda0bf34201 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el @@ -2780,24 +2780,31 @@ NO-ERROR, if a listing for DIRECTORY cannot be obtained." ;; 2. The syntax of FILE and DIR make it impossible that FILE could be a valid ;; subdirectory. This is of course an OS dependent judgement. +;;; Nowadays, the judgement for #2 is always "no". +;;; With today's ftp servers on Unix and GNU systems, +;;; it appears to be impossible to tell from the result +;;; of the directory listing whether the argument is a directory. +;;; This appears to be true even in Emacs 20.7 + (defmacro ange-ftp-allow-child-lookup (dir file) - `(not - (let* ((efile ,file) ; expand once. - (edir ,dir) - (parsed (ange-ftp-ftp-name edir)) - (host-type (ange-ftp-host-type - (car parsed)))) - (or - ;; Deal with dired - (and (boundp 'dired-local-variables-file) ; in the dired-x package - (stringp dired-local-variables-file) - (string-equal dired-local-variables-file efile)) - ;; No dots in dir names in vms. - (and (eq host-type 'vms) - (string-match "\\." efile)) - ;; No subdirs in mts of cms. - (and (memq host-type '(mts cms)) - (not (string-equal "/" (nth 2 parsed)))))))) + nil) +;;; `(not +;;; (let* ((efile ,file) ; expand once. +;;; (edir ,dir) +;;; (parsed (ange-ftp-ftp-name edir)) +;;; (host-type (ange-ftp-host-type +;;; (car parsed)))) +;;; (or +;;; ;; Deal with dired +;;; (and (boundp 'dired-local-variables-file) ; in the dired-x package +;;; (stringp dired-local-variables-file) +;;; (string-equal dired-local-variables-file efile)) +;;; ;; No dots in dir names in vms. +;;; (and (eq host-type 'vms) +;;; (string-match "\\." efile)) +;;; ;; No subdirs in mts of cms. +;;; (and (memq host-type '(mts cms)) +;;; (not (string-equal "/" (nth 2 parsed)))))))) (defun ange-ftp-file-entry-p (name) "Given NAME, return whether there is a file entry for it." @@ -4318,13 +4325,19 @@ NEWNAME should be the name to give the new compressed or uncompressed file.") (defun ange-ftp-insert-directory (file switches &optional wildcard full) (let ((short (ange-ftp-abbreviate-filename file)) - (parsed (ange-ftp-ftp-name (expand-file-name file)))) + (parsed (ange-ftp-ftp-name (expand-file-name file))) + tem) (if parsed - (insert - (if wildcard - (let ((default-directory (file-name-directory file))) - (ange-ftp-ls (file-name-nondirectory file) switches nil nil t)) - (ange-ftp-ls file switches full))) + (if (and (not wildcard) + (setq tem (file-symlink-p (directory-file-name file)))) + (ange-ftp-insert-directory + (ange-ftp-replace-name-component file tem) + switches wildcard full) + (insert + (if wildcard + (let ((default-directory (file-name-directory file))) + (ange-ftp-ls (file-name-nondirectory file) switches nil nil t)) + (ange-ftp-ls file switches full))))q (ange-ftp-real-insert-directory file switches wildcard full)))) (defun ange-ftp-dired-uncache (dir) -- 2.39.2