diff options
| author | Ivan Shmakov | 2019-06-25 19:54:35 +0200 |
|---|---|---|
| committer | Lars Ingebrigtsen | 2019-06-25 19:54:35 +0200 |
| commit | 0ab24743f1702aa52bb0bcb18798c698cc792da3 (patch) | |
| tree | 6044869736507b4e066410f9f60dc50ed54fd90a /lisp | |
| parent | f0151e17d296bfdeb1ca3f002c9b430c8302a6e7 (diff) | |
| download | emacs-0ab24743f1702aa52bb0bcb18798c698cc792da3.tar.gz emacs-0ab24743f1702aa52bb0bcb18798c698cc792da3.zip | |
Heed default directory in tar-untar-buffer
* lisp/tar-mode.el (tar-untar-buffer): Fix use the value of
default-directory local to the tar-mode buffer (bug#19865).
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/tar-mode.el | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el index 7ff31ff1026..472631f6ae7 100644 --- a/lisp/tar-mode.el +++ b/lisp/tar-mode.el | |||
| @@ -523,24 +523,29 @@ MODE should be an integer which is a file mode value." | |||
| 523 | "Extract all archive members in the tar-file into the current directory." | 523 | "Extract all archive members in the tar-file into the current directory." |
| 524 | (interactive) | 524 | (interactive) |
| 525 | ;; FIXME: make it work even if we're not in tar-mode. | 525 | ;; FIXME: make it work even if we're not in tar-mode. |
| 526 | (let ((descriptors tar-parse-info) ;Read the var in its buffer. | 526 | (let ((data-buf (if (tar-data-swapped-p) tar-data-buffer |
| 527 | (current-buffer))) | ||
| 527 | (reporter (make-progress-reporter "Extracting"))) | 528 | (reporter (make-progress-reporter "Extracting"))) |
| 528 | (with-current-buffer | 529 | (with-current-buffer data-buf |
| 529 | (if (tar-data-swapped-p) tar-data-buffer (current-buffer)) | 530 | (cl-assert (not enable-multibyte-characters))) |
| 530 | (set-buffer-multibyte nil) ;Hopefully, a no-op. | 531 | (dolist (descriptor tar-parse-info) |
| 531 | (dolist (descriptor descriptors) | 532 | (let* ((orig (tar-header-name descriptor)) |
| 532 | (let* ((name (tar-header-name descriptor)) | 533 | ;; Note that default-directory may have different values |
| 533 | (dir (if (eq (tar-header-link-type descriptor) 5) | 534 | ;; in the tar-mode and data buffers, so we stick to the |
| 534 | name | 535 | ;; absolute file name from now on. |
| 535 | (file-name-directory name))) | 536 | (name (expand-file-name orig)) |
| 536 | (link-desc (tar--describe-as-link descriptor)) | 537 | (dir (if (eq (tar-header-link-type descriptor) 5) |
| 537 | (start (tar-header-data-start descriptor)) | 538 | name |
| 538 | (end (+ start (tar-header-size descriptor)))) | 539 | (file-name-directory name))) |
| 540 | (link-desc (tar--describe-as-link descriptor)) | ||
| 541 | (start (tar-header-data-start descriptor)) | ||
| 542 | (end (+ start (tar-header-size descriptor)))) | ||
| 543 | (unless (file-directory-p name) | ||
| 544 | (progress-reporter-update reporter name) | ||
| 545 | (if (and dir (not (file-exists-p dir))) | ||
| 546 | (make-directory dir t)) | ||
| 539 | (unless (file-directory-p name) | 547 | (unless (file-directory-p name) |
| 540 | (progress-reporter-update reporter name) | 548 | (with-current-buffer data-buf |
| 541 | (if (and dir (not (file-exists-p dir))) | ||
| 542 | (make-directory dir t)) | ||
| 543 | (unless (file-directory-p name) | ||
| 544 | (let ((coding-system-for-write 'no-conversion) | 549 | (let ((coding-system-for-write 'no-conversion) |
| 545 | (write-region-inhibit-fsync t)) | 550 | (write-region-inhibit-fsync t)) |
| 546 | (when link-desc | 551 | (when link-desc |
| @@ -548,8 +553,8 @@ MODE should be an integer which is a file mode value." | |||
| 548 | "Extracted `%s', %s, as a normal file" | 553 | "Extracted `%s', %s, as a normal file" |
| 549 | name link-desc)) | 554 | name link-desc)) |
| 550 | (write-region start end name nil :nomessage))) | 555 | (write-region start end name nil :nomessage))) |
| 551 | (set-file-modes name (tar-header-mode descriptor))))) | 556 | (set-file-modes name (tar-header-mode descriptor)))))) |
| 552 | (progress-reporter-done reporter)))) | 557 | (progress-reporter-done reporter))) |
| 553 | 558 | ||
| 554 | (defun tar-summarize-buffer () | 559 | (defun tar-summarize-buffer () |
| 555 | "Parse the contents of the tar file in the current buffer." | 560 | "Parse the contents of the tar file in the current buffer." |