diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/util.lua | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/util.lua b/lib/util.lua index a1de817..2ea4708 100644 --- a/lib/util.lua +++ b/lib/util.lua @@ -72,11 +72,61 @@ local error = function (str) end end +local opensubtitles_hash = function (fileName) + local fil = io.open(fileName, "rb") + if not fil then + return nil + end + + local lo,hi = 0,0 + for i = 1,8192 do + local a,b,c,d = fil:read(4):byte(1,4) + lo = lo + a + b*256 + c*65536 + d*16777216 + a,b,c,d = fil:read(4):byte(1,4) + hi = hi + a + b*256 + c*65536 + d*16777216 + while lo >= 4294967296 do + lo = lo - 4294967296 + hi = hi + 1 + end + while hi >= 4294967296 do + hi = hi - 4294967296 + end + end + + local size = fil:seek("end", -65536) + 65536 + for i = 1,8192 do + local a,b,c,d = fil:read(4):byte(1,4) + lo = lo + a + b*256 + c*65536 + d*16777216 + a,b,c,d = fil:read(4):byte(1,4) + hi = hi + a + b*256 + c*65536 + d*16777216 + while lo >= 4294967296 do + lo = lo - 4294967296 + hi = hi + 1 + end + while hi >= 4294967296 do + hi = hi - 4294967296 + end + end + + lo = lo + size + while lo >= 4294967296 do + lo = lo - 4294967296 + hi = hi + 1 + end + while hi >= 4294967296 do + hi = hi - 4294967296 + end + + fil:close() + return string.format("%08x%08x", hi,lo), size +end + return { table_merge = table_merge, table_print = table_print, table_match_or_any = table_match_or_any, zip_ext_first = zip_ext_first, string_rm_vid_ext = string_rm_vid_ext, + opensubtitles_hash = opensubtitles_hash, error = error, } |