1
0
mirror of https://github.com/20kdc/OC-KittenOS.git synced 2024-12-26 19:08:06 +11:00
OC-KittenOS/code/libs/sys-filewrap.lua
2018-03-28 22:15:09 +01:00

51 lines
1.2 KiB
Lua

-- This is released into the public domain.
-- No warranty is provided, implied or otherwise.
return function(dev, file, mode)
local n = "rb"
if mode then n = "wb" end
local handle, r = dev.open(file, n)
if not handle then return nil, r end
local open = true
local function closer()
if not open then return end
open = false
pcall(function()
dev.close(handle)
end)
end
local function seeker(whence, point)
if not open then return end
return dev.seek(handle, whence, point)
end
if not mode then
return {
close = closer,
seek = seeker,
read = function (len)
if len == "*a" then
local ch = ""
local c = dev.read(handle, neo.readBufSize)
while c do
ch = ch .. c
c = dev.read(handle, neo.readBufSize)
end
return ch
end
if type(len) ~= "number" then error("Length of read must be number or '*a'") end
return dev.read(handle, len)
end
}, closer
else
return {
close = closer,
seek = seeker,
write = function (txt)
if type(txt) ~= "string" then error("Write data must be string-bytearray") end
local ok, b = dev.write(handle, txt)
if not ok then error(tostring(b)) end
end
}, closer
end
end