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

This commit is contained in:
aiyion.prime 2021-07-15 09:11:24 +02:00
parent 6aa7d85c12
commit 1acc783a09

View File

@ -190,11 +190,14 @@ function M.log(message, verbose)
posix_syslog.syslog(posix_syslog.LOG_INFO, message)
end
-- Blindly close the file descriptors in a given table.
local function close_fds(descriptors)
for _, fd in pairs(descriptors) do
-- Blindly close the file descriptors in an arbitrary amount of given tables.
local function close_fds(...)
for i=1, select("#", ...) do
local descriptor_table = select(i, ...)
for _, fd in pairs(descriptor_table) do
posix_unistd.close(fd)
end
end
end
M.subprocess = {}
@ -228,8 +231,7 @@ function M.subprocess.popen(path, argt, options)
local pid, errmsg, errnum = posix_unistd.fork()
if pid == nil then
close_fds(childfds)
close_fds(parentfds)
close_fds(childfds, parentfds)
return nil, errmsg, errnum
elseif pid == 0 then
local null = -1
@ -243,12 +245,9 @@ function M.subprocess.popen(path, argt, options)
if option == M.subprocess.DEVNULL then
posix_unistd.dup2(null, stdiostreams[iostream])
elseif option == M.subprocess.PIPE then
-- only close these, if they exist
posix_unistd.close(parentfds[iostream])
posix_unistd.dup2(childfds[iostream], stdiostreams[iostream])
-- close all the dups
posix_unistd.close(childfds[iostream])
end
close_fds(childfds, parentfds)
end
-- close potential null