;;; url-file.el --- File retrieval code
-;; Copyright (C) 1996, 1997, 1998, 1999, 2004,
-;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2012 Free Software Foundation, Inc.
;; Keywords: comm, data, processes
This tries the common compression extensions, because things like
ange-ftp and efs are not quite smart enough to realize when a server
can do automatic decompression for them, and won't find 'foo' if
-'foo.gz' exists, even though the ftp server would happily serve it up
+'foo.gz' exists, even though the FTP server would happily serve it up
to them."
(let ((scratch nil)
(compressed-extensions '("" ".gz" ".z" ".Z" ".bz2"))
(declare-function ange-ftp-copy-file-internal "ange-ftp"
(filename newname ok-if-already-exists
keep-date &optional msg cont nowait))
-(declare-function url-generate-unique-filename "url-util" (&optional fmt))
(defun url-file-build-filename (url)
(if (not (vectorp url))
(format "%s#%d" host port))
host))
(file (url-unhex-string (url-filename url)))
- (filename (if (or user (not (url-file-host-is-local-p host)))
- (concat "/" (or user "anonymous") "@" site ":" file)
- (if (and (memq system-type
- '(emx ms-dos windows-nt ms-windows))
- (string-match "^/[a-zA-Z]:/" file))
- (substring file 1)
- file)))
+ (filename (cond
+ ;; ftp: URL.
+ ((or user (not (url-file-host-is-local-p host)))
+ (concat "/" (or user "anonymous") "@" site ":" file))
+ ;; file: URL on Windows.
+ ((and (string-match "\\`/[a-zA-Z]:/" file)
+ (memq system-type '(ms-dos windows-nt)))
+ (substring file 1))
+ ;; file: URL with a file:/bar:/foo-like spec.
+ ((string-match "\\`/[^/]+:/" file)
+ (concat "/:" file))
+ (t
+ file)))
pos-index)
(and user pass
(uncompressed-filename nil)
(content-type nil)
(content-encoding nil)
- (coding-system-for-read 'binary))
-
- (setq filename (url-file-build-filename url))
-
- (if (not filename)
- (error "File does not exist: %s" (url-recreate-url url)))
-
+ (coding-system-for-read 'binary)
+ (filename (url-file-build-filename url)))
+ (or filename (error "File does not exist: %s" (url-recreate-url url)))
;; Need to figure out the content-type from the real extension,
;; not the compressed one.
(setq uncompressed-filename (if (string-match "\\.\\(gz\\|Z\\|z\\)$" filename)
(current-buffer)
callback cbargs))
;; FTP handling
- (let* ((extension (url-file-extension filename))
- (new (url-generate-unique-filename
- (and (> (length extension) 0)
- (concat "%s." extension)))))
+ (let ((new (make-temp-file
+ (format "url-tmp.%d" (user-real-uid)))))
(if (featurep 'ange-ftp)
(ange-ftp-copy-file-internal filename (expand-file-name new) t
nil t
(provide 'url-file)
-;; arch-tag: 010e914a-7313-494b-8a8c-6495a862157d
;;; url-file.el ends here