mirror of
https://github.com/Adorable-Catgirl/Zorya-NEO.git
synced 2024-11-23 18:58:06 +11:00
Zorya utils. tsar initramfs.
This commit is contained in:
parent
b5d155a9cf
commit
9a1a073d46
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,4 +2,5 @@ pkg/**
|
|||||||
debug.lua
|
debug.lua
|
||||||
luapreproc.lua
|
luapreproc.lua
|
||||||
zorya-neo-installer.lua
|
zorya-neo-installer.lua
|
||||||
|
zorya-neo-utils-installer.lua
|
||||||
bsrc/**
|
bsrc/**
|
@ -37,5 +37,7 @@ os.execute("cp utils/ser.lua pkg/init.lua")
|
|||||||
os.execute("cp -r installer_dat pkg")
|
os.execute("cp -r installer_dat pkg")
|
||||||
status("Packing installer...")
|
status("Packing installer...")
|
||||||
os.execute("cd pkg; find * -depth | lua ../utils/make_tsar.lua | lua ../utils/mkselfextract.lua > ../zorya-neo-installer.lua")
|
os.execute("cd pkg; find * -depth | lua ../utils/make_tsar.lua | lua ../utils/mkselfextract.lua > ../zorya-neo-installer.lua")
|
||||||
|
status("Making OpenOS util installer...")
|
||||||
|
os.execute("cd util; find * -depth | lua ../utils/make_tsar.lua | lua ../utils/mkselfextract.lua > ../zorya-neo-utils-installer.lua")
|
||||||
status("Build complete.")
|
status("Build complete.")
|
||||||
status(string.format("Took %ds.", os.time()-start))
|
status(string.format("Took %ds.", os.time()-start))
|
@ -1,3 +1,4 @@
|
|||||||
|
_ZLOADER = "managed"
|
||||||
local readfile=function(f,h)
|
local readfile=function(f,h)
|
||||||
local b=""
|
local b=""
|
||||||
local d,r=f.read(h,math.huge)
|
local d,r=f.read(h,math.huge)
|
||||||
@ -23,7 +24,7 @@ assert(bootfs.exists(".zy2/image.tsar"), "No boot image!")
|
|||||||
|
|
||||||
local romfs_file = assert(bootfs.open(".zy2/image.tsar", "rb"))
|
local romfs_file = assert(bootfs.open(".zy2/image.tsar", "rb"))
|
||||||
|
|
||||||
local romfs_dev = romfs.read(function(a)
|
local romfs_dev = tsar.read(function(a)
|
||||||
local c = ""
|
local c = ""
|
||||||
local d
|
local d
|
||||||
while a > 0 do
|
while a > 0 do
|
||||||
|
@ -63,11 +63,12 @@ local tsar = {
|
|||||||
e.name = read(e.namesize)
|
e.name = read(e.namesize)
|
||||||
e.pos = seek(e.namesize & 1)
|
e.pos = seek(e.namesize & 1)
|
||||||
seek(e.filesize + (e.filesize & 1))
|
seek(e.filesize + (e.filesize & 1))
|
||||||
|
utils.debug_log(e.name, e.namesize, e.filesize, e.pos)
|
||||||
lname = e.name
|
lname = e.name
|
||||||
if lname ~= "TRAILER!!!" then
|
if lname ~= "TRAILER!!!" then
|
||||||
tbl[#tbl+1] = e
|
tbl[#tbl+1] = e
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return setmetatable({tbl = tbl, read = read, seek = seek, close = close}, {__index=tsar})
|
return setmetatable({tbl = tbl, read = read, seek = seek, close = close}, {__index=arc})
|
||||||
end
|
end
|
||||||
}
|
}
|
15
util/OpenOS/config.d/00_includes.lua
Normal file
15
util/OpenOS/config.d/00_includes.lua
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
local cfgadd = ...
|
||||||
|
local addr = require("component").eeprom.getData()
|
||||||
|
print("Zorya NEO is installed at "..addr)
|
||||||
|
cfgadd([[
|
||||||
|
local menu = loadmod("menu_classic")
|
||||||
|
]])
|
||||||
|
if (_ZLOADER == "managed") then
|
||||||
|
cfgadd(string.format([[
|
||||||
|
do
|
||||||
|
local sp = loadmod("util_searchpaths")
|
||||||
|
sp.add_mod_path("%s", ".zy2/mods")
|
||||||
|
sp.add_lib_path("%s", ".zy2/lib")
|
||||||
|
end
|
||||||
|
]], addr, addr))
|
||||||
|
end
|
12
util/OpenOS/config.d/01_openos.lua
Normal file
12
util/OpenOS/config.d/01_openos.lua
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
local cfgadd = ...
|
||||||
|
local comp = require("component")
|
||||||
|
for fs in comp.list("filesystem") do
|
||||||
|
if comp.invoke(fs, "getLabel") == "OpenOS" and comp.invoke(fs, "exists", "init.lua") then
|
||||||
|
print("OpenOS discovered on "..fs)
|
||||||
|
cfgadd(string.format([[
|
||||||
|
menu.add("OpenOS on %s", function()
|
||||||
|
return loadmod("loader_openos")("%s")
|
||||||
|
end)
|
||||||
|
]], fs:sub(1, 3), fs))
|
||||||
|
end
|
||||||
|
end
|
24
util/OpenOS/config.d/96_vbios.lua
Normal file
24
util/OpenOS/config.d/96_vbios.lua
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
local cfgadd = ...
|
||||||
|
local addr = require("component").eeprom.getData()
|
||||||
|
local fs = require("filesystem")
|
||||||
|
if not fs.exists("/.zy2/vbios/") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
cfgadd([[
|
||||||
|
do
|
||||||
|
local function add_bios(drive, path)
|
||||||
|
local h = component.invoke(drive, "open", path.."/label.txt")
|
||||||
|
local name = component.invoke(drive, "read", h, math.huge)
|
||||||
|
component.invoke(drive, "close", h)
|
||||||
|
menu.add(name .. " (vBIOS)", function()
|
||||||
|
local vb = loadmod("vdev_vbios")(drive, path)
|
||||||
|
vb()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
]])
|
||||||
|
for ent in fs.list("/.zy2/vbios") do
|
||||||
|
cfgadd(string.format([[ add_bios("%s", ".zy2/vbios/%s")]].."\n", addr, ent:sub(1, #ent-1)))
|
||||||
|
end
|
||||||
|
cfgadd[[
|
||||||
|
end
|
||||||
|
]]
|
19
util/OpenOS/config.d/97_addent.lua
Normal file
19
util/OpenOS/config.d/97_addent.lua
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
local cfgadd = ...
|
||||||
|
local fs = require("filesystem")
|
||||||
|
if not fs.exists("/etc/zorya-neo/entries/") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local function readfile(path)
|
||||||
|
local f = io.open(path)
|
||||||
|
local dat = f:read("*a")
|
||||||
|
f:close()
|
||||||
|
return dat
|
||||||
|
end
|
||||||
|
for ent in fs.list("/etc/zorya-neo/entries/") do
|
||||||
|
local label = readfile("/etc/zorya-neo/entries/"..ent.."/label.txt")
|
||||||
|
local code = readfile("/etc/zorya-neo/entries/"..ent.."/code.lua")
|
||||||
|
cfgadd(string.format([[
|
||||||
|
menu.add("%s", function())
|
||||||
|
%s
|
||||||
|
end)]], label, code))
|
||||||
|
end
|
8
util/OpenOS/config.d/98_custom.lua
Normal file
8
util/OpenOS/config.d/98_custom.lua
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
local cfgadd = ...
|
||||||
|
local fs = require("filesystem")
|
||||||
|
if not fs.exists("/etc/zorya-neo/custom.lua") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local f = io.open("/etc/zorya-neo/custom.lua")
|
||||||
|
cfgadd(f:read("*a"))
|
||||||
|
f:close()
|
4
util/OpenOS/config.d/99_menu.lua
Normal file
4
util/OpenOS/config.d/99_menu.lua
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
local cfgadd = ...
|
||||||
|
cfgadd([[
|
||||||
|
menu.draw()
|
||||||
|
]])
|
13
util/OpenOS/initramfs.d/00_zymod.lua
Normal file
13
util/OpenOS/initramfs.d/00_zymod.lua
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
local arc = ...
|
||||||
|
arc.dir(".zy2")
|
||||||
|
arc.dir(".zy2/mods")
|
||||||
|
local fs = require("filesystem")
|
||||||
|
local function readfile(path)
|
||||||
|
local f = io.open(path)
|
||||||
|
local dat = f:read("*a")
|
||||||
|
f:close()
|
||||||
|
return dat
|
||||||
|
end
|
||||||
|
for ent in fs.list("/etc/zorya-neo/mods") do
|
||||||
|
arc.file(".zy2/mods/"..ent, "r-xr-xr-x", readfile("/etc/zorya-neo/mods/"..ent))
|
||||||
|
end
|
12
util/OpenOS/initramfs.d/01_zylib.lua
Normal file
12
util/OpenOS/initramfs.d/01_zylib.lua
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
local arc = ...
|
||||||
|
arc.dir(".zy2/lib")
|
||||||
|
local fs = require("filesystem")
|
||||||
|
local function readfile(path)
|
||||||
|
local f = io.open(path)
|
||||||
|
local dat = f:read("*a")
|
||||||
|
f:close()
|
||||||
|
return dat
|
||||||
|
end
|
||||||
|
for ent in fs.list("/etc/zorya-neo/lib") do
|
||||||
|
arc.file(".zy2/lib/"..ent, "r-xr-xr-x", readfile("/etc/zorya-neo/lib/"..ent))
|
||||||
|
end
|
19
util/OpenOS/zyneo-gencfg.lua
Normal file
19
util/OpenOS/zyneo-gencfg.lua
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
local fs = require("filesystem")
|
||||||
|
print("Regenerating Zorya NEO configuration...")
|
||||||
|
fs.copy("/.zy2/cfg.lua", "/.zy2/cfg.lua.old")
|
||||||
|
local f = io.open("/.zy2/cfg.lua", "wb")
|
||||||
|
local lst = {}
|
||||||
|
for ent in fs.list("/etc/zorya-neo/config.d") do
|
||||||
|
if ent:sub(#ent) ~= "/" then
|
||||||
|
lst[#lst+1] = ent
|
||||||
|
end
|
||||||
|
end
|
||||||
|
table.sort(lst)
|
||||||
|
for i=1, #lst do
|
||||||
|
print("> "..lst[i])
|
||||||
|
assert(loadfile("/etc/zorya-neo/config.d/"..lst[i]))(function(code)
|
||||||
|
f:write(code)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
f:close()
|
||||||
|
print("Generated new configuration.")
|
89
util/OpenOS/zyneo-geninitramfs.lua
Normal file
89
util/OpenOS/zyneo-geninitramfs.lua
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
local fs = require("filesystem")
|
||||||
|
print("Regenerating Zorya NEO initramfs...")
|
||||||
|
fs.copy("/.zy2/boot.tsar", "/.zy2/boot.tsar.old")
|
||||||
|
local f = io.open("/.zy2/boot.tsar", "wb")
|
||||||
|
local lst = {}
|
||||||
|
for ent in fs.list("/etc/zorya-neo/initramfs.d") do
|
||||||
|
if ent:sub(#ent) ~= "/" then
|
||||||
|
lst[#lst+1] = ent
|
||||||
|
end
|
||||||
|
end
|
||||||
|
table.sort(lst)
|
||||||
|
local modes = {
|
||||||
|
["fifo"] = 1,
|
||||||
|
["char device"] = 2,
|
||||||
|
["directory"] = 4,
|
||||||
|
["block device"] = 6,
|
||||||
|
["file"] = 8,
|
||||||
|
["link"] = 0xA,
|
||||||
|
["socket"] = 0xC
|
||||||
|
}
|
||||||
|
local function getperm(perm, mode)
|
||||||
|
local md = 0
|
||||||
|
for i=1, 9 do
|
||||||
|
if (perm:sub(10-i,10-i) ~= "-") then
|
||||||
|
md = md | (1 << (i-1))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return md | (modes[mode] << 12)
|
||||||
|
end
|
||||||
|
local function create_node(attr)
|
||||||
|
local ent = {
|
||||||
|
magic = 0x5f7d,
|
||||||
|
namesize = #attr.name,
|
||||||
|
name = attr.name,
|
||||||
|
mode = getperm(attr.permissions, attr.mode),
|
||||||
|
uid = attr.uid,
|
||||||
|
gid = attr.gid,
|
||||||
|
filesize = attr.filesize,
|
||||||
|
mtime = attr.mtime
|
||||||
|
}
|
||||||
|
if attr.mode ~= "file" then
|
||||||
|
ent.filesize = 0
|
||||||
|
end
|
||||||
|
f:write(string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
||||||
|
f:write(attr.data or "")
|
||||||
|
end
|
||||||
|
local arc = {}
|
||||||
|
function arc.file(path, perm, data)
|
||||||
|
create_node({
|
||||||
|
data = data,
|
||||||
|
filesize = #data,
|
||||||
|
uid = 0,
|
||||||
|
gid = 0,
|
||||||
|
mtime = os.time(),
|
||||||
|
name = path,
|
||||||
|
permissions = perm or "rw-r--r--",
|
||||||
|
mode = "file"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function arc.dir(path, perm)
|
||||||
|
create_node({
|
||||||
|
uid = 0,
|
||||||
|
filesize = 0,
|
||||||
|
gid = 0,
|
||||||
|
mtime = os.time(),
|
||||||
|
name = path,
|
||||||
|
permissions = perm or "rwxr-xr-x",
|
||||||
|
mode = "directory"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
for i=1, #lst do
|
||||||
|
print("> "..lst[i])
|
||||||
|
loadfile("/etc/zorya-neo/initramfs.d/"..lst[i])(arc)
|
||||||
|
end
|
||||||
|
local zy_dat = [[{os="Zorya NEO", version={2,0,0}, generator="OpenOS"}]]
|
||||||
|
create_node({
|
||||||
|
data = zy_dat,
|
||||||
|
filesize = #zy_dat,
|
||||||
|
uid = 0,
|
||||||
|
gid = 0,
|
||||||
|
mtime = os.time(),
|
||||||
|
name = "TRAILER!!!",
|
||||||
|
permissions = "---------",
|
||||||
|
mode = "file"
|
||||||
|
})
|
||||||
|
f:close()
|
||||||
|
print("Generated new initramfs.")
|
138
util/init.lua
Normal file
138
util/init.lua
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
local args = {...}
|
||||||
|
local tbl = args[1]
|
||||||
|
local dat = args[2]
|
||||||
|
table.remove(args, 1)
|
||||||
|
table.remove(args, 1)
|
||||||
|
|
||||||
|
local function getfile(path)
|
||||||
|
for i=1, #tbl do
|
||||||
|
if (tbl[i].name == path) then
|
||||||
|
return dat:sub(tbl[i].pos, tbl[i].pos+tbl[i].filesize-1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function writefile(p2, dat)
|
||||||
|
local f = io.open(p2, "wb")
|
||||||
|
f:write(dat)
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
if (debug.debug) then
|
||||||
|
print("This software cannot be run on a normal computer. This is only for OpenOS.")
|
||||||
|
os.exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
local magic = 0x5f7d
|
||||||
|
local magic_rev = 0x7d5f
|
||||||
|
local header_fmt = "I2I2I2I2I2I6I6"
|
||||||
|
local en = string.unpack("=I2", string.char(0x7d, 0x5f)) == magic -- true = LE, false = BE
|
||||||
|
local function get_end(e)
|
||||||
|
return (e and "<") or ">"
|
||||||
|
end
|
||||||
|
local function read_header(dat)
|
||||||
|
local e = get_end(en)
|
||||||
|
local m = string.unpack(e.."I2", dat)
|
||||||
|
if m ~= magic and m ~= magic_rev then return nil, "bad magic" end
|
||||||
|
if m ~= magic then
|
||||||
|
e = get_end(not en)
|
||||||
|
end
|
||||||
|
local ent = {}
|
||||||
|
ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime = string.unpack(e..header_fmt, dat)
|
||||||
|
return ent
|
||||||
|
end
|
||||||
|
|
||||||
|
local arc = {}
|
||||||
|
|
||||||
|
function arc:fetch(path)
|
||||||
|
for i=1, #self.tbl do
|
||||||
|
if (self.tbl[i].name == path and self.tbl[i].mode & 32768 > 0) then
|
||||||
|
self.seek(self.tbl[i].pos-self.seek(0))
|
||||||
|
return self.read(self.tbl[i].filesize), self.tbl[i]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil, "file not found"
|
||||||
|
end
|
||||||
|
|
||||||
|
function arc:exists(path)
|
||||||
|
for i=1, #self.tbl do
|
||||||
|
if (self.tbl[i].name == path) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
function arc:list(path)
|
||||||
|
if path:sub(#path) ~= "/" then path = path .. "/" end
|
||||||
|
local ent = {}
|
||||||
|
for i=1, #self.tbl do
|
||||||
|
if (self.tbl[i].name:sub(1, #path) == path and not self.tbl[i].name:find("/", #path+1, false)) then
|
||||||
|
ent[#ent+1] = self.tbl[i].name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ent
|
||||||
|
end
|
||||||
|
|
||||||
|
function arc:close()
|
||||||
|
self.close()
|
||||||
|
end
|
||||||
|
|
||||||
|
local tsar = {
|
||||||
|
read = function(read, seek, close)
|
||||||
|
local tbl = {}
|
||||||
|
local lname = ""
|
||||||
|
while lname ~= "TRAILER!!!" do
|
||||||
|
local dat = read(22)
|
||||||
|
local e = read_header(dat)
|
||||||
|
e.name = read(e.namesize)
|
||||||
|
e.pos = seek(e.namesize & 1)
|
||||||
|
seek(e.filesize + (e.filesize & 1))
|
||||||
|
lname = e.name
|
||||||
|
if lname ~= "TRAILER!!!" then
|
||||||
|
tbl[#tbl+1] = e
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return setmetatable({tbl = tbl, read = read, seek = seek, close = close}, {__index=arc})
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
local fs = require("filesystem")
|
||||||
|
print("Installing Zorya NEO utils.")
|
||||||
|
fs.makeDirectory("/etc/zorya-neo")
|
||||||
|
fs.makeDirectory("/etc/zorya-neo/mods")
|
||||||
|
fs.makeDirectory("/etc/zorya-neo/lib")
|
||||||
|
fs.makeDirectory("/etc/zorya-neo/config.d")
|
||||||
|
fs.makeDirectory("/etc/zorya-neo/initramfs.d")
|
||||||
|
print("Installing utils to /usr")
|
||||||
|
writefile("/usr/bin/zyneo-gencfg.lua", getfile("OpenOS/zyneo-gencfg.lua"))
|
||||||
|
writefile("/usr/bin/zyneo-geninitramfs.lua", getfile("OpenOS/zyneo-geninitramfs.lua"))
|
||||||
|
print("Installing scripts...")
|
||||||
|
for i=1, #tbl do
|
||||||
|
if tbl[i].name:sub(1, 16) == "OpenOS/config.d/" then
|
||||||
|
writefile("/etc/zorya-neo/config.d/"..tbl[i].name:sub(17), getfile(tbl[i].name))
|
||||||
|
elseif tbl[i].name:sub(1, 19) == "OpenOS/initramfs.d/" then
|
||||||
|
writefile("/etc/zorya-neo/initramfs.d/"..tbl[i].name:sub(20), getfile(tbl[i].name))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
print("Extracting image.tsar...")
|
||||||
|
local t = io.open("/.zy2/image.tsar", "rb")
|
||||||
|
local arc = tsar.read(function(a)
|
||||||
|
return t:read(a)
|
||||||
|
end, function(a)
|
||||||
|
return t:seek("cur", a)
|
||||||
|
end, function()
|
||||||
|
return t:close()
|
||||||
|
end)
|
||||||
|
local lst = arc:list(".zy2/mods")
|
||||||
|
for i=1, #lst do
|
||||||
|
print(lst[i])
|
||||||
|
writefile("/etc/zorya-neo/mods/"..lst[i]:sub(10), arc:fetch(lst[i]))
|
||||||
|
end
|
||||||
|
local lst = arc:list(".zy2/lib")
|
||||||
|
for i=1, #lst do
|
||||||
|
print(lst[i])
|
||||||
|
writefile("/etc/zorya-neo/lib/"..lst[i]:sub(9), arc:fetch(lst[i]))
|
||||||
|
end
|
||||||
|
arc:close()
|
||||||
|
print("Installation complete.")
|
@ -17,7 +17,7 @@ local modes = {
|
|||||||
local function getperm()
|
local function getperm()
|
||||||
local md = 0
|
local md = 0
|
||||||
for i=1, 9 do
|
for i=1, 9 do
|
||||||
if (attr.permissions:sub(i,i) ~= "-") then
|
if (attr.permissions:sub(10-i,10-i) ~= "-") then
|
||||||
md = md | (1 << (i-1))
|
md = md | (1 << (i-1))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -139,6 +139,7 @@ local unpack = unpack or table.unpack
|
|||||||
for i=1, #tbl do
|
for i=1, #tbl do
|
||||||
if (tbl[i].name == "init.lua") then
|
if (tbl[i].name == "init.lua") then
|
||||||
load(dat:sub(tbl[i].pos, tbl[i].pos+tbl[i].filesize-1))(tbl, dat, unpack(arg))
|
load(dat:sub(tbl[i].pos, tbl[i].pos+tbl[i].filesize-1))(tbl, dat, unpack(arg))
|
||||||
|
if os.exit then os.exit(0) else return end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -146,6 +146,9 @@ function makeDirectory(path)
|
|||||||
}
|
}
|
||||||
fs.write(romfs, string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
fs.write(romfs, string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
||||||
fs.write(romfs, path)
|
fs.write(romfs, path)
|
||||||
|
if ent.namesize & 1 > 0 then
|
||||||
|
fs.write(romfs, "\0")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
makeDirectory(".zy2")
|
makeDirectory(".zy2")
|
||||||
@ -165,6 +168,8 @@ function writeFile(path, data)
|
|||||||
-- fs.write(romfs, "-")
|
-- fs.write(romfs, "-")
|
||||||
--end
|
--end
|
||||||
--fs.write(romfs, data)
|
--fs.write(romfs, data)
|
||||||
|
|
||||||
|
local ext = path:sub(#path-2)
|
||||||
local ent = {
|
local ent = {
|
||||||
name = path,
|
name = path,
|
||||||
namesize = #path,
|
namesize = #path,
|
||||||
@ -178,12 +183,11 @@ function writeFile(path, data)
|
|||||||
fs.write(romfs, string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
fs.write(romfs, string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
||||||
fs.write(romfs, path)
|
fs.write(romfs, path)
|
||||||
if ent.namesize & 1 > 0 then
|
if ent.namesize & 1 > 0 then
|
||||||
io.stdout:write("\0")
|
fs.write(romfs, "\0")
|
||||||
end
|
end
|
||||||
fs.write(romfs, data)
|
fs.write(romfs, data)
|
||||||
if ent.filesize & 1 > 0 then
|
if ent.filesize & 1 > 0 then
|
||||||
io.stdout:write("\0")
|
fs.write(romfs, "\0")
|
||||||
size = size+1
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user