mirror of
https://github.com/0x5eal/luau-unzip.git
synced 2025-04-10 17:20:53 +01:00
refactor: small improvements
* Fix return type for `ZipReader:findEntry` to return an optional `ZipEntry` * Update structuring comments and read bitflags for future use
This commit is contained in:
parent
381e22cf39
commit
3e9b3a3d94
1 changed files with 19 additions and 18 deletions
|
@ -32,23 +32,22 @@ local function validateCrc(decompressed: buffer, validation: CrcValidationOption
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local DECOMPRESSION_ROUTINES: { [number]: (buffer, number, CrcValidationOptions) -> buffer } =
|
local DECOMPRESSION_ROUTINES: { [number]: (buffer, number, CrcValidationOptions) -> buffer } = table.freeze({
|
||||||
table.freeze({
|
-- `STORE` decompression method - No compression
|
||||||
-- `STORE` decompression method - No compression
|
[0x00] = function(buf, _, validation)
|
||||||
[0x00] = function(buf, _, validation)
|
validateCrc(buf, validation)
|
||||||
validateCrc(buf, validation)
|
return buf
|
||||||
return buf
|
end,
|
||||||
end,
|
|
||||||
|
|
||||||
-- `DEFLATE` decompression method - Compressed raw deflate chunks
|
-- `DEFLATE` decompression method - Compressed raw deflate chunks
|
||||||
[0x08] = function(buf, uncompressedSize, validation)
|
[0x08] = function(buf, uncompressedSize, validation)
|
||||||
-- FIXME: Why is uncompressedSize not getting inferred correctly although it
|
-- FIXME: Why is uncompressedSize not getting inferred correctly although it
|
||||||
-- is typed?
|
-- is typed?
|
||||||
local decompressed = inflate(buf, uncompressedSize :: any)
|
local decompressed = inflate(buf, uncompressedSize :: any)
|
||||||
validateCrc(decompressed, validation)
|
validateCrc(decompressed, validation)
|
||||||
return decompressed
|
return decompressed
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- TODO: ERROR HANDLING!
|
-- TODO: ERROR HANDLING!
|
||||||
|
|
||||||
|
@ -150,10 +149,11 @@ function ZipReader.parseCentralDirectory(self: ZipReader): ()
|
||||||
-- Offset Bytes Description
|
-- Offset Bytes Description
|
||||||
-- ------------------------------------------------
|
-- ------------------------------------------------
|
||||||
-- 0 4 Central directory entry signature
|
-- 0 4 Central directory entry signature
|
||||||
|
-- 8 2 General purpose bitflags
|
||||||
|
-- 12 4 Last mod time/date
|
||||||
-- 28 2 File name length (n)
|
-- 28 2 File name length (n)
|
||||||
-- 30 2 Extra field length (m)
|
-- 30 2 Extra field length (m)
|
||||||
-- 32 2 Comment length (k)
|
-- 32 2 Comment length (k)
|
||||||
-- 12 4 Last mod time/date
|
|
||||||
-- 16 4 CRC-32
|
-- 16 4 CRC-32
|
||||||
-- 24 4 Uncompressed size
|
-- 24 4 Uncompressed size
|
||||||
-- 42 4 Local header offset
|
-- 42 4 Local header offset
|
||||||
|
@ -161,6 +161,7 @@ function ZipReader.parseCentralDirectory(self: ZipReader): ()
|
||||||
-- 46+n m Extra field
|
-- 46+n m Extra field
|
||||||
-- 46+n+m k Comment
|
-- 46+n+m k Comment
|
||||||
|
|
||||||
|
local _bitflags = buffer.readu16(self.data, pos + 8)
|
||||||
local nameLength = buffer.readu16(self.data, pos + 28)
|
local nameLength = buffer.readu16(self.data, pos + 28)
|
||||||
local extraLength = buffer.readu16(self.data, pos + 30)
|
local extraLength = buffer.readu16(self.data, pos + 30)
|
||||||
local commentLength = buffer.readu16(self.data, pos + 32)
|
local commentLength = buffer.readu16(self.data, pos + 32)
|
||||||
|
@ -236,7 +237,7 @@ function ZipReader.buildDirectoryTree(self: ZipReader): ()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ZipReader.findEntry(self: ZipReader, path: string): ZipEntry
|
function ZipReader.findEntry(self: ZipReader, path: string): ZipEntry?
|
||||||
if path == "/" then
|
if path == "/" then
|
||||||
-- If the root directory's entry was requested we do not
|
-- If the root directory's entry was requested we do not
|
||||||
-- need to do any additional work
|
-- need to do any additional work
|
||||||
|
|
Loading…
Add table
Reference in a new issue