summaryrefslogtreecommitdiff
path: root/dalos-luahandle.lua
diff options
context:
space:
mode:
Diffstat (limited to 'dalos-luahandle.lua')
-rw-r--r--dalos-luahandle.lua52
1 files changed, 52 insertions, 0 deletions
diff --git a/dalos-luahandle.lua b/dalos-luahandle.lua
new file mode 100644
index 0000000..d3615fc
--- /dev/null
+++ b/dalos-luahandle.lua
@@ -0,0 +1,52 @@
+dalosp.luahandle = {
+ create = function (tab)
+ local obj = {
+ offset = 0,
+ canread = function (self) return true end,
+ canwrite = function (self) return false end,
+ canseek = function (self) return true end,
+ canwatch = function (self) return false end,
+ tell = function (self) return self.offset end,
+ getsize = function (self) return self.size end,
+ getmodif = function (self) return 0 end,
+ flush = function (self) return true end,
+ seek = function (self, offset, wheel)
+ if wheel == SEEK_SET then
+ self.offset = offset
+ elseif wheel == SEEK_CUR then
+ self.offset = self.offset + offset
+ elseif wheel == SEEK_END then
+ self.offset = self.size + offset
+ else
+ error "Unknown wheel"
+ end
+ if self.offset < 0 then self.offset = 0 end
+ if self.offset >= self.size then self.offset = self.size end
+ if self.do_seek then self:do_seek() end
+ return self.offset
+ end,
+ read = function (self, userdata, count)
+ count = math.min(count, self.size - self.offset)
+
+ if count == 0 then
+ if self.got_eof then self.lh:close() end
+ self.got_eof = true
+ return 0
+ end
+
+ self.got_eof = false
+
+ local r, t = self:do_read(count, userdata)
+ self.offset = self.offset + r
+ if self.post_read then self:post_read(r) end
+ return r, t
+ end,
+ }
+ for k, v in pairs(tab) do obj[k] = v end
+ local newh = HandleLua(obj)
+ obj.lh = newh
+ return newh
+ end,
+}
+
+dalos.luahandle = dalosp.luahandle.create