From b9216ff85b6f1dd18ea4864b41127e78fdd642c9 Mon Sep 17 00:00:00 2001 From: XeonSquared Date: Sun, 1 Oct 2023 13:52:38 +1000 Subject: [PATCH] add rtfsboot executable, to help make bootable rtfs volumes --- rtfs/exec/rtfsboot.lua | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 rtfs/exec/rtfsboot.lua diff --git a/rtfs/exec/rtfsboot.lua b/rtfs/exec/rtfsboot.lua new file mode 100644 index 0000000..3c2e20b --- /dev/null +++ b/rtfs/exec/rtfsboot.lua @@ -0,0 +1,30 @@ +local diskpart = require "diskpart" +local rtfs = require "rtfs" +local tA = {...} +local fsname,fname = fs.resolve(tA[1]) + +local drive, part = fs.address(tA[1]):match("([%x%-]+)/(%d)") +part=tonumber(part) +print(drive,part,fname) +local m = rtfs.mount(drive.."/"..part) +local np = {fname, "boot", 0, 0} +for i, tp, ex, st, sl, n in m:allIEntries() do + if tp == 9 and n == fname then + assert(ex == 0, "boot file cannot be fragmented") + np[3], np[4] = st, math.ceil(sl/512) + end +end +local allparts = diskpart.getPartitions(drive) +local pindex = #allparts+1 +np[3] = np[3] - (allparts[part][3] - 1) +for k,v in ipairs(allparts) do + if v[2] == "boot" then + pindex = k + break + end +end +allparts[pindex] = np +for k,v in ipairs(allparts) do + print(k, table.unpack(v)) +end +diskpart.setPartitions(drive, allparts)