]> code.delx.au - gnu-emacs/blobdiff - lisp/jka-compr.el
Fix typo.
[gnu-emacs] / lisp / jka-compr.el
index 5c42a0af8be35cc5c7e39d0737009f05167c8a79..7a0f39d89ee7c6e8ebe11bd669e02269ea0534fe 100644 (file)
@@ -1,6 +1,6 @@
 ;;; jka-compr.el --- reading/writing/loading compressed files
 
-;; Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000  Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2003  Free Software Foundation, Inc.
 
 ;; Author: jka@ece.cmu.edu (Jay K. Adams)
 ;; Maintainer: FSF
@@ -64,7 +64,7 @@
 ;; APPLICATION NOTES:
 ;;
 ;; crypt++
-;;   jka-compr can coexist with crpyt++ if you take all the decompression
+;;   jka-compr can coexist with crypt++ if you take all the decompression
 ;;   entries out of the crypt-encoding-list.  Clearly problems will arise if
 ;;   you have two programs trying to compress/decompress files.  jka-compr
 ;;   will not "work with" crypt++ in the following sense: you won't be able to
@@ -77,9 +77,9 @@
 
 
 ;; ACKNOWLEDGMENTS
-;; 
+;;
 ;; jka-compr is a V19 adaptation of jka-compr for V18 of Emacs.  Many people
-;; have made helpful suggestions, reported bugs, and even fixed bugs in 
+;; have made helpful suggestions, reported bugs, and even fixed bugs in
 ;; jka-compr.  I recall the following people as being particularly helpful.
 ;;
 ;;   Jean-loup Gailly
@@ -117,7 +117,7 @@ for `jka-compr-compression-info-list')."
   :type 'string
   :group 'jka-compr)
 
-(defvar jka-compr-use-shell 
+(defvar jka-compr-use-shell
   (not (memq system-type '(ms-dos windows-nt))))
 
 ;;; I have this defined so that .Z files are assumed to be in unix
@@ -270,8 +270,8 @@ based on the filename itself and `jka-compr-compression-info-list'."
 
   (signal 'compression-error
          (list "Opening input file" (format "error %s" message) infile)))
-                       
-   
+
+
 (defcustom jka-compr-dd-program "/bin/dd"
   "How to invoke `dd'."
   :type 'string
@@ -300,7 +300,7 @@ to keep: LEN chars starting BEG chars from the beginning."
              (or (memq (call-process
                         jka-compr-shell infile t nil "-c"
                         (format
-                         "%s %s 2> %s | %s bs=%d skip=%d %s 2> /dev/null"
+                         "%s %s 2> %s | %s bs=%d skip=%d %s 2> %s"
                          prog
                          (mapconcat 'identity args " ")
                          err-file
@@ -310,7 +310,8 @@ to keep: LEN chars starting BEG chars from the beginning."
                          ;; dd seems to be unreliable about
                          ;; providing the last block.  So, always
                          ;; read one more than you think you need.
-                         (if count (format "count=%d" (1+ count)) "")))
+                         (if count (format "count=%d" (1+ count)) "")
+                         null-device))
                        jka-compr-acceptable-retval-list)
                  (jka-compr-error prog args infile message err-file))
            (jka-compr-delete-temp-file err-file)))
@@ -355,7 +356,7 @@ to keep: LEN chars starting BEG chars from the beginning."
 
          (jka-compr-delete-temp-file err-file)))
 
