Add 2012 to FSF copyright years for Emacs files
[bpt/emacs.git] / lisp / url / url-file.el
index cc8a654..62052fc 100644 (file)
@@ -1,26 +1,23 @@
 ;;; 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 file is part of GNU Emacs.
 ;;
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
-;;
+
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -41,7 +38,7 @@
 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"))
@@ -90,7 +87,6 @@ to them."
 (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))
@@ -106,13 +102,19 @@ to them."
                     (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
@@ -160,13 +162,9 @@ to them."
         (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)
@@ -204,10 +202,8 @@ to them."
                                        (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
@@ -244,5 +240,4 @@ to them."
 
 (provide 'url-file)
 
-;; arch-tag: 010e914a-7313-494b-8a8c-6495a862157d
 ;;; url-file.el ends here