]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Support multiple arguments in lua getopt
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 3 Mar 2018 13:10:11 +0000 (13:10 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 3 Mar 2018 13:10:11 +0000 (13:10 +0000)
lualib/rspamadm/getopt.lua

index bd0a2f67e996625b90358f19a877e495f7ef1f79..c36774092c47aab8f65c1c9a8a768a2cd5a0e26f 100644 (file)
@@ -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