Function: ange-ftp-insert-file-contents

ange-ftp-insert-file-contents is a byte-compiled function defined in ange-ftp.el.gz.

Signature

(ange-ftp-insert-file-contents FILENAME &optional VISIT BEG END REPLACE)

Source Code

;; Defined in /usr/src/emacs/lisp/net/ange-ftp.el.gz
(defun ange-ftp-insert-file-contents (filename &optional visit beg end replace)
  (barf-if-buffer-read-only)
  (setq filename (expand-file-name filename))
  (let ((parsed (ange-ftp-ftp-name filename)))
    (if parsed
	(progn
	  (if visit
	      (setq buffer-file-name filename))
	  (if (or (file-exists-p filename)
		  (progn
		    (setq ange-ftp-ls-cache-file nil)
		    (remhash (file-name-directory filename)
			     ange-ftp-files-hashtable)
		    (file-exists-p filename)))
	      (let* ((host (nth 0 parsed))
		     (user (nth 1 parsed))
		     (name (ange-ftp-quote-string (nth 2 parsed)))
		     (temp (ange-ftp-make-tmp-name host))
		     (binary (ange-ftp-binary-file filename))
		     (abbr (ange-ftp-abbreviate-filename filename))
		     (coding-system-used last-coding-system-used)
		     size)
		(unwind-protect
		    (progn
		      (if binary
			  (ange-ftp-set-binary-mode host user))
		      (let ((result (ange-ftp-send-cmd host user
					      (list 'get name temp)
					      (format "Retrieving %s" abbr))))
			(or (car result)
			    (signal 'ftp-error
				    (list
				     "Opening input file"
				     (format "FTP Error: \"%s\"" (cdr result))
				     filename))))
		      (if (or (ange-ftp-real-file-readable-p temp)
			      (sleep-for ange-ftp-retry-time)
			      ;; Wait for file to hopefully appear.
			      (ange-ftp-real-file-readable-p temp))
			  (setq
			   size
			   (nth 1 (ange-ftp-real-insert-file-contents
				   temp visit beg end replace))
			   coding-system-used last-coding-system-used)
			(signal 'ftp-error
				(list
				 "Opening input file:"
				 (format
				  "FTP Error: %s not arrived or readable"
				  filename)))))
		  (if binary
		      ;; We must keep `last-coding-system-used'
		      ;; unchanged.
		      (let (last-coding-system-used)
			(ange-ftp-set-ascii-mode host user)))
		  (ange-ftp-del-tmp-name temp))
		(if visit
		    (progn
		      (set-visited-file-modtime
                       (ange-ftp-file-modtime filename))
		      (setq buffer-file-name filename)))
		(setq last-coding-system-used coding-system-used)
		(list filename size))
	    (signal 'file-missing
		    (list
		     "Opening input file"
		     "No such file or directory"
		     filename))))
      (ange-ftp-real-insert-file-contents filename visit beg end replace))))