From: Vsevolod Stakhov Date: Sat, 3 Mar 2018 13:10:11 +0000 (+0000) Subject: [Minor] Support multiple arguments in lua getopt X-Git-Tag: 1.7.0~81 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c711b12514d29da6123247e39ab8a12e8633a393;p=rspamd.git [Minor] Support multiple arguments in lua getopt --- diff --git a/lualib/rspamadm/getopt.lua b/lualib/rspamadm/getopt.lua index bd0a2f67e..c36774092 100644 --- a/lualib/rspamadm/getopt.lua +++ b/lualib/rspamadm/getopt.lua @@ -1,9 +1,25 @@ +local function insert_option(tab, name, value) + if tab[name] then + if type(tab[name] == 'table') then + table.insert(tab[name], value) + else + local old_val = tab[name] + tab[name] = { + old_val, + value + } + end + else + tab[name] = value + end +end + local function getopt(arg, options) local tab = {} for k, v in ipairs(arg) do if string.sub(v, 1, 2) == "--" then local x = string.find(v, "=", 1, true) - if x then tab[string.sub(v, 3, x - 1)] = string.sub(v, x + 1) + if x then insert_option(tab, string.sub(v, 3, x - 1), string.sub(v, x + 1)) else tab[string.sub(v, 3)] = true end elseif string.sub(v, 1, 1) == "-" then @@ -14,10 +30,10 @@ local function getopt(arg, options) jopt = string.sub(v, y, y) if string.find(options, jopt, 1, true) then if y < l then - tab[jopt] = string.sub(v, y + 1) + insert_option(tab, jopt, string.sub(v, y + 1)) y = l else - tab[jopt] = arg[k + 1] + insert_option(tab, jopt, arg[k + 1]) end else tab[jopt] = true