From: Jo-Philipp Wich Date: Thu, 26 Jul 2018 20:13:38 +0000 (+0200) Subject: luci-base: utils: support multiple return values in util.ubus() X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=186228e3651e84151f10eff3e415f3e350d7b37f;p=oweals%2Fluci.git luci-base: utils: support multiple return values in util.ubus() This is needed to deal with ubus methods that return multiple results, e.g. session/list Signed-off-by: Jo-Philipp Wich (cherry picked from commit 9ead1e29a6404c5ba3a438a3f8a68b6a3dcaee3f) --- diff --git a/modules/luci-base/luasrc/util.lua b/modules/luci-base/luasrc/util.lua index 10428b0b3..f16b3afb2 100644 --- a/modules/luci-base/luasrc/util.lua +++ b/modules/luci-base/luasrc/util.lua @@ -16,7 +16,7 @@ local _ubus = require "ubus" local _ubus_connection = nil local getmetatable, setmetatable = getmetatable, setmetatable -local rawget, rawset, unpack = rawget, rawset, unpack +local rawget, rawset, unpack, select = rawget, rawset, unpack, select local tostring, type, assert, error = tostring, type, assert, error local ipairs, pairs, next, loadstring = ipairs, pairs, next, loadstring local require, pcall, xpcall = require, pcall, xpcall @@ -647,6 +647,17 @@ local ubus_codes = { "CONNECTION_FAILED" } +local function ubus_return(...) + if select('#', ...) == 2 then + local rv, err = select(1, ...), select(2, ...) + if rv == nil and type(err) == "number" then + return nil, err, ubus_codes[err] + end + end + + return ... +end + function ubus(object, method, data) if not _ubus_connection then _ubus_connection = _ubus.connect() @@ -657,8 +668,7 @@ function ubus(object, method, data) if type(data) ~= "table" then data = { } end - local rv, err = _ubus_connection:call(object, method, data) - return rv, err, ubus_codes[err] + return ubus_return(_ubus_connection:call(object, method, data)) elseif object then return _ubus_connection:signatures(object) else