gluon-core: gluon.util: make exec() replace all stdio files with /dev/null
This commit is contained in:
parent
ea12cb770d
commit
e39cbcbda1
@ -13,13 +13,14 @@ local function do_filter_prefix(input, output, prefix)
|
|||||||
return f
|
return f
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function close_stdio(stream, mode)
|
||||||
local function escape_args(ret, arg0, ...)
|
local null = nixio.open('/dev/null', mode)
|
||||||
if not arg0 then
|
if null then
|
||||||
return ret
|
nixio.dup(null, nixio[stream])
|
||||||
|
if null:fileno() > 2 then
|
||||||
|
null:close()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return escape_args(ret .. "'" .. string.gsub(arg0, "'", "'\\''") .. "' ", ...)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -76,9 +77,21 @@ function remove_from_set(t, itm)
|
|||||||
return changed
|
return changed
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function exec(...)
|
function exec(...)
|
||||||
return os.execute(escape_args('', 'exec', ...))
|
local pid, errno, error = nixio.fork()
|
||||||
|
if pid == 0 then
|
||||||
|
close_stdio('stdin', 'r')
|
||||||
|
close_stdio('stdout', 'w')
|
||||||
|
close_stdio('stderr', 'w')
|
||||||
|
|
||||||
|
nixio.execp(...)
|
||||||
|
os.exit(127)
|
||||||
|
elseif pid > 0 then
|
||||||
|
local wpid, status, code = nixio.waitpid(pid)
|
||||||
|
return wpid and status == 'exited' and code
|
||||||
|
else
|
||||||
|
return nil, errno, error
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Removes all lines starting with a prefix from a file, optionally adding a new one
|
-- Removes all lines starting with a prefix from a file, optionally adding a new one
|
||||||
|
Loading…
Reference in New Issue
Block a user