comparison lisp/net/ange-ftp.el @ 38312:b6dd8b1368af

(ange-ftp-file-modtime): Ignore 226 responses from the server. Call encode-time only when we are sure that we got a 213 response.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 06 Jul 2001 14:02:48 +0000
parents 989feabdf50e
children 3c2404604bae
comparison
equal deleted inserted replaced
38311:b91b2fa6911d 38312:b6dd8b1368af
3424 file))) 3424 file)))
3425 (ange-ftp-delete-file-entry file)) 3425 (ange-ftp-delete-file-entry file))
3426 (ange-ftp-real-delete-file file)))) 3426 (ange-ftp-real-delete-file file))))
3427 3427
3428 (defun ange-ftp-file-modtime (file) 3428 (defun ange-ftp-file-modtime (file)
3429 "Return the modification time of remote file FILE.
3430 Value is (0 0) if the modification time cannot be determined."
3429 (let* ((parsed (ange-ftp-ftp-name file)) 3431 (let* ((parsed (ange-ftp-ftp-name file))
3432 ;; At least one FTP server (wu-ftpd) can return a "226
3433 ;; Transfer complete" before the "213 MODTIME". Let's skip
3434 ;; that.
3435 (ange-ftp-skip-msgs (concat ange-ftp-skip-msgs "\\|^226"))
3430 (res (ange-ftp-send-cmd (car parsed) (cadr parsed) 3436 (res (ange-ftp-send-cmd (car parsed) (cadr parsed)
3431 (list 'quote "mdtm" (cadr (cdr parsed)))))) 3437 (list 'quote "mdtm" (cadr (cdr parsed)))))
3432 (if (= ?5 (aref (cdr res) 0)) '(0 0) 3438 (line (cdr res))
3433 (encode-time ; MDTM returns "YYYYMMDDHHMMSS" GMT 3439 (modtime '(0 0)))
3434 (string-to-number (substring (cdr res) 16 18)) 3440 (when (string-match "^213" line)
3435 (string-to-number (substring (cdr res) 14 16)) 3441 ;; MDTM should return "213 YYYYMMDDhhmmss" GMT on success.
3436 (string-to-number (substring (cdr res) 12 14)) 3442 (setq modtime
3437 (string-to-number (substring (cdr res) 10 12)) 3443 (encode-time
3438 (string-to-number (substring (cdr res) 8 10)) 3444 (string-to-number (substring line 16 18))
3439 (string-to-number (substring (cdr res) 4 8)) 3445 (string-to-number (substring line 14 16))
3440 0)))) 3446 (string-to-number (substring line 12 14))
3447 (string-to-number (substring line 10 12))
3448 (string-to-number (substring line 8 10))
3449 (string-to-number (substring line 4 8))
3450 0)))
3451 modtime))
3441 3452
3442 (defun ange-ftp-verify-visited-file-modtime (buf) 3453 (defun ange-ftp-verify-visited-file-modtime (buf)
3443 (let ((name (buffer-file-name buf))) 3454 (let ((name (buffer-file-name buf)))
3444 (if (and (stringp name) (ange-ftp-ftp-name name)) 3455 (if (and (stringp name) (ange-ftp-ftp-name name))
3445 (let ((file-mdtm (ange-ftp-file-modtime name)) 3456 (let ((file-mdtm (ange-ftp-file-modtime name))