-    (or (zerop
+    (or (eq 0
         (apply 'call-process
                prog
                infile
@@ -393,6 +394,10 @@ There should be no more than seven characters after the final `/'."
         (info (jka-compr-get-compression-info visit-file))
         (magic (and info (jka-compr-info-file-magic-bytes info))))
 
+    ;; If START is nil, use the whole buffer.
+    (if (null start)
+       (setq start 1 end (1+ (buffer-size))))
+
     ;; If we uncompressed this file when visiting it,
     ;; then recompress it when writing it
     ;; even if the contents look compressed already.
@@ -442,7 +447,7 @@ There should be no more than seven characters after the final `/'."
 
            (setq temp-file (jka-compr-make-temp-name)))
 
-         (and 
+         (and
           compress-message
           (message "%s %s..." compress-message base-name))
 
@@ -497,7 +502,7 @@ There should be no more than seven characters after the final `/'."
          (setq last-coding-system-used coding-system-used)
 
          nil)
-             
+
       (jka-compr-run-real-handler 'write-region
                                  (list start end filename append visit)))))
 
@@ -522,20 +527,7 @@ There should be no more than seven characters after the final `/'."
              (local-copy
               (jka-compr-run-real-handler 'file-local-copy (list filename)))
              local-file
-             size start
-              (coding-system-for-read
-              (or coding-system-for-read
-                  ;; If multibyte characters are disabled,
-                  ;; don't do that conversion.
-                  (and (null enable-multibyte-characters)
-                       (or (auto-coding-alist-lookup
-                            (jka-compr-byte-compiler-base-file-name file))
-                           'raw-text))
-                  (let ((coding (find-operation-coding-system
-                                 'insert-file-contents
-                                 (jka-compr-byte-compiler-base-file-name file))))
-                    (and (consp coding) (car coding)))
-                  'undecided)) )
+             size start)
 
          (setq local-file (or local-copy filename))
 
@@ -546,14 +538,14 @@ There should be no more than seven characters after the final `/'."
          (unwind-protect               ; to make sure local-copy gets deleted
 
              (progn
-                 
+
                (and
                 uncompress-message
                 (message "%s %s..." uncompress-message base-name))
 
                (condition-case error-code
 
-                   (progn
+                   (let ((coding-system-for-read 'no-conversion))
                      (if replace
                          (goto-char (point-min)))
                      (setq start (point))
@@ -581,17 +573,14 @@ There should be no more than seven characters after the final `/'."
                                                  uncompress-args)))
                      (setq size (- (point) start))
                      (if replace
-                         (let* ((del-beg (point))
-                                (del-end (+ del-beg size)))
-                           (delete-region del-beg
-                                          (min del-end (point-max)))))
+                         (delete-region (point) (point-max)))
                      (goto-char start))
                  (error
                   (if (and (eq (car error-code) 'file-error)
                            (eq (nth 3 error-code) local-file))
                       (if visit
                           (setq notfound error-code)
-                        (signal 'file-error 
+                        (signal 'file-error
                                 (cons "Opening input file"
                                       (nthcdr 2 error-code))))
                     (signal (car error-code) (cdr error-code))))))
@@ -601,6 +590,12 @@ There should be no more than seven characters after the final `/'."
             (file-exists-p local-copy)
             (delete-file local-copy)))
 
+         (unless notfound
+           (decode-coding-inserted-region
+            (point) (+ (point) size)
+            (jka-compr-byte-compiler-base-file-name file)
+            visit beg end replace))
+
          (and
           visit
           (progn
@@ -608,7 +603,7 @@ There should be no more than seven characters after the final `/'."
             (setq buffer-file-name filename)
             (setq jka-compr-really-do-compress t)
             (set-visited-file-modtime)))
-           
+
          (and
           uncompress-message
           (message "%s %s...done" uncompress-message base-name))
@@ -664,11 +659,11 @@ There should be no more than seven characters after the final `/'."
          (unwind-protect
 
              (with-current-buffer temp-buffer
-                 
+
                (and
                 uncompress-message
                 (message "%s %s..." uncompress-message base-name))
-                 
+
                ;; Here we must read the output of uncompress program
                ;; and write it to TEMP-FILE without any code
                ;; conversion.  An appropriate code conversion (if
@@ -700,7 +695,7 @@ There should be no more than seven characters after the final `/'."
            (kill-buffer temp-buffer))
 
          temp-file)
-           
+
       (jka-compr-run-real-handler 'file-local-copy (list filename)))))
 
 
@@ -752,6 +747,7 @@ There should be no more than seven characters after the final `/'."
 Lisp programs can bind this to t to do that.
 It is not recommended to set this variable permanently to anything but nil.")
 
+(put 'jka-compr-handler 'safe-magic t)
 (defun jka-compr-handler (operation &rest args)
   (save-match-data
     (let ((jka-op (get operation 'jka-compr)))
@@ -867,7 +863,7 @@ by `jka-compr-installed'."
                   (eq (nth 2 entry) 'jka-compr)))
          (setcdr last (cdr (cdr last)))
        (setq last (cdr last))))
-    
+
     (setq auto-mode-alist (cdr ama)))
 
   (let* ((ama (cons nil file-coding-system-alist))
@@ -879,7 +875,7 @@ by `jka-compr-installed'."
       (if (member entry jka-compr-added-to-file-coding-system-alist)
          (setcdr last (cdr (cdr last)))
        (setq last (cdr last))))
-    
+
     (setq file-coding-system-alist (cdr ama)))
 
   ;; Remove the suffixes that were added by jka-compr.
@@ -890,7 +886,7 @@ by `jka-compr-installed'."
        (push suffix suffixes)))
     (setq load-suffixes (nreverse suffixes))))
 
-      
+
 (defun jka-compr-installed-p ()
   "Return non-nil if jka-compr is installed.
 The return value is the entry in `file-name-handler-alist' for jka-compr."
@@ -945,4 +941,5 @@ Returns the new status of auto compression (non-nil means on)."
 
 (provide 'jka-compr)
 
+;;; arch-tag: 3f15b630-e9a7-46c4-a22a-94afdde86ebc
 ;;; jka-compr.el ends here