@@ -199,30 +199,40 @@ local function inflate(data)
199199 }
200200
201201 while true do
202- local sym = read_huff (bs , litlen )
203- if sym < 256 then
204- ab (sym )
205- elseif sym == 256 then
202+ -- s = sym
203+ local s = read_huff (bs , litlen )
204+ if s < 256 then
205+ ab (s )
206+ elseif s == 256 then
206207 break
207208 else
208- local entry = len_extra [sym ]
209- local base , extra = entry [1 ], entry [2 ]
210- local add = extra > 0 and bs .r (extra ) or 0
211- local length , dsym = base + add , read_huff (bs , dist )
212- local dentry = dist_extra [dsym + 1 ]
213- local dbase , dextra = dentry [1 ], dentry [2 ]
214- local dadd = dextra > 0 and bs .r (dextra ) or 0
215- local distval = dbase + dadd
216-
217- if distval <= 0 or distval > op then
218- error (" invalid distance " .. tostring (distval ).. " (outpos=" .. tostring (op ).. " )" )
219- end
220209
221- local base_index = op - distval
222- for i = 1 , length do
223- -- copy byte-by-byte (handles overlaps correctly)
224- ab (o [base_index + i ]:byte ())
210+ -- e = entry
211+ -- b = base
212+ -- x = extra
213+ -- a = add
214+ -- l = length
215+ -- ds = dsym
216+ -- de = dentry
217+ -- db = dbase
218+ -- dx = dextra
219+ -- da = dadd
220+ local e , b , x , a , l , ds , de , db , dx , da , dv = len_extra [s ]
221+ b , x = e [1 ], e [2 ]
222+ a = x > 0 and bs .r (x ) or 0
223+ l , ds = b + a , read_huff (bs , dist )
224+ de = dist_extra [ds + 1 ]
225+ db , dx = de [1 ], de [2 ]
226+ da = dx > 0 and bs .r (dx ) or 0
227+ dv = db + da
228+
229+ if dv <= 0 or dv > op then
230+ error (" invalid distance " .. tostring (dv ).. " (outpos=" .. tostring (op ).. " )" )
225231 end
232+
233+ -- bi = base index
234+ local bi = op - dv
235+ for i = 1 , l do ab (o [bi + i ]:byte ()) end
226236 end
227237 end
228238 else
@@ -236,22 +246,22 @@ local function inflate(data)
236246end
237247
238248local function crc32 (s )
239- local crc = 0xFFFFFFFF
249+
250+ -- x = maximum
251+ -- c = crc number
252+ local x , c = 0xFFFFFFFF c = x
253+
240254 for i = 1 , # s do
241- crc = crc ~ s :byte (i )
242- for _ = 1 , 8 do
243- crc = (crc >> 1 ) ~ (0xEDB88320 & (- (crc & 1 )))
244- end
255+ c = c ~ s :byte (i )
256+ for _ = 1 , 8 do c = (c >> 1 ) ~ (0xEDB88320 & (- (c & 1 ))) end
245257 end
246- return crc ~ 0xFFFFFFFF
247- end
248258
249- local function le16 (s , i ) local a ,b = s :byte (i ,i + 1 ); return a + b * 256 end
250- local function le32 (s , i )
251- local a ,b ,c ,d = s :byte (i , i + 3 )
252- return a + b * 256 + c * 65536 + d * 16777216
259+ return c ~ x
253260end
254261
262+ local function le16 (s , i ) local a ,b = s :byte (i ,i + 1 ) return a + b * 256 end
263+ local function le32 (s , i ) local a ,b ,c ,d = s :byte (i , i + 3 ) return a + b * 256 + c * 65536 + d * 16777216 end
264+
255265local function unzip (path )
256266 local f = assert (io.open (path , " rb" ))
257267 local data , pos = f :read (" *a" ), 1 f :close ()
0 commit comments