comparison lisp/gnus/mm-decode.el @ 92769:734bb318f69e

(mm-with-part): Set the buffer to unibyte before inserting the handle-buffer's text, so the implicit multibyte->unibyte conversion uses string-make-unibyte rather than string-as-unibyte.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 12 Mar 2008 18:30:52 +0000
parents d3767aa9ae49
children 3bf6293f3041
comparison
equal deleted inserted replaced
92768:f2df8a37cf42 92769:734bb318f69e
661 (setq parts (nconc (list (mm-dissect-buffer t nil from)) parts))))) 661 (setq parts (nconc (list (mm-dissect-buffer t nil from)) parts)))))
662 (mm-possibly-verify-or-decrypt (nreverse parts) ctl))) 662 (mm-possibly-verify-or-decrypt (nreverse parts) ctl)))
663 663
664 (defun mm-copy-to-buffer () 664 (defun mm-copy-to-buffer ()
665 "Copy the contents of the current buffer to a fresh buffer." 665 "Copy the contents of the current buffer to a fresh buffer."
666 (let ((obuf (current-buffer)) 666 (let ((obuf (current-buffer))
667 beg) 667 beg)
668 (goto-char (point-min)) 668 (goto-char (point-min))
669 (search-forward-regexp "^\n" nil t) 669 (search-forward-regexp "^\n" nil t)
670 (setq beg (point)) 670 (setq beg (point))
671 (with-current-buffer 671 (with-current-buffer
672 ;; Preserve the data's unibyteness (for url-insert-file-contents). 672 ;; Preserve the data's unibyteness (for url-insert-file-contents).
673 (let ((default-enable-multibyte-characters (mm-multibyte-p))) 673 (let ((default-enable-multibyte-characters (mm-multibyte-p)))
674 (generate-new-buffer " *mm*")) 674 (generate-new-buffer " *mm*"))
675 (insert-buffer-substring obuf beg) 675 (insert-buffer-substring obuf beg)
1125 ;;; Functions for outputting parts 1125 ;;; Functions for outputting parts
1126 ;;; 1126 ;;;
1127 1127
1128 (defmacro mm-with-part (handle &rest forms) 1128 (defmacro mm-with-part (handle &rest forms)
1129 "Run FORMS in the temp buffer containing the contents of HANDLE." 1129 "Run FORMS in the temp buffer containing the contents of HANDLE."
1130 `(let* ((handle ,handle) 1130 ;; The handle-buffer's content is a sequence of bytes, not a sequence of
1131 ;; The multibyteness of the temp buffer should be turned on 1131 ;; chars, so the buffer should be unibyte. It may happen that the
1132 ;; if inserting a multibyte string. Contrarily, the buffer's 1132 ;; handle-buffer is multibyte for some reason, in which case now is a good
1133 ;; multibyteness should be off if inserting a unibyte string, 1133 ;; time to adjust it, since we know at this point that it should
1134 ;; especially if a string contains 8bit data. 1134 ;; be unibyte.
1135 (default-enable-multibyte-characters 1135 `(let* ((handle ,handle))
1136 (with-current-buffer (mm-handle-buffer handle)
1137 (mm-multibyte-p))))
1138 (with-temp-buffer 1136 (with-temp-buffer
1137 (mm-disable-multibyte)
1139 (insert-buffer-substring (mm-handle-buffer handle)) 1138 (insert-buffer-substring (mm-handle-buffer handle))
1140 (mm-disable-multibyte)
1141 (mm-decode-content-transfer-encoding 1139 (mm-decode-content-transfer-encoding
1142 (mm-handle-encoding handle) 1140 (mm-handle-encoding handle)
1143 (mm-handle-media-type handle)) 1141 (mm-handle-media-type handle))
1144 ,@forms))) 1142 ,@forms)))
1145 (put 'mm-with-part 'lisp-indent-function 1) 1143 (put 'mm-with-part 'lisp-indent-function 1)