Files
HyperionOS/src/disks/1h/sys/fs/init

124 lines
2.8 KiB
Plaintext

local args={...}
local drivers=args[1]
local log=args[2]
local bootDisk=args[3]
local driverutil=args[4]
local wd="/"
log.api.log("Bootdrive is "..bootDisk)
if not drivers.disk then
error("WTF") -- ???
end
local disks={}
local mounts={
["/"]=bootDisk
}
local meta={}
local function refreshDisks()
local diskstmp={}
local tmp={}
for i,v in driverutil.list("disk") do
tmp[#tmp+1] = v
end
for _,d in ipairs(tmp) do
for i,v in d.api.list() do
if diskstmp[i]==nil then
diskstmp[i]=v
end
end
end
disks=diskstmp
end
refreshDisks()
--[[
meta=load("return "..(disks[bootDisk].readAllText("/sys/fs/meta.ltn") or "{}"), "meta")()
if not meta then error("Meta failed to load") end
]]
local function resolve(path)
if path:sub(1,1)~="/" then path=wd..path end
local currmatch="/"
for i,_ in pairs(mounts) do
if string.hasPrefix(path, i) then
if #i>#currmatch then
currmatch=i
end
end
end
local drive=disks[mounts[currmatch]]
local newPath=string.getSuffix(path, currmatch)
return drive, newPath
end
local fs={}
function fs.list(path)
local drive, newPath = resolve(path)
return drive.list(newPath)
end
function fs.readAllText(path)
local drive, newPath = resolve(path)
return drive.readAllText(newPath)
end
function fs.writeAllText(path, content)
local drive, newPath = resolve(path)
return drive.writeAllText(newPath, content)
end
function fs.delete(path)
local drive, newPath = resolve(path)
return drive.delete(newPath)
end
function fs.exists(path)
local drive, newPath = resolve(path)
return (drive.fileExists(newPath) or drive.directoryExists(newPath))
end
function fs.fileExists(path)
local drive, newPath = resolve(path)
return drive.fileExists(newPath)
end
function fs.directoryExists(path)
local drive, newPath = resolve(path)
return drive.directoryExists(newPath)
end
function fs.createFile(path)
local drive, newPath = resolve(path)
return drive.makeFile(newPath)
end
function fs.createDirectory(path)
local drive, newPath = resolve(path)
return drive.makeDirectory(newPath)
end
fs.mkDir=fs.createDirectory
fs.mkFile=fs.createFile
fs.isDir=fs.directoryExists
fs.isFile=fs.fileExists
function fs.getWorkingDir()
return wd
end
function fs.setWorkingDir(dir)
if type(dir)~="string" then error("Invailid path") end
if dir:sub(1,1)~="/" then dir=wd..dir end
if dir:sub(#dir,#dir)~="/" then dir=dir.."/" end
if not fs.isDir(dir) then error("Invailid path") end
end
function fs.loadAsFunc(path)
local file = fs.readAllText(path)
return load(file, path, "t", setmetatable({},{
__index=_G,
__metatable=false
}))
end
return fs