diff --git a/lib/pkgfs.lua b/lib/pkgfs.lua index 2f6ee60..94d1df8 100644 --- a/lib/pkgfs.lua +++ b/lib/pkgfs.lua @@ -3,6 +3,7 @@ local w, lz16 = pcall(require, "liblz16") if not w then lz16 = nil end pkgfs = {} +pkgfs.files = {} local findex = {} local handles = {} local hc = 0 @@ -98,17 +99,35 @@ function pkgfs.component.close(handle) return true end -function pkgfs.add(fname,comp) -- string boolean -- -- Add a package as specified in *fname* to the pkgfs component. If *comp* is true, read it as a LZ16-compressed package. - if fname:sub(1,1) ~= "/" then - fname = "/"..fnormalize(os.getenv("PWD").."/"..fname) +local function index() + findex = {} + for k,v in pairs(pkgfs.files) do + fname, comp = v[1], v[2] + if fname:sub(1,1) ~= "/" then + fname = "/"..fnormalize(os.getenv("PWD").."/"..fname) + end + local f = fopen(fname,comp) + if not f then error("unable to open file") end + print(fname) + for name, read, fsize in mtar.iter(f) do + findex[fnormalize(name)] = {fname,comp} + end + f:close() end - local f = fopen(fname,comp) - if not fname then error("unable to open file") end - print(fname) - for name, read, fsize in mtar.iter(f) do - findex[fnormalize(name)] = {fname,comp} + return true +end + +function pkgfs.add(fname,comp) -- string boolean -- boolean -- Add a package as specified in *fname* to the pkgfs component. If *comp* is true, read it as a LZ16-compressed package. + pkgfs.files[#pkgfs.files+1] = {fname,comp} + return index() +end +function pkgfs.remove(fname) -- string -- boolean -- Removes the package specified by *fname* from the pkgfs index. + for k,v in pairs(pkgfs.files) do + if v[1] == fname then + table.remove(pkgfs.files,k) + end end - f:close() + return index() end fs.makeDirectory("/pkg")