aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1998-01-25 01:57:08 +0000
committerRichard M. Stallman1998-01-25 01:57:08 +0000
commita56636aeddefe7346656afdf432a16dcef3b390d (patch)
treee75a545ac28ac1944fa1d399df493831c2837551
parenteb35b62861225201fae38b4fb3a4b265e2c1ecf6 (diff)
downloademacs-a56636aeddefe7346656afdf432a16dcef3b390d.tar.gz
emacs-a56636aeddefe7346656afdf432a16dcef3b390d.zip
(archive-find-type): Accept d or s after digit, for lzh.
(archive-rename-entry): Likewise. Parse mode, uid and gid right. Allow newline in header. (archive-lzh-summarize): Fix paren error. Use prname to set `files'.
-rw-r--r--lisp/arc-mode.el46
1 files changed, 37 insertions, 9 deletions
diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index 0936e1f40db..02072c95746 100644
--- a/lisp/arc-mode.el
+++ b/lisp/arc-mode.el
@@ -671,7 +671,7 @@ archive.
671 ;; as an archive by other software. 671 ;; as an archive by other software.
672 (let (case-fold-search) 672 (let (case-fold-search)
673 (cond ((looking-at "[P]K\003\004") 'zip) 673 (cond ((looking-at "[P]K\003\004") 'zip)
674 ((looking-at "..-l[hz][0-9]-") 'lzh) 674 ((looking-at "..-l[hz][0-9ds]-") 'lzh)
675 ((looking-at "....................[\334]\247\304\375") 'zoo) 675 ((looking-at "....................[\334]\247\304\375") 'zoo)
676 ((and (looking-at "\C-z") ; signature too simple, IMHO 676 ((and (looking-at "\C-z") ; signature too simple, IMHO
677 (string-match "\\.[aA][rR][cC]$" 677 (string-match "\\.[aA][rR][cC]$"
@@ -1276,23 +1276,51 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
1276 (maxlen 8) 1276 (maxlen 8)
1277 files 1277 files
1278 visual) 1278 visual)
1279 (while (progn (goto-char p) (looking-at "..-l[hz][0-9]-")) 1279 (while (progn (goto-char p)
1280 (looking-at "\\(.\\|\n\\)\\(.\\|\n\\)-l[hz][0-9ds]-"))
1280 (let* ((hsize (char-after p)) 1281 (let* ((hsize (char-after p))
1281 (csize (archive-l-e (+ p 7) 4)) 1282 (csize (archive-l-e (+ p 7) 4))
1282 (ucsize (archive-l-e (+ p 11) 4)) 1283 (ucsize (archive-l-e (+ p 11) 4))
1283 (modtime (archive-l-e (+ p 15) 2)) 1284 (modtime (archive-l-e (+ p 15) 2))
1284 (moddate (archive-l-e (+ p 17) 2)) 1285 (moddate (archive-l-e (+ p 17) 2))
1286 (hdrlvl (char-after (+ p 20)))
1285 (fnlen (char-after (+ p 21))) 1287 (fnlen (char-after (+ p 21)))
1286 (efnname (buffer-substring (+ p 22) (+ p 22 fnlen))) 1288 (efnname (buffer-substring (+ p 22) (+ p 22 fnlen)))
1287 (fiddle (string= efnname (upcase efnname))) 1289 (fiddle (string= efnname (upcase efnname)))
1288 (ifnname (if fiddle (downcase efnname) efnname)) 1290 (ifnname (if fiddle (downcase efnname) efnname))
1289 (p2 (+ p 22 fnlen)) 1291 (p2 (+ p 22 fnlen))
1290 (creator (if (>= (- hsize fnlen) 24) (char-after (+ p2 2)) 0)) 1292 (creator (if (>= (- hsize fnlen) 24) (char-after (+ p2 2)) 0))
1291 (mode (if (= creator ?U) (archive-l-e (+ p2 8) 2) ?\666)) 1293 mode modestr uid gid text path prname
1292 (modestr (if mode (archive-int-to-mode mode) "??????????")) 1294 )
1293 (uid (if (= creator ?U) (archive-l-e (+ p2 10) 2))) 1295 (if (= hdrlvl 0)
1294 (gid (if (= creator ?U) (archive-l-e (+ p2 12) 2))) 1296 (setq mode (if (= creator ?U) (archive-l-e (+ p2 8) 2) ?\666)
1295 (text (if archive-alternate-display 1297 uid (if (= creator ?U) (archive-l-e (+ p2 10) 2))
1298 gid (if (= creator ?U) (archive-l-e (+ p2 12) 2)))
1299 (if (= creator ?U)
1300 (let* ((p3 (+ p2 3))
1301 (hsize (archive-l-e p3 2))
1302 (etype (char-after (+ p3 2))))
1303 (while (not (= hsize 0))
1304 (cond
1305 ((= etype 2) (let ((i (+ p3 3)))
1306 (while (< i (+ p3 hsize))
1307 (setq path (concat path
1308 (if (= (char-after i)
1309 255)
1310 "/"
1311 (char-to-string
1312 (char-after i)))))
1313 (setq i (1+ i)))))
1314 ((= etype 80) (setq mode (archive-l-e (+ p3 3) 2)))
1315 ((= etype 81) (progn (setq uid (archive-l-e (+ p3 3) 2))
1316 (setq gid (archive-l-e (+ p3 5) 2))))
1317 )
1318 (setq p3 (+ p3 hsize))
1319 (setq hsize (archive-l-e p3 2))
1320 (setq etype (char-after (+ p3 2)))))))
1321 (setq prname (if path (concat path ifnname) ifnname))
1322 (setq modestr (if mode (archive-int-to-mode mode) "??????????"))
1323 (setq text (if archive-alternate-display
1296 (format " %8d %5S %5S %s" 1324 (format " %8d %5S %5S %s"
1297 ucsize 1325 ucsize
1298 (or uid "?") 1326 (or uid "?")
@@ -1303,14 +1331,14 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
1303 ucsize 1331 ucsize
1304 (archive-dosdate moddate) 1332 (archive-dosdate moddate)
1305 (archive-dostime modtime) 1333 (archive-dostime modtime)
1306 ifnname)))) 1334 ifnname)))
1307 (setq maxlen (max maxlen fnlen) 1335 (setq maxlen (max maxlen fnlen)
1308 totalsize (+ totalsize ucsize) 1336 totalsize (+ totalsize ucsize)
1309 visual (cons (vector text 1337 visual (cons (vector text
1310 (- (length text) (length ifnname)) 1338 (- (length text) (length ifnname))
1311 (length text)) 1339 (length text))
1312 visual) 1340 visual)
1313 files (cons (vector efnname ifnname fiddle mode (1- p)) 1341 files (cons (vector prname ifnname fiddle mode (1- p))
1314 files) 1342 files)
1315 p (+ p hsize 2 csize)))) 1343 p (+ p hsize 2 csize))))
1316 (goto-char (point-min)) 1344 (goto-char (point-min))