assorted filesystem-related improvements

This commit is contained in:
Izaya 2023-07-28 21:34:56 +10:00
parent 6d96109217
commit 395ade429a
3 changed files with 14 additions and 6 deletions

View File

@ -83,7 +83,7 @@ function shutil.df() -- Prints free disk space.
local fstr = "%-"..tostring(ml).."s %5s %5s" local fstr = "%-"..tostring(ml).."s %5s %5s"
print("fs"..(" "):rep(ml-2).." size used") print("fs"..(" "):rep(ml-2).." size used")
for k,v in pairs(mt) do for k,v in pairs(mt) do
local st, su = fs.spaceTotal(v), fs.spaceUsed(v) local st, su = fs.spaceTotal(v.."/."), fs.spaceUsed(v.."/.")
print(string.format(fstr,v,wrapUnits(st),wrapUnits(su))) print(string.format(fstr,v,wrapUnits(st),wrapUnits(su)))
end end
end end

View File

@ -99,6 +99,7 @@ function fs.mount(path,proxy) -- string table -- boolean -- Mounts the filesyste
end end
function fs.umount(path) -- string -- -- Unmounts filesystem from *path*. function fs.umount(path) -- string -- -- Unmounts filesystem from *path*.
local fsi,_ = fs.resolve(path) local fsi,_ = fs.resolve(path)
syslog(string.format("%s && %s",fs.resolve(path)))
fsmounts[fsi] = nil fsmounts[fsi] = nil
end end

View File

@ -1,29 +1,36 @@
local fsmanager = {} local fsmanager = {}
fsmanager.filesystems = {}
local run = true
local function mount(addr) local function mount(addr)
dest = component.invoke(addr,"getLabel") or "mnt/"..addr:sub(1,3) dest = "/" .. (component.invoke(addr,"getLabel") or "mnt/"..addr:sub(1,3))
dest = "/"..dest
syslog("Mounting "..addr.." to "..dest) syslog("Mounting "..addr.." to "..dest)
fs.makeDirectory(dest) fs.makeDirectory(dest)
local w,r = fs.mount(dest,component.proxy(addr)) local w,r = fs.mount(dest,component.proxy(addr))
if not w then if not w then
syslog("Failed to mount: "..r) syslog("Failed to mount: "..r)
end end
fsmanager.filesystems[addr] = dest
end end
for addr, _ in component.list("filesystem") do for addr, _ in component.list("filesystem") do
mount(addr) mount(addr)
end end
function fsmanager.start() function fsmanager.start()
run = true
return os.spawn(function() return os.spawn(function()
while true do while run do
local tE = {coroutine.yield()} local tE = {coroutine.yield()}
if tE[1] == "component_added" and tE[3] == "filesystem" then if tE[1] == "component_added" and tE[3] == "filesystem" then
mount(tE[2]) mount(tE[2])
elseif tE[1] == "component_removed" and tE[3] == "filesystem" then elseif tE[1] == "component_removed" and fsmanager.filesystems[tE[2]] and tE[3] == "filesystem" then
fs.umount("/mnt/"..tE[2]:sub(1,3)) syslog("Unmounting "..tE[2].." from "..fsmanager.filesystems[tE[2]])
fs.umount(fsmanager.filesystems[tE[2]])
end end
end end
end,"fsmanager") end,"fsmanager")
end end
function fsmanager.stop()
run = false
end
return fsmanager return fsmanager