Function: archive-extract-by-file

archive-extract-by-file is a byte-compiled function defined in arc-mode.el.gz.

Signature

(archive-extract-by-file ARCHIVE NAME COMMAND &optional STDOUT-TEST)

Source Code

;; Defined in /usr/src/emacs/lisp/arc-mode.el.gz
(defun archive-extract-by-file (archive name command &optional stdout-test)
  (let ((dest (make-temp-file "arc-dir" 'dir))
	(stdout-file (make-temp-file "arc-stdout")))
    (unwind-protect
	(prog1
	    (apply #'call-process
		   (car command)
		   nil
		   `(:file ,stdout-file)
		   nil
                   `(,archive ,name ,@(cdr command) ,dest))
	  (with-temp-buffer
	    (insert-file-contents stdout-file)
	    (goto-char (point-min))
	    (when (if (stringp stdout-test)
		      (not (re-search-forward stdout-test nil t))
		    (> (buffer-size) 0))
	      (message "%s" (buffer-string))))
	  (if (file-exists-p (expand-file-name name dest))
	      (insert-file-contents-literally (expand-file-name name dest))))
      (if (file-exists-p stdout-file)
	  (delete-file stdout-file))
      (if (file-exists-p (expand-file-name name dest))
	  (delete-file (expand-file-name name dest)))
      (while (file-name-directory name)
	(setq name (directory-file-name (file-name-directory name)))
	(when (file-directory-p (expand-file-name name dest))
	  (delete-directory (expand-file-name name dest))))
      (when (file-directory-p dest)
	(delete-directory dest)))))