diff options
| -rw-r--r-- | lisp/jka-compr.el | 57 |
1 files changed, 34 insertions, 23 deletions
diff --git a/lisp/jka-compr.el b/lisp/jka-compr.el index 78f544d4d2c..1bac9a7469d 100644 --- a/lisp/jka-compr.el +++ b/lisp/jka-compr.el | |||
| @@ -298,7 +298,7 @@ to keep: LEN chars starting BEG chars from the beginning." | |||
| 298 | (if jka-compr-use-shell | 298 | (if jka-compr-use-shell |
| 299 | 299 | ||
| 300 | (let ((err-file (jka-compr-make-temp-name)) | 300 | (let ((err-file (jka-compr-make-temp-name)) |
| 301 | (coding-system-for-read 'undecided) | 301 | (coding-system-for-read (or coding-system-for-read 'undecided)) |
| 302 | (coding-system-for-write 'no-conversion) ) | 302 | (coding-system-for-write 'no-conversion) ) |
| 303 | 303 | ||
| 304 | (unwind-protect | 304 | (unwind-protect |
| @@ -431,13 +431,16 @@ There should be no more than seven characters after the final `/'." | |||
| 431 | (jka-compr-run-real-handler 'write-region | 431 | (jka-compr-run-real-handler 'write-region |
| 432 | (list start end temp-file t 'dont)) | 432 | (list start end temp-file t 'dont)) |
| 433 | 433 | ||
| 434 | (jka-compr-call-process compress-program | 434 | ;; Here we must read the output of compress program as is |
| 435 | (concat compress-message | 435 | ;; without any code conversion. |
| 436 | " " base-name) | 436 | (let ((coding-system-for-read 'no-conversion)) |
| 437 | temp-file | 437 | (jka-compr-call-process compress-program |
| 438 | temp-buffer | 438 | (concat compress-message |
| 439 | nil | 439 | " " base-name) |
| 440 | compress-args) | 440 | temp-file |
| 441 | temp-buffer | ||
| 442 | nil | ||
| 443 | compress-args)) | ||
| 441 | 444 | ||
| 442 | (with-current-buffer temp-buffer | 445 | (with-current-buffer temp-buffer |
| 443 | (let ((coding-system-for-write 'no-conversion)) | 446 | (let ((coding-system-for-write 'no-conversion)) |
| @@ -496,7 +499,7 @@ There should be no more than seven characters after the final `/'." | |||
| 496 | (jka-compr-run-real-handler 'file-local-copy (list filename))) | 499 | (jka-compr-run-real-handler 'file-local-copy (list filename))) |
| 497 | local-file | 500 | local-file |
| 498 | size start | 501 | size start |
| 499 | (coding-system-for-read 'undecided) ) | 502 | (coding-system-for-read (or coding-system-for-read 'undecided)) ) |
| 500 | 503 | ||
| 501 | (setq local-file (or local-copy filename)) | 504 | (setq local-file (or local-copy filename)) |
| 502 | 505 | ||
| @@ -625,20 +628,28 @@ There should be no more than seven characters after the final `/'." | |||
| 625 | uncompress-message | 628 | uncompress-message |
| 626 | (message "%s %s..." uncompress-message base-name)) | 629 | (message "%s %s..." uncompress-message base-name)) |
| 627 | 630 | ||
| 628 | (jka-compr-call-process uncompress-program | 631 | ;; Here we must read the output of uncompress program |
| 629 | (concat uncompress-message | 632 | ;; and write it to TEMP-FILE without any code |
| 630 | " " base-name) | 633 | ;; conversion. An appropriate code conversion (if |
| 631 | local-file | 634 | ;; necessary) is done by the later I/O operation |
| 632 | t | 635 | ;; (e.g. load). |
| 633 | nil | 636 | (let ((coding-system-for-read 'no-conversion) |
| 634 | uncompress-args) | 637 | (coding-system-for-write 'no-conversion)) |
| 635 | 638 | ||
| 636 | (and | 639 | (jka-compr-call-process uncompress-program |
| 637 | uncompress-message | 640 | (concat uncompress-message |
| 638 | (message "%s %s...done" uncompress-message base-name)) | 641 | " " base-name) |
| 639 | 642 | local-file | |
| 640 | (write-region | 643 | t |
| 641 | (point-min) (point-max) temp-file nil 'dont)) | 644 | nil |
| 645 | uncompress-args) | ||
| 646 | |||
| 647 | (and | ||
| 648 | uncompress-message | ||
| 649 | (message "%s %s...done" uncompress-message base-name)) | ||
| 650 | |||
| 651 | (write-region | ||
| 652 | (point-min) (point-max) temp-file nil 'dont))) | ||
| 642 | 653 | ||
| 643 | (and | 654 | (and |
| 644 | local-copy | 655 | local-copy |