Function: package-untar-buffer

package-untar-buffer is a byte-compiled function defined in package.el.gz.

Signature

(package-untar-buffer DIR)

Documentation

Untar the current buffer.

This uses tar-untar-buffer from Tar mode. All files should untar into a directory named DIR; otherwise, signal an error.

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/package.el.gz
(defun package-untar-buffer (dir)
  "Untar the current buffer.
This uses `tar-untar-buffer' from Tar mode.  All files should
untar into a directory named DIR; otherwise, signal an error."
  (tar-mode)
  (unwind-protect
      (progn
        ;; Make sure everything extracts into DIR.
        (let ((regexp (concat "\\`" (regexp-quote (expand-file-name dir)) "/"))
              (case-fold-search (file-name-case-insensitive-p dir)))
          (dolist (tar-data tar-parse-info)
            (let ((name (expand-file-name (tar-header-name tar-data))))
              (or (string-match regexp name)
                  ;; Tarballs created by some utilities don't list
                  ;; directories with a trailing slash (Bug#13136).
                  (and (string-equal (expand-file-name dir) name)
                       (eq (tar-header-link-type tar-data) 5))
                  (error "Package does not untar cleanly into directory %s/"
                         dir)))))
        (tar-untar-buffer))
    (fundamental-mode)))                ; free auxiliary tar-mode data