end
fdct._p = {}
- fdct._p.readfo = rc
- fdct._p.writefo = re
+ fdct._p.rfd = rc
+ fdct._p.wfd = re
fdct._p.buffer = ""
elseif fdct.istype == "readfo" then
else
local rc, re
for _,fdct in ipairs(fdctv) do
if fdct.istype == "writefunc" then
- rc, re = eio.fclose(fdct._p.readfo)
+ rc, re = eio.close(fdct._p.rfd)
if not rc then
e2lib.abort(re)
end
- rc, re = eio.dup2(eio.fileno(fdct._p.writefo), fdct.dup)
+ rc, re = eio.dup2(fdct._p.wfd, fdct.dup)
if not rc then
e2lib.abort(re)
end
local rc, re
for _,fdct in ipairs(fdctv) do
if fdct.istype == "writefunc" then
- rc, re = eio.fclose(fdct._p.writefo)
+ rc, re = eio.close(fdct._p.wfd)
if not rc then
return false, re
end
local function fd_find_writefunc_by_readfd(fdctv, fd)
for _,fdct in ipairs(fdctv) do
- if fdct.istype == "writefunc" and
- eio.fileno(fdct._p.readfo) == fd then
+ if fdct.istype == "writefunc" and fdct._p.rfd == fd then
return fdct
end
end
fdvec = {}
for _,fdct in ipairs(fdctv) do
if fdct.istype == "writefunc" then
- table.insert(fdvec, eio.fileno(fdct._p.readfo))
+ table.insert(fdvec, fdct._p.rfd)
end
end
if ptab.POLLIN then
fdct = fd_find_writefunc_by_readfd(fdctv, ptab.fd)
if fdct then
- local data, readsz
-
- while true do
- readsz = 64*1024
- data, re = eio.fread(fdct._p.readfo, readsz)
- if not data then
- return false, re
- elseif data == "" then
- break
- end
+ local data
+ data, re = eio.read(fdct._p.rfd, 4096)
+ if not data then
+ return false, re
+ elseif data ~= "" then
if fdct.linebuffer then
fd_linebuffer(fdct, data)
else
if fdct then
fd_linebuffer_final(fdct)
end
-
table.remove(fdvec, ptab.fdvecpos)
end
end
local rc, re
for _,fdct in ipairs(fdctv) do
if fdct.istype == "writefunc" then
- rc, re = eio.fclose(fdct._p.readfo)
+ rc, re = eio.close(fdct._p.rfd)
if not rc then
return false, re
end
local rc, re
-- ping parent
- rc, re = eio.fwrite(sync_pipes[4], "c")
+ rc, re = eio.write(sync_pipes[4], "c")
if not rc then
return false, re
+ elseif rc ~= 1 then
+ return false, err.new("wrote %d bytes instead of 1", rc)
end
-- wait for parent
- rc, re = eio.fgetc(sync_pipes[1])
+ rc, re = eio.read(sync_pipes[1], 1)
if not rc then
return false, re
elseif rc ~= "p" then
end
-- cleanup
- for _,pfo in ipairs(sync_pipes) do
- rc, re = eio.fclose(pfo)
+ for _,fd in ipairs(sync_pipes) do
+ rc, re = eio.close(fd)
if not rc then
return false, re
end
local rc, re
-- ping child
- rc, re = eio.fwrite(sync_pipes[2], "p")
+ rc, re = eio.write(sync_pipes[2], "p")
if not rc then
return false, re
+ elseif rc ~= 1 then
+ return false, err.new("wrote %d bytes instead of 1", rc)
end
-- wait for child
- rc, re = eio.fgetc(sync_pipes[3])
+ rc, re = eio.read(sync_pipes[3], 1)
if not rc then
return false, re
elseif rc ~= "c" then
end
-- cleanup
- for _,pfo in ipairs(sync_pipes) do
- rc, re = eio.fclose(pfo)
+ for _,fd in ipairs(sync_pipes) do
+ rc, re = eio.close(fd)
if not rc then
return false, re
end