]> code.delx.au - gnu-emacs/blobdiff - lisp/url/url-file.el
Update copyright year to 2015
[gnu-emacs] / lisp / url / url-file.el
index 319f62f3a1ad7e14c954d74526bceaccb1586292..e28af956f8115358d70c4e03158f6837802e3f4e 100644 (file)
@@ -1,7 +1,6 @@
 ;;; url-file.el --- File retrieval code
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2004, 2005, 2006, 2007, 2008,
-;;   2009, 2010, 2011  Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
@@ -24,7 +23,6 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
 (require 'mailcap)
 (require 'url-vars)
 (require 'url-parse)
@@ -42,7 +40,7 @@ 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
 to them."
   (let ((scratch nil)
-       (compressed-extensions '("" ".gz" ".z" ".Z" ".bz2"))
+       (compressed-extensions '("" ".gz" ".z" ".Z" ".bz2" ".xz"))
        (found nil))
     (while (and compressed-extensions (not found))
       (if (file-exists-p (setq scratch (concat fname (pop compressed-extensions))))
@@ -103,12 +101,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 '(ms-dos windows-nt))
-                             (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
@@ -161,18 +166,21 @@ to them."
     (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.
+    ;; FIXME should this regexp not include more extensions; basically
+    ;; everything that url-file-find-possibly-compressed-file does?
     (setq uncompressed-filename (if (string-match "\\.\\(gz\\|Z\\|z\\)$" filename)
                                    (substring filename 0 (match-beginning 0))
                                  filename))
     (setq content-type (mailcap-extension-to-mime
                        (url-file-extension uncompressed-filename))
-         content-encoding (case (intern (url-file-extension filename))
-                            ((\.z \.gz) "gzip")
-                            (\.Z "compress")
-                            (\.uue "x-uuencoded")
-                            (\.hqx "x-hqx")
-                            (\.bz2 "x-bzip2")
-                            (otherwise nil)))
+         content-encoding (pcase (url-file-extension filename)
+                            ((or ".z" ".gz") "gzip")
+                            (".Z" "compress")
+                            (".uue" "x-uuencoded")
+                            (".hqx" "x-hqx")
+                            (".bz2" "x-bzip2")
+                            (".xz" "x-xz")
+                            (_ nil)))
 
     (if (file-directory-p filename)
        ;; A directory is done the same whether we are local or remote
@@ -234,5 +242,4 @@ to them."
 
 (provide 'url-file)
 
-;; arch-tag: 010e914a-7313-494b-8a8c-6495a862157d
 ;;; url-file.el ends here