1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-01 11:14:55 +00:00

(tar-summarize-buffer): Handle GNU Tar @LongLink format.

This commit is contained in:
Stefan Monnier 2008-05-25 13:48:22 +00:00
parent b9a6ed295c
commit a0fefe5742
2 changed files with 21 additions and 9 deletions

View File

@ -1,3 +1,7 @@
2008-05-25 Stefan Monnier <monnier@iro.umontreal.ca>
* tar-mode.el (tar-summarize-buffer): Handle GNU Tar @LongLink format.
2008-05-24 Alan Mackenzie <acm@muc.de>
* progmodes/cc-mode.el (c-postprocess-file-styles): Throw an error

View File

@ -421,6 +421,16 @@ is visible (and the real data of the buffer is hidden)."
(tar-header-block-tokenize
(buffer-substring pos (+ pos 512)))))))
(setq pos (+ pos 512))
(when (equal (tar-header-name tokens) "././@LongLink")
;; This is a GNU Tar long-file-name header.
(let* ((size (tar-header-size tokens))
;; -1 so as to strip the terminating 0 byte.
(name (buffer-substring pos (+ pos size -1))))
(setq pos (+ pos (ash (ash (+ 511 size) -9) 9)))
(setq tokens (tar-header-block-tokenize
(buffer-substring pos (+ pos 512))))
(tar-setf (tar-header-name tokens) name)
(setq pos (+ pos 512))))
(progress-reporter-update progress-reporter pos)
(if (memq (tar-header-link-type tokens) '(20 55))
;; Foo. There's an extra empty block after these.
@ -429,20 +439,18 @@ is visible (and the real data of the buffer is hidden)."
(if (< size 0)
(error "%s has size %s - corrupted"
(tar-header-name tokens) size))
;
; This is just too slow. Don't really need it anyway....
;(tar-header-block-check-checksum
; hblock (tar-header-block-checksum hblock)
; (tar-header-name tokens))
;;
;; This is just too slow. Don't really need it anyway....
;;(tar-header-block-check-checksum
;; hblock (tar-header-block-checksum hblock)
;; (tar-header-name tokens))
(push (make-tar-desc pos tokens) result)
(and (null (tar-header-link-type tokens))
(> size 0)
(setq pos
(+ pos 512 (ash (ash (1- size) -9) 9)) ; this works
;(+ pos (+ size (- 512 (rem (1- size) 512)))) ; this doesn't
))))
;; Round up to a multiple of 512.
(setq pos (+ pos (ash (ash (+ 511 size) -9) 9))))))
(make-local-variable 'tar-parse-info)
(setq tar-parse-info (nreverse result))
;; A tar file should end with a block or two of nulls,