X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fcore%2Fluasrc%2Futil.lua;h=bf463ae7055f0c52ccfae83a6161ba8fa0d2889a;hp=2ede71a264502c1ad6572efdf8a6821853901adc;hb=33ef3a1da2533be6a0ce1d425d80a7b911c406d9;hpb=b3d63252e772f98a269a241c9f9f995f216efb84 diff --git a/libs/core/luasrc/util.lua b/libs/core/luasrc/util.lua index 2ede71a26..bf463ae70 100644 --- a/libs/core/luasrc/util.lua +++ b/libs/core/luasrc/util.lua @@ -436,14 +436,27 @@ function _serialize_table(t, seen) assert(not seen[t], "Recursion detected.") seen[t] = true - local data = "" + local data = "" + local idata = "" + local ilen = 0 + for k, v in pairs(t) do - k = serialize_data(k, seen) - v = serialize_data(v, seen) - data = data .. ( #data > 0 and ", " or "" ) .. - '[' .. k .. '] = ' .. v + if type(k) ~= "number" or k < 1 or math.floor(k) ~= k or ( k - #t ) > 3 then + k = serialize_data(k, seen) + v = serialize_data(v, seen) + data = data .. ( #data > 0 and ", " or "" ) .. + '[' .. k .. '] = ' .. v + elseif k > ilen then + ilen = k + end end - return data + + for i = 1, ilen do + local v = serialize_data(t[i], seen) + idata = idata .. ( #idata > 0 and ", " or "" ) .. v + end + + return idata .. ( #data > 0 and ", " or "" ) .. data end --- Recursively serialize given data to lua code, suitable for restoring