]>
git.madduck.net Git - etc/awesome.git/blobdiff - luatz/tzfile.lua
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
local read_int32be, read_int64be
local read_int32be, read_int64be
-if string.unpack then -- Only available in Lua 5.3+
+-- luacheck: push std max
+if string.unpack then
+ -- Only available in Lua 5.3+
function read_int32be(fd)
local data, err = fd:read(4)
if data == nil then return nil, err end
function read_int32be(fd)
local data, err = fd:read(4)
if data == nil then return nil, err end
if data == nil then return nil, err end
return string.unpack(">i8", data)
end
if data == nil then return nil, err end
return string.unpack(">i8", data)
end
function read_int32be(fd)
local data, err = fd:read(4)
if data == nil then return nil, err end
function read_int32be(fd)
local data, err = fd:read(4)
if data == nil then return nil, err end
-local function read_flags ( fd , n )
- local data , err = fd:read ( n )
- if data == nil then return nil , err end
+local function read_flags(fd, n )
+ local data, err = fd:read(n )
+ if data == nil then return nil, err end
for i=1, n do
res[i] = data:byte(i,i) ~= 0
end
for i=1, n do
res[i] = data:byte(i,i) ~= 0
end
end
local fifteen_nulls = ("\0"):rep(15)
end
local fifteen_nulls = ("\0"):rep(15)
-local function read_tz ( fd )
- assert ( fd:read(4) == "TZif" , "Invalid TZ file" )
- local version = assert ( fd:read(1) )
+local function read_tz(fd )
+ assert(fd:read(4) == "TZif", "Invalid TZ file" )
+ local version = assert(fd:read(1) )
if version == "\0" or version == "2" or version == "3" then
local MIN_TIME = -2^32+1
if version == "\0" or version == "2" or version == "3" then
local MIN_TIME = -2^32+1
- assert ( assert ( fd:read(15) ) == fifteen_nulls , "Expected 15 nulls" )
+ assert(assert(fd:read(15)) == fifteen_nulls, "Expected 15 nulls" )
-- The number of UTC/local indicators stored in the file.
-- The number of UTC/local indicators stored in the file.
- local tzh_ttisgmtcnt = assert ( read_int32be ( fd ) )
+ local tzh_ttisgmtcnt = assert(read_int32be(fd) )
-- The number of standard/wall indicators stored in the file.
-- The number of standard/wall indicators stored in the file.
- local tzh_ttisstdcnt = assert ( read_int32be ( fd ) )
+ local tzh_ttisstdcnt = assert(read_int32be(fd) )
-- The number of leap seconds for which data is stored in the file.
-- The number of leap seconds for which data is stored in the file.
- local tzh_leapcnt = assert ( read_int32be ( fd ) )
+ local tzh_leapcnt = assert(read_int32be(fd) )
-- The number of "transition times" for which data is stored in the file.
-- The number of "transition times" for which data is stored in the file.
- local tzh_timecnt = assert ( read_int32be ( fd ) )
+ local tzh_timecnt = assert(read_int32be(fd) )
-- The number of "local time types" for which data is stored in the file (must not be zero).
-- The number of "local time types" for which data is stored in the file (must not be zero).
- local tzh_typecnt = assert ( read_int32be ( fd ) )
+ local tzh_typecnt = assert(read_int32be(fd) )
-- The number of characters of "timezone abbreviation strings" stored in the file.
-- The number of characters of "timezone abbreviation strings" stored in the file.
- local tzh_charcnt = assert ( read_int32be ( fd ) )
+ local tzh_charcnt = assert(read_int32be(fd) )
- local transition_times = { }
+ local transition_times = {}
- transition_times [ i ] = assert ( read_int32be ( fd ) )
+ transition_times[i] = assert(read_int32be(fd) )
- local transition_time_ind = { assert ( fd:read ( tzh_timecnt ) ):byte ( 1 , -1 ) }
+ local transition_time_ind = {assert(fd:read(tzh_timecnt)):byte(1, -1) }
- ttinfos [ i ] = {
- gmtoff = assert ( read_int32be ( fd ) ) ;
- isdst = assert ( fd:read ( 1 ) ) ~= "\0" ;
- abbrind = assert ( fd:read ( 1 ) ):byte ( ) ;
+ ttinfos[i ] = {
+ gmtoff = assert(read_int32be(fd)) ;
+ isdst = assert(fd:read(1)) ~= "\0" ;
+ abbrind = assert(fd:read(1)):byte() ;
- local abbreviations = assert ( fd:read ( tzh_charcnt ) )
+ local abbreviations = assert(fd:read(tzh_charcnt) )
- local leap_seconds = { } -- luacheck: ignore 241
+ local leap_seconds = {} -- luacheck: ignore 241
- leap_seconds [ i ] = {
- offset = assert ( read_int32be ( fd ) ) ;
- n = assert ( read_int32be ( fd ) ) ;
+ leap_seconds[i ] = {
+ offset = assert(read_int32be(fd)) ;
+ n = assert(read_int32be(fd)) ;
- local isstd = assert ( read_flags ( fd , tzh_ttisstdcnt ) )
+ local isstd = assert(read_flags(fd, tzh_ttisstdcnt) )
- local isgmt = assert ( read_flags ( fd , tzh_ttisgmtcnt ) )
+ local isgmt = assert(read_flags(fd, tzh_ttisgmtcnt) )
]]
assert(fd:read(4) == "TZif")
assert(fd:read(1) == version)
]]
assert(fd:read(4) == "TZif")
assert(fd:read(1) == version)
- assert ( assert ( fd:read(15) ) == fifteen_nulls , "Expected 15 nulls" )
+ assert(assert(fd:read(15)) == fifteen_nulls, "Expected 15 nulls" )
MIN_TIME = -2^64+1
-- The number of UTC/local indicators stored in the file.
MIN_TIME = -2^64+1
-- The number of UTC/local indicators stored in the file.
- tzh_ttisgmtcnt = assert ( read_int32be ( fd ) )
+ tzh_ttisgmtcnt = assert(read_int32be(fd) )
-- The number of standard/wall indicators stored in the file.
-- The number of standard/wall indicators stored in the file.
- tzh_ttisstdcnt = assert ( read_int32be ( fd ) )
+ tzh_ttisstdcnt = assert(read_int32be(fd) )
-- The number of leap seconds for which data is stored in the file.
-- The number of leap seconds for which data is stored in the file.
- tzh_leapcnt = assert ( read_int32be ( fd ) )
+ tzh_leapcnt = assert(read_int32be(fd) )
-- The number of "transition times" for which data is stored in the file.
-- The number of "transition times" for which data is stored in the file.
- tzh_timecnt = assert ( read_int32be ( fd ) )
+ tzh_timecnt = assert(read_int32be(fd) )
-- The number of "local time types" for which data is stored in the file (must not be zero).
-- The number of "local time types" for which data is stored in the file (must not be zero).
- tzh_typecnt = assert ( read_int32be ( fd ) )
+ tzh_typecnt = assert(read_int32be(fd) )
-- The number of characters of "timezone abbreviation strings" stored in the file.
-- The number of characters of "timezone abbreviation strings" stored in the file.
- tzh_charcnt = assert ( read_int32be ( fd ) )
+ tzh_charcnt = assert(read_int32be(fd) )
- transition_times [ i ] = assert ( read_int64be ( fd ) )
+ transition_times[i] = assert(read_int64be(fd) )
- transition_time_ind = { assert ( fd:read ( tzh_timecnt ) ):byte ( 1 , -1 ) }
+ transition_time_ind = {assert(fd:read(tzh_timecnt)):byte(1, -1) }
- ttinfos [ i ] = {
- gmtoff = assert ( read_int32be ( fd ) ) ;
- isdst = assert ( fd:read ( 1 ) ) ~= "\0" ;
- abbrind = assert ( fd:read ( 1 ) ):byte ( ) ;
+ ttinfos[i ] = {
+ gmtoff = assert(read_int32be(fd)) ;
+ isdst = assert(fd:read(1)) ~= "\0" ;
+ abbrind = assert(fd:read(1)):byte() ;
- abbreviations = assert ( fd:read ( tzh_charcnt ) )
+ abbreviations = assert(fd:read(tzh_charcnt) )
- leap_seconds [ i ] = {
- offset = assert ( read_int64be ( fd ) ) ;
- n = assert ( read_int32be ( fd ) ) ;
+ leap_seconds[i ] = {
+ offset = assert(read_int64be(fd)) ;
+ n = assert(read_int32be(fd)) ;
- isstd = assert ( read_flags ( fd , tzh_ttisstdcnt ) )
+ isstd = assert(read_flags(fd, tzh_ttisstdcnt) )
- isgmt = assert ( read_flags ( fd , tzh_ttisgmtcnt ) )
+ isgmt = assert(read_flags(fd, tzh_ttisgmtcnt) )
--[[
After the second header and data comes a newline-enclosed, POSIX-TZ-environment-variable-style string
--[[
After the second header and data comes a newline-enclosed, POSIX-TZ-environment-variable-style string
between daylight saving and standard time.
]]
between daylight saving and standard time.
]]
- assert ( assert ( fd:read ( 1 ) ) == "\n" , "Expected newline at end of version 2 header" )
+ assert(assert(fd:read(1)) == "\n", "Expected newline at end of version 2 header" )
- TZ = assert ( fd:read ( "*l" ) )
+ TZ = assert(fd:read("*l") )
if #TZ == 0 then
TZ = nil
end
end
for i=1, tzh_typecnt do
if #TZ == 0 then
TZ = nil
end
end
for i=1, tzh_typecnt do
- local v = ttinfos [ i ]
- v.abbr = abbreviations:sub ( v.abbrind+1 , v.abbrind+3 )
- v.isstd = isstd [ i ] or false
- v.isgmt = isgmt [ i ] or false
- setmetatable ( v , tt_info_mt )
+ local v = ttinfos[i ]
+ v.abbr = abbreviations:sub(v.abbrind+1, v.abbrind+3 )
+ v.isstd = isstd[i ] or false
+ v.isgmt = isgmt[i ] or false
+ setmetatable(v, tt_info_mt )
local res = {
future = TZ;
[0] = {
local res = {
future = TZ;
[0] = {
- transition_time = MIN_TIME ;
- info = ttinfos [ first ] ;
+ transition_time = MIN_TIME;
+ info = ttinfos[first] ;
}
}
for i=1, tzh_timecnt do
}
}
for i=1, tzh_timecnt do
- res [ i ] = {
- transition_time = transition_times [ i ] ;
- info = ttinfos [ transition_time_ind [ i ]+1 ] ;
+ res[i ] = {
+ transition_time = transition_times[i] ;
+ info = ttinfos[transition_time_ind[i]+1] ;
- return setmetatable ( res , tz_info_mt )
+ return setmetatable(res, tz_info_mt )
- error ( "Unsupported version" )
+ error("Unsupported version" )
-local function read_tzfile ( path )
- local fd = assert ( io.open ( path , "rb" ) )
- local tzinfo = read_tz ( fd )
- fd:close ( )
+local function read_tzfile(path )
+ local fd = assert(io.open(path, "rb") )
+ local tzinfo = read_tz(fd )
+ fd:close( )
return tzinfo
end
return {
return tzinfo
end
return {
- read_tz = read_tz ;
- read_tzfile = read_tzfile ;
+ read_tz = read_tz;
+ read_tzfile = read_tzfile;