--- /Applications/Emacs.app/Contents/Resources/lisp/arc-mode.el 2011-01-09 00:14:24.000000000 -0800
+++ crx-arc-mode.el 2011-01-09 00:20:00.000000000 -0800
@@ -694,6 +694,7 @@
;; as an archive by other software.
(let (case-fold-search)
(cond ((looking-at "[P]K\003\004") 'zip)
+ ((looking-at "Cr24") 'zip)
((looking-at "..-l[hz][0-9ds]-") 'lzh)
((looking-at "....................[\334]\247\304\375") 'zoo)
((and (looking-at "\C-z") ; signature too simple, IMHO
@@ -1021,7 +1022,7 @@
(apply 'call-process
(car command)
nil
- t
+ '(t nil) ;;; stdout to current buffer, stderr to /dev/null
nil
(append (cdr command) (list archive name))))
@@ -1659,7 +1660,17 @@
(defun archive-zip-summarize ()
(goto-char (- (point-max) (- 22 18)))
(search-backward-regexp "[P]K\005\006")
- (let ((p (+ (point-min) (archive-l-e (+ (point) 16) 4)))
+ ;;; Google Chrome Extensions prepend a 16 bytes + pubkey + signature header to
+ ;;; an otherwise zip:y file: http://code.google.com/chrome/extensions/crx.html
+ (let ((p (+ (point-min)
+ ;;; if a Google Chrome extension, add its leading header block:
+ (if (string-equal "Cr24" (buffer-substring (point-min)
+ (+ (point-min) 4)))
+ (+ 16 ;;; Chrome header
+ (archive-l-e (+ (point-min) 8) 4) ;;; pubkey length
+ (archive-l-e (+ (point-min) 12) 4)) ;;; signature length
+ 0) ; no -- not a Google Chrome extension
+ (archive-l-e (+ (point) 16) 4)))
(maxlen 8)
(totalsize 0)
files