Mercurial > emacs
changeset 77274:d966323ac214
(archive-lzh-summarize): Only apply the "downcase if all upcase" rule
to OS-ID 0 "generic". Always downcase for OS-ID M "MSDOS".
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Mon, 16 Apr 2007 19:40:14 +0000 |
parents | 175da25b05d8 |
children | 4f12dfa24414 |
files | lisp/arc-mode.el |
diffstat | 1 files changed, 17 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/arc-mode.el Mon Apr 16 19:38:10 2007 +0000 +++ b/lisp/arc-mode.el Mon Apr 16 19:40:14 2007 +0000 @@ -1415,7 +1415,7 @@ (time2 (archive-l-e (+ p 17) 2)) ;and UNIX format in level 2 header.) (hdrlvl (char-after (+ p 20))) ;header level thsize ;total header size (base + extensions) - fnlen efnname fiddle ifnname width p2 + fnlen efnname osid fiddle ifnname width p2 neh ;beginning of next extension header (level 1 and 2) mode modestr uid gid text dir prname gname uname modtime moddate) @@ -1474,7 +1474,22 @@ (setq thsize (- neh p)))) (if (= hdrlvl 0) ;total header size (setq thsize hsize)) - (setq fiddle (if efnname (string= efnname (upcase efnname)))) + ;; OS ID field not present in level 0 header, use code 0 "generic" + ;; in that case as per lha program header.c get_header() + (setq osid (cond ((= hdrlvl 0) 0) + ((= hdrlvl 1) (char-after (+ p 22 fnlen 2))) + ((= hdrlvl 2) (char-after (+ p 23))))) + ;; Filename fiddling must follow the lha program, otherwise the name + ;; passed to "lha pq" etc won't match (which for an extract silently + ;; results in no output). As of version 1.14i it goes from the OS ID, + ;; - For 'M' MSDOS: msdos_to_unix_filename() downcases always, and + ;; converts "\" to "/". + ;; - For 0 generic: generic_to_unix_filename() downcases if there's + ;; no lower case already present, and converts "\" to "/". + ;; - For 'm' MacOS: macos_to_unix_filename() changes "/" to ":" and + ;; ":" to "/" + (setq fiddle (cond ((= ?M osid) t) + ((= 0 osid) (string= efnname (upcase efnname))))) (setq ifnname (if fiddle (downcase efnname) efnname)) (setq prname (if dir (concat dir ifnname) ifnname)) (setq width (if prname (string-width prname) 0))