--- gnus-art.el.~6.378.~ 1970-01-01 10:00:01.000000000 +1000 +++ gnus-art.el 2003-11-23 08:46:48.000000000 +1000 @@ -4140,9 +4140,14 @@ (eval-when-compile ;; jka-compr.el uses a "sh -c" to direct stderr to err-file, but these days ;; emacs can do that itself. ;; -(defun gnus-mime-jka-compr-maybe-uncompress () - "Uncompress the current buffer if `auto-compression-mode' is enabled. -The uncompress method used is derived from `buffer-file-name'." +;; The temporary unibyte buffer used is necessary to get the right bytes out +;; of call-process-region in Emacs 20. In Emacs 21 unibyte data can be +;; successfully sent via a multibyte buffer, but not in Emacs 20. +;; +(defun gnus-mime-jka-compr-maybe-uncompress (contents) + "Uncompress CONTENTS if `auto-compression-mode' is enabled. +The uncompress method used is derived from `buffer-file-name'. +CONTENTS should be a unibyte string." (when (and (fboundp 'jka-compr-installed-p) (jka-compr-installed-p)) (let ((info (jka-compr-get-compression-info buffer-file-name))) @@ -4151,18 +4156,22 @@ (defun gnus-mime-jka-compr-maybe-uncompr (args (jka-compr-info-uncompress-args info)) (prog (jka-compr-info-uncompress-program info)) (message (jka-compr-info-uncompress-message info)) - (err-file (jka-compr-make-temp-name))) + (err-file (jka-compr-make-temp-name)) + (out-buf (current-buffer))) + (erase-buffer) + (mm-with-unibyte-buffer + (insert contents) (if message (message "%s %s..." message basename)) (unwind-protect (unless (memq (apply 'call-process-region (point-min) (point-max) prog - t (list t err-file) nil + nil (list out-buf err-file) nil args) jka-compr-acceptable-retval-list) (jka-compr-error prog args basename message err-file)) - (jka-compr-delete-temp-file err-file))))))) + (jka-compr-delete-temp-file err-file)))))))) (defun gnus-mime-copy-part (&optional handle) "Put the MIME part under point into a new buffer. @@ -4187,7 +4196,7 @@ (defun gnus-mime-copy-part (&optional ha (unwind-protect (progn (setq buffer-file-name (expand-file-name base)) - (gnus-mime-jka-compr-maybe-uncompress) + (gnus-mime-jka-compr-maybe-uncompress contents) (normal-mode)) (setq buffer-file-name nil)) (goto-char (point-min)))))