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:
parent
ddf4c2b617
commit
9ead1e29a6
1 changed files with 13 additions and 3 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue