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