1
0
mirror of https://github.com/Adorable-Catgirl/Zorya-NEO.git synced 2024-11-27 12:48:07 +11:00
Zorya-NEO/utils/installer/tsarbuild.lua

49 lines
1014 B
Lua
Raw Normal View History

2020-06-06 10:45:08 +10:00
local tsar = {}
do
local file = ""
local modes = {
["fifo"] = 1,
["char device"] = 2,
["directory"] = 4,
["block device"] = 6,
["file"] = 8,
["link"] = 0xA,
["socket"] = 0xC
}
local function tsar.getperm(ftype, perm)
local md = 0
for i=1, 9 do
if (perm:sub(i,i) ~= "-") then
md = md | (1 << (i-1))
end
end
return md | (modes[ftype] << 12)
end
function tsar.new_node(ni)
local ent = {
name = ni.name,
namesize = #ni.name,
magic = 0x5f7d,
mode = ni.mode or tsar.getperm("directory", "r-xr-xr-x"),
uid = ni.uid or 0,
gid = ni.gid or 0,
filesize = (ni.data and #ni.data) or 0,
mtime = os.time()
}
file = file .. string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime)
file = file .. ni.path
if ent.namesize & 1 > 0 then
file = file .. "\0"
end
file = file .. (ni.data or "")
if ent.namesize & 1 > 0 then
file = file .. "\0"
end
end
function tsar.get()
return file
end
end