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 <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2018-07-26 22:13:38 +02:00
parent ddf4c2b617
commit 9ead1e29a6

View file

@ -16,7 +16,7 @@ local _ubus = require "ubus"
local _ubus_connection = nil local _ubus_connection = nil
local getmetatable, setmetatable = getmetatable, setmetatable 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 tostring, type, assert, error = tostring, type, assert, error
local ipairs, pairs, next, loadstring = ipairs, pairs, next, loadstring local ipairs, pairs, next, loadstring = ipairs, pairs, next, loadstring
local require, pcall, xpcall = require, pcall, xpcall local require, pcall, xpcall = require, pcall, xpcall
@ -647,6 +647,17 @@ local ubus_codes = {
"CONNECTION_FAILED" "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) function ubus(object, method, data)
if not _ubus_connection then if not _ubus_connection then
_ubus_connection = _ubus.connect() _ubus_connection = _ubus.connect()
@ -657,8 +668,7 @@ function ubus(object, method, data)
if type(data) ~= "table" then if type(data) ~= "table" then
data = { } data = { }
end end
local rv, err = _ubus_connection:call(object, method, data) return ubus_return(_ubus_connection:call(object, method, data))
return rv, err, ubus_codes[err]
elseif object then elseif object then
return _ubus_connection:signatures(object) return _ubus_connection:signatures(object)
else else