fixup! gluon-core: implement popen3() in gluon/util.lua

This commit is contained in:
aiyion.prime 2021-07-13 09:15:58 +02:00
parent 47f835e254
commit a125242f4c

View File

@ -200,9 +200,10 @@ M.subprocess.PIPE = 1
function M.subprocess.popen(path, argt, options) function M.subprocess.popen(path, argt, options)
local childfds = {} local childfds = {}
local parentfds = {} local parentfds = {}
local stdiostreams = {stdin = 0, stdout = 1, stderr = 2}
for iostream, option in pairs(options) do for iostream in pairs(stdiostreams) do
if option == M.subprocess.PIPE then if options[iostream] == M.subprocess.PIPE then
local piper, pipew = posix_unistd.pipe() local piper, pipew = posix_unistd.pipe()
if iostream == "stdin" then if iostream == "stdin" then
childfds[iostream] = piper childfds[iostream] = piper
@ -223,13 +224,13 @@ function M.subprocess.popen(path, argt, options)
return nil, errmsg, errnum return nil, errmsg, errnum
elseif pid == 0 then elseif pid == 0 then
local null = -1 local null = -1
local stdiostreams = {stdin = 0, stdout = 1, stderr = 2}
if M.contains(options, M.subprocess.DEVNULL) then if M.contains(options, M.subprocess.DEVNULL) then
-- only open, if there's anything to discard -- only open, if there's anything to discard
null = posix_fcntl.open('/dev/null', posix_fcntl.O_RDWR) null = posix_fcntl.open('/dev/null', posix_fcntl.O_RDWR)
end end
for iostream, option in pairs(options) do for iostream in pairs(stdiostreams) do
local option = options[iostream]
if option == M.subprocess.DEVNULL then if option == M.subprocess.DEVNULL then
posix_unistd.dup2(null, stdiostreams[iostream]) posix_unistd.dup2(null, stdiostreams[iostream])
elseif option == M.subprocess.PIPE then elseif option == M.subprocess.PIPE then