summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1995-10-30 19:18:52 +0000
committerRichard M. Stallman <rms@gnu.org>1995-10-30 19:18:52 +0000
commit874531adf4bddc69f6f948630fa2cf4c6bed4af8 (patch)
treeec0db576c6da1322ae24c2cb6afb88e09e91f676
parent8195fcd1fccbb382a83ec36aa6da81e50101af69 (diff)
downloademacs-874531adf4bddc69f6f948630fa2cf4c6bed4af8.tar.gz
(archive-zoo-summarize): Handle archives with long file names.
-rw-r--r--lisp/arc-mode.el20
1 files changed, 17 insertions, 3 deletions
diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index da4b2317014..7033aeaea2b 100644
--- a/lisp/arc-mode.el
+++ b/lisp/arc-mode.el
@@ -1428,9 +1428,23 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
(modtime (archive-l-e (+ p 16) 2))
(ucsize (archive-l-e (+ p 20) 4))
(namefld (buffer-substring (+ p 38) (+ p 38 13)))
- (fnlen (or (string-match "\0" namefld) 13))
- (efnname (substring namefld 0 fnlen))
- (fiddle (string= efnname (upcase efnname)))
+ (dirtype (char-after (+ p 4)))
+ (lfnlen (if (= dirtype 2) (char-after (+ p 56)) 0))
+ (ldirlen (if (= dirtype 2) (char-after (+ p 57)) 0))
+ (fnlen (+ ldirlen
+ (if (> lfnlen 0)
+ (1- lfnlen)
+ (or (string-match "\0" namefld) 13))))
+ (efnname (concat
+ (if (> ldirlen 0)
+ (concat (buffer-substring
+ (+ p 58 lfnlen) (+ p 58 lfnlen ldirlen -1))
+ "/")
+ "")
+ (if (> lfnlen 0)
+ (buffer-substring (+ p 58) (+ p 58 lfnlen -1))
+ (substring namefld 0 fnlen))))
+ (fiddle (and (= lfnlen 0) (string= efnname (upcase efnname))))
(ifnname (if fiddle (downcase efnname) efnname))
(text (format " %8d %-11s %-8s %s"
ucsize