[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/tar-mode.el,v [EMACS_22_BASE]
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/tar-mode.el,v [EMACS_22_BASE] |
Date: |
Sun, 25 May 2008 13:48:25 +0000 |
CVSROOT: /sources/emacs
Module name: emacs
Branch: EMACS_22_BASE
Changes by: Stefan Monnier <monnier> 08/05/25 13:48:22
Index: tar-mode.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/tar-mode.el,v
retrieving revision 1.108.2.5
retrieving revision 1.108.2.6
diff -u -b -r1.108.2.5 -r1.108.2.6
--- tar-mode.el 7 Jan 2008 02:44:13 -0000 1.108.2.5
+++ tar-mode.el 25 May 2008 13:48:22 -0000 1.108.2.6
@@ -421,6 +421,16 @@
(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 @@
(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,
- [Emacs-diffs] Changes to emacs/lisp/tar-mode.el,v [EMACS_22_BASE],
Stefan Monnier <=