Subject: bug#1862 closed by Stefan Monnier <[email-masked]> (Re: bug#1862: 23.0.60; tar-mode on posix ustar)

From: [email-masked] (Emacs bug Tracking System)
Date: Mon, 12 Jan 2009 03:45:03 +0000

This is an automatic notification regarding your bug report
which was filed against the emacs package:

#1862: 23.0.60; tar-mode on posix ustar

It has been closed by Stefan Monnier <[email-masked]>.

Their explanation is attached below along with your original report.
If this explanation is unsatisfactory and you have not received a
better one in a separate message then please contact Stefan Monnier <[email-masked]> by
replying to this email.

-- 
1862: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=1862
Emacs Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#1862: 23.0.60; tar-mode on posix ustar
From: Stefan Monnier <[email-masked]>
To: [email-masked]
Date: Sun, 11 Jan 2009 22:38:24 -0500

> Such a file is generated by the perl Archive::Tar module.  It uses the
> posix style magic "ustar\0", with digits "00" in the `version' field.
> But I think tar-header-block-tokenize only recognises a nul "\000" in
> that version field (in addition to ``OLDGNU'' style which is a space).

Indeed, the code didn't pay attention to the version field, but
incorrectly clipped it out.  I've installed a similar fix to yours, just
a bit simpler.

        Stefan

Subject: 23.0.60; tar-mode on posix ustar
From: Kevin Ryde <[email-masked]>
To: [email-masked]
Date: Mon, 12 Jan 2009 11:37:11 +1100

Running

   emacs -Q File-Corresponding-0.003.tar.gz

on that file from

   http://search.cpan.org/CPAN/authors/id/J/JO/JOHANL/File-Corresponding-0.003.tar.gz

(about 14 kbytes) produces a buffer like

   drwxrwxrwx       0/0             0 File-Corresponding-0.003
   -r--r--r--       0/0          1274 Build.PL
   -r--r--r--       0/0           382 Changes
   -r--r--r--       0/0          1272 Makefile.PL
   ...

where I hoped it would show the directory part of each name, the same as
shown by "tar tvf" (GNU tar 1.20),

   File-Corresponding-0.003
   File-Corresponding-0.003/Build.PL
   File-Corresponding-0.003/Changes
   File-Corresponding-0.003/Makefile.PL
   ...

Such a file is generated by the perl Archive::Tar module.  It uses the
posix style magic "ustar\0", with digits "00" in the `version' field.
But I think tar-header-block-tokenize only recognises a nul "\000" in
that version field (in addition to ``OLDGNU'' style which is a space).

I get some joy from the change below.  Are those two places the only
ones wanting to match the extra form?

2009-01-10  Kevin Ryde  <[email-masked]>

	* tar-mode.el (tar-header-block-tokenize): Recognise posix
	"ustar\0\060" magic for long filenames.

In GNU Emacs 23.0.60.12 (i586-pc-linux-gnu, GTK+ Version 2.12.11)
 of 2009-01-07 on blah.blah
configured using `configure  'CFLAGS=-O -g' '--prefix=/down/emacs/b/inst' '--with-x-toolkit=gtk''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_AU
  value of $XMODIFIERS: nil
  locale-coding-system: iso-latin-1-unix
  default-enable-multibyte-characters: t

*** tar-mode.el	12 Jan 2009 11:33:35 +1100	1.135
--- tar-mode.el	12 Jan 2009 11:33:59 +1100	
***************
*** 240,246 ****
               (link-p (aref string tar-linkp-offset))
               (magic-str (substring string tar-magic-offset
                                     (1- tar-uname-offset)))
!              (uname-valid-p (car (member magic-str '("ustar  " "ustar\0\0"))))
               name linkname
               (nulsexp   "[^\000]*\000"))
          (when (string-match nulsexp string tar-name-offset)
--- 240,249 ----
               (link-p (aref string tar-linkp-offset))
               (magic-str (substring string tar-magic-offset
                                     (1- tar-uname-offset)))
!              (uname-valid-p (car (member magic-str
!                                          '("ustar  "   ;; "OLDGNU"
!                                            "ustar\0\0" ;; per tar-rename-entry
!                                            "ustar\0\060")))) ;; POSIX
               name linkname
               (nulsexp   "[^\000]*\000"))
          (when (string-match nulsexp string tar-name-offset)
***************
*** 256,262 ****
                           nil
                         (- link-p ?0)))
          (setq linkname (substring string tar-link-offset link-end))
!         (when (and (equal uname-valid-p "ustar\0\0")
                     (string-match nulsexp string tar-prefix-offset)
                     (> (match-end 0) (1+ tar-prefix-offset)))
            (setq name (concat (substring string tar-prefix-offset
--- 259,266 ----
                           nil
                         (- link-p ?0)))
          (setq linkname (substring string tar-link-offset link-end))
!         (when (and (member uname-valid-p '("ustar\0\0" ;; tar-rename-entry
!                                            "ustar\0\060")) ;; POSIX
                     (string-match nulsexp string tar-prefix-offset)
                     (> (match-end 0) (1+ tar-prefix-offset)))
            (setq name (concat (substring string tar-prefix-offset