Fix endianness

This commit is contained in:
Gregor Kleen 2017-10-17 15:44:08 +02:00
parent f1e610d48f
commit f6a40e6d21
2 changed files with 9 additions and 6 deletions

View File

@ -151,8 +151,8 @@ unZipStream = next where
centralBody 0x06054b50 = EndOfCentralDirectory <$> endDirectory
centralBody sig = fail $ "Unknown header signature: " ++ show sig
fileHeader = do
G.getWord8 -- OS Version
ver <- G.getWord8
G.getWord8 -- OS Version
when (ver > zipVersion) $ fail $ "Unsupported version: " ++ show ver
gpf <- G.getWord16le
-- when (gpf .&. complement (bit 1 .|. bit 2 .|. bit 3) /= 0) $ fail $ "Unsupported flags: " ++ show gpf

View File

@ -129,7 +129,8 @@ zipStream ZipOptions{..} = execStateC 0 $ do
off <- get
output $ do
P.putWord32le 0x04034b50
P.putWord16le $ if z64 then 45 else 20
P.putWord8 $ if z64 then 45 else 20
P.putWord8 osVersion
common
P.putWord32le $ fromMaybe 0 mcrc
P.putWord32le $ if z64 then maxBound32 else maybe 0 fromIntegral csiz
@ -165,9 +166,10 @@ zipStream ZipOptions{..} = execStateC 0 $ do
l64 = z64 ?* 16 + o64 ?* 8
a64 = z64 || o64
P.putWord32le 0x02014b50
P.putWord8 osVersion
P.putWord8 zipVersion
P.putWord16le $ if a64 then 45 else 20
P.putWord8 osVersion
P.putWord8 $ if a64 then 45 else 20
P.putWord8 osVersion
common
P.putWord32le crc
P.putWord32le $ if z64 then maxBound32 else fromIntegral csz
@ -193,9 +195,10 @@ zipStream ZipOptions{..} = execStateC 0 $ do
when z64 $ output $ do
P.putWord32le 0x06064b50 -- zip64 end
P.putWord64le 44 -- length of this record
P.putWord8 osVersion
P.putWord8 zipVersion
P.putWord16le 45
P.putWord8 osVersion
P.putWord8 45
P.putWord8 osVersion
P.putWord32le 0 -- disk
P.putWord32le 0 -- central disk
P.putWord64le cnt