Function: mm-dissect-archive

mm-dissect-archive is an autoloaded and byte-compiled function defined in mm-archive.el.gz.

Signature

(mm-dissect-archive HANDLE)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/mm-archive.el.gz
(defun mm-dissect-archive (handle)
  (let* ((type (car (mm-handle-type handle)))
	 (decoder (cddr (assoc type mm-archive-decoders)))
	 dir)
    (unless decoder
      (error "No decoder found for %s" type))
    (with-file-modes #o700
      (setq dir (make-temp-file (expand-file-name "emm." mm-tmp-directory)
				'dir)))
    (unwind-protect
	(progn
	  (mm-with-unibyte-buffer
	    (mm-insert-part handle)
	    (if (member "%f" decoder)
		(let ((file (expand-file-name "mail.zip" dir)))
		  (write-region (point-min) (point-max) file nil 'silent)
		  (setq decoder (copy-sequence decoder))
		  (setcar (member "%f" decoder) file)
		  (apply #'call-process (car decoder) nil nil nil
			 (append (cdr decoder) (list dir)))
		  (delete-file file))
	      (apply #'call-process-region (point-min) (point-max) (car decoder)
		     nil (gnus-get-buffer-create "*tnef*")
		     nil (append (cdr decoder) (list dir)))))
	  `("multipart/mixed"
	    ,handle
	    ,@(mm-archive-list-files (gnus-recursive-directory-files dir))))
      (delete-directory dir t))))