added a ported, minimal version of the fs API from MultICE
This commit is contained in:
parent
5300a21a37
commit
d477d9a069
73
modules/lib/fs.lua
Normal file
73
modules/lib/fs.lua
Normal file
@ -0,0 +1,73 @@
|
||||
do
|
||||
_G.fs = {}
|
||||
local fT,hT = {},{["_c"]=0}
|
||||
function fs.mount(mp,pr)
|
||||
fT[mp] = pr
|
||||
end
|
||||
function fs.simplify(p)
|
||||
local pt,npt,rp = {},{},""
|
||||
for P in p:gmatch("[^/]+") do
|
||||
pt[#pt+1] = P
|
||||
end
|
||||
for k,v in pairs(pt) do
|
||||
if v == ".." then
|
||||
npt[#npt] = nil
|
||||
elseif v ~= "." then
|
||||
npt[#npt+1] = v
|
||||
end
|
||||
end
|
||||
for k,v in pairs(npt) do
|
||||
rp=rp.."/"..v
|
||||
end
|
||||
if p:sub(1,1) ~= "/" then rp = rp:sub(2) end
|
||||
return rp
|
||||
end
|
||||
function fs.resolve(p)
|
||||
if p:sub(1,1) ~= "/" then -- absolute/relative path
|
||||
p=(os.getenv("PWD") or "").."/"..p
|
||||
end
|
||||
p=fs.simplify(p)
|
||||
local pt = {}
|
||||
for P in p:gmatch("[^/]+") do
|
||||
pt[#pt+1] = P
|
||||
end
|
||||
return pt, p:match("/?(.-)/"), p:match("/?.-/(.+)")
|
||||
end
|
||||
function fs.open(p,m)
|
||||
local _,d,p = fs.resolve(p)
|
||||
local d = fT[d]
|
||||
local f,C=d.open(p,m),hT._c
|
||||
if f then
|
||||
hT._c = C + 1
|
||||
hT[C] = {d,f}
|
||||
return C
|
||||
end
|
||||
return false
|
||||
end
|
||||
function fs.close(h)
|
||||
if hT[h] then
|
||||
hT[h][1].close(hT[h][2])
|
||||
end
|
||||
return false
|
||||
end
|
||||
function fs.read(h,n)
|
||||
if hT[h] then
|
||||
return hT[h][1].read(hT[h][2],n)
|
||||
end
|
||||
return false
|
||||
end
|
||||
function fs.readall(f)
|
||||
local s=""
|
||||
repeat
|
||||
c=fs.read(f,2048)
|
||||
s=s..c
|
||||
until c==""
|
||||
return s
|
||||
end
|
||||
function fs.write(h,d)
|
||||
if hT[h] then
|
||||
return hT[h][1].write(hT[h][2],d)
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user