diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2018-09-15 21:07:42 -0700 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2018-09-16 23:39:10 -0700 |
commit | 710e3e446804957b935cd9fda5aa2f2c2a55a4f4 (patch) | |
tree | 1e5a386f1002111a8f42af6513cc2f09f9eea10c | |
parent | 0edb339f984c82accedbc1bbd799bfe31029c52e (diff) | |
download | luarocks-710e3e446804957b935cd9fda5aa2f2c2a55a4f4.tar.gz luarocks-710e3e446804957b935cd9fda5aa2f2c2a55a4f4.tar.bz2 luarocks-710e3e446804957b935cd9fda5aa2f2c2a55a4f4.zip |
core.util: be more resilient when reading command outputs
When luarocks.loader runs from within another process,
we may end up getting an Interrupted signal when reading
from a pipe, which is not handled by Lua.
-rw-r--r-- | src/luarocks/core/util.lua | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/luarocks/core/util.lua b/src/luarocks/core/util.lua index 5f5c0fe1..8789851c 100644 --- a/src/luarocks/core/util.lua +++ b/src/luarocks/core/util.lua | |||
@@ -12,10 +12,17 @@ local require = nil | |||
12 | -- May be used to read more, passing, for instance, "*a". | 12 | -- May be used to read more, passing, for instance, "*a". |
13 | -- @return string: the output of the program. | 13 | -- @return string: the output of the program. |
14 | function util.popen_read(cmd, spec) | 14 | function util.popen_read(cmd, spec) |
15 | local fd = io.popen(cmd) | 15 | local tmpfile = os.tmpname() |
16 | os.execute(cmd .. " > " .. tmpfile) | ||
17 | local fd = io.open(tmpfile, "rb") | ||
18 | if not fd then | ||
19 | os.remove(tmpfile) | ||
20 | return "" | ||
21 | end | ||
16 | local out = fd:read(spec or "*l") | 22 | local out = fd:read(spec or "*l") |
17 | fd:close() | 23 | fd:close() |
18 | return out | 24 | os.remove(tmpfile) |
25 | return out or "" | ||
19 | end | 26 | end |
20 | 27 | ||
21 | --- Create a new shallow copy of a table: a new table with | 28 | --- Create a new shallow copy of a table: a new table with |