Fix unpacking ZIP archives on MS-Windows
* lisp/arc-mode.el (archive-zip-summarize): Decode file names as UTF-8 when bit 11 of flags is set, even on MS-Windows. (Bug#65305)
This commit is contained in:
parent
3712e8bc38
commit
205d87cdca
1 changed files with 7 additions and 1 deletions
|
@ -1990,6 +1990,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
||||||
(setq p (+ p (point-min)))
|
(setq p (+ p (point-min)))
|
||||||
(while (string= "PK\001\002" (buffer-substring p (+ p 4)))
|
(while (string= "PK\001\002" (buffer-substring p (+ p 4)))
|
||||||
(let* ((creator (get-byte (+ p 5)))
|
(let* ((creator (get-byte (+ p 5)))
|
||||||
|
(gpflags (archive-l-e (+ p 8) 2))
|
||||||
;; (method (archive-l-e (+ p 10) 2))
|
;; (method (archive-l-e (+ p 10) 2))
|
||||||
(modtime (archive-l-e (+ p 12) 2))
|
(modtime (archive-l-e (+ p 12) 2))
|
||||||
(moddate (archive-l-e (+ p 14) 2))
|
(moddate (archive-l-e (+ p 14) 2))
|
||||||
|
@ -2001,7 +2002,12 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
||||||
(efnname (let ((str (buffer-substring (+ p 46) (+ p 46 fnlen))))
|
(efnname (let ((str (buffer-substring (+ p 46) (+ p 46 fnlen))))
|
||||||
(decode-coding-string
|
(decode-coding-string
|
||||||
str
|
str
|
||||||
(or (if (and w32-fname-encoding
|
;; Bit 11 of general purpose bit flags (bytes
|
||||||
|
;; 8-9) of Central Directory: 1 means UTF-8
|
||||||
|
;; encoded file names.
|
||||||
|
(or (if (/= 0 (logand gpflags #x0800))
|
||||||
|
'utf-8-unix)
|
||||||
|
(if (and w32-fname-encoding
|
||||||
(memq creator
|
(memq creator
|
||||||
;; This should be just 10 and
|
;; This should be just 10 and
|
||||||
;; 14, but InfoZip uses 0 and
|
;; 14, but InfoZip uses 0 and
|
||||||
|
|
Loading…
Add table
Reference in a new issue