From 9d30bec0afe93a7a2284ae8adeeb03b2b36709dc Mon Sep 17 00:00:00 2001 From: daurnimator Date: Thu, 29 Oct 2020 05:46:41 +1100 Subject: Use table.pack so that nil varags aren't dropped (#1229) * fs: fix verbose mode when an argument is nil * Use table.pack in more places --- src/luarocks/cmd.lua | 7 ++++--- src/luarocks/fs.lua | 5 +++-- src/luarocks/fs/lua.lua | 6 +++++- src/luarocks/tools/zip.lua | 6 +++++- src/luarocks/util.lua | 5 +++-- 5 files changed, 20 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/luarocks/cmd.lua b/src/luarocks/cmd.lua index 37266b40..9077652a 100644 --- a/src/luarocks/cmd.lua +++ b/src/luarocks/cmd.lua @@ -12,6 +12,7 @@ local fs = require("luarocks.fs") local argparse = require("luarocks.argparse") local unpack = table.unpack or unpack +local pack = table.pack or function(...) return { n = select("#", ...), ... } end local hc_ok, hardcoded = pcall(require, "luarocks.core.hardcoded") if not hc_ok then @@ -532,10 +533,10 @@ function cmd.run_command(description, commands, external_namespace, ...) end local function process_cmdline_vars(...) - local args = {...} + local args = pack(...) local cmdline_vars = {} - local last = #args - for i = 1, #args do + local last = args.n + for i = 1, args.n do if args[i] == "--" then last = i - 1 break diff --git a/src/luarocks/fs.lua b/src/luarocks/fs.lua index 54891eac..bd1a96a2 100644 --- a/src/luarocks/fs.lua +++ b/src/luarocks/fs.lua @@ -58,8 +58,9 @@ do if name ~= "init" and not fs[name] then fs[name] = function(...) if fs_is_verbose then - local args = { ... } - for i, arg in ipairs(args) do + local args = pack(...) + for i=1, args.n do + local arg = args[i] local pok, v = pcall(string.format, "%q", arg) args[i] = pok and v or tostring(arg) end diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index e431adfd..b9b36447 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua @@ -10,6 +10,8 @@ local cfg = require("luarocks.core.cfg") local dir = require("luarocks.dir") local util = require("luarocks.util") +local pack = table.pack or function(...) return { n = select("#", ...), ... } end + local socket_ok, zip_ok, lfs_ok, md5_ok, posix_ok, bz2_ok, _ local http, ftp, zip, lfs, md5, posix, bz2 @@ -54,7 +56,9 @@ end local function quote_args(command, ...) local out = { command } - for _, arg in ipairs({...}) do + local args = pack(...) + for i=1, args.n do + local arg = args[i] assert(type(arg) == "string") out[#out+1] = fs.Q(arg) end diff --git a/src/luarocks/tools/zip.lua b/src/luarocks/tools/zip.lua index f08162c5..fb27456d 100644 --- a/src/luarocks/tools/zip.lua +++ b/src/luarocks/tools/zip.lua @@ -8,6 +8,8 @@ local fs = require("luarocks.fs") local fun = require("luarocks.fun") local dir = require("luarocks.dir") +local pack = table.pack or function(...) return { n = select("#", ...), ... } end + local stat_ok, stat = pcall(require, "posix.sys.stat") local function shr(n, m) @@ -284,8 +286,10 @@ function zip.zip(zipfile, ...) return nil, "error opening "..zipfile end + local args = pack(...) local ok, err - for _, file in pairs({...}) do + for i=1, args.n do + local file = args[i] if fs.is_dir(file) then for _, entry in pairs(fs.find(file)) do local fullname = dir.path(file, entry) diff --git a/src/luarocks/util.lua b/src/luarocks/util.lua index 29a8f8e4..6161a061 100644 --- a/src/luarocks/util.lua +++ b/src/luarocks/util.lua @@ -20,6 +20,7 @@ util.warning = core.warning util.keys = core.keys local unpack = unpack or table.unpack +local pack = table.pack or function(...) return { n = select("#", ...), ... } end local scheduled_functions = {} local debug = require("debug") @@ -34,7 +35,7 @@ local debug = require("debug") function util.schedule_function(f, ...) assert(type(f) == "function") - local item = { fn = f, args = {...} } + local item = { fn = f, args = pack(...) } table.insert(scheduled_functions, item) return item end @@ -64,7 +65,7 @@ function util.run_scheduled_functions() end for i = #scheduled_functions, 1, -1 do local item = scheduled_functions[i] - item.fn(unpack(item.args)) + item.fn(unpack(item.args, 1, item.args.n)) end end -- cgit v1.2.3-55-g6feb