[OpenWrt-Devel] [PATCH 1/2] ubus: lua: return string errors, not just codes
Karl Palsson
karlp at tweak.net.au
Fri Apr 29 09:53:58 EDT 2016
From: Karl Palsson <karlp at etactica.com>
Return an extra string to lua clients, not just the code.
Signed-off-by: Karl Palsson <karlp at etactica.com>
---
Makes it much more pleasant when working with ubus via lua, rather
than simply getting the integer return code. example code also
updated to demonstrate access to the code and message.
lua/test_client.lua | 11 +++++++----
lua/ubus.c | 24 ++++++++++++++++--------
2 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/lua/test_client.lua b/lua/test_client.lua
index 0b60e0d..c006b4c 100755
--- a/lua/test_client.lua
+++ b/lua/test_client.lua
@@ -22,10 +22,13 @@ for i, n in ipairs(namespaces) do
end
end
-local status = conn:call("test", "hello", { msg = "eth0" })
-
-for k, v in pairs(status) do
- print("key=" .. k .. " value=" .. tostring(v))
+local status, rc, desc = conn:call("test", "hello", { msg = "eth0" })
+if not status then
+ print("test.hello failed, code, desc: ", rc, desc)
+else
+ for k, v in pairs(status) do
+ print("key=" .. k .. " value=" .. tostring(v))
+ end
end
local status = {conn:call("test", "hello1", { msg = "eth0" })}
diff --git a/lua/ubus.c b/lua/ubus.c
index 86e34b7..0df2887 100644
--- a/lua/ubus.c
+++ b/lua/ubus.c
@@ -246,7 +246,8 @@ ubus_lua_connect(lua_State *L)
/* NB: no errors from ubus_connect() yet */
lua_pushnil(L);
lua_pushinteger(L, UBUS_STATUS_UNKNOWN_ERROR);
- return 2;
+ lua_pushstring(L, ubus_strerror(UBUS_STATUS_UNKNOWN_ERROR));
+ return 3;
}
@@ -273,7 +274,8 @@ ubus_lua_objects(lua_State *L)
lua_pop(L, 1);
lua_pushnil(L);
lua_pushinteger(L, rv);
- return 2;
+ lua_pushstring(L, ubus_strerror(rv));
+ return 3;
}
return 1;
@@ -335,7 +337,8 @@ static int ubus_lua_reply(lua_State *L)
{
lua_pushnil(L);
lua_pushinteger(L, UBUS_STATUS_INVALID_ARGUMENT);
- return 2;
+ lua_pushstring(L, ubus_strerror(UBUS_STATUS_INVALID_ARGUMENT));
+ return 3;
}
req = lua_touserdata(L, 2);
@@ -529,7 +532,8 @@ ubus_lua_signatures(lua_State *L)
lua_pop(L, 1);
lua_pushnil(L);
lua_pushinteger(L, rv);
- return 2;
+ lua_pushstring(L, ubus_strerror(rv));
+ return 3;
}
return 1;
@@ -564,7 +568,8 @@ ubus_lua_call(lua_State *L)
{
lua_pushnil(L);
lua_pushinteger(L, UBUS_STATUS_INVALID_ARGUMENT);
- return 2;
+ lua_pushstring(L, ubus_strerror(UBUS_STATUS_INVALID_ARGUMENT));
+ return 3;
}
rv = ubus_lookup_id(c->ctx, path, &id);
@@ -573,7 +578,8 @@ ubus_lua_call(lua_State *L)
{
lua_pushnil(L);
lua_pushinteger(L, rv);
- return 2;
+ lua_pushstring(L, ubus_strerror(rv));
+ return 3;
}
top = lua_gettop(L);
@@ -584,7 +590,8 @@ ubus_lua_call(lua_State *L)
lua_pop(L, 1);
lua_pushnil(L);
lua_pushinteger(L, rv);
- return 2;
+ lua_pushstring(L, ubus_strerror(rv));
+ return 3;
}
return lua_gettop(L) - top;
@@ -669,7 +676,8 @@ ubus_lua_send(lua_State *L)
if (!ubus_lua_format_blob_array(L, &c->buf, true)) {
lua_pushnil(L);
lua_pushinteger(L, UBUS_STATUS_INVALID_ARGUMENT);
- return 2;
+ lua_pushstring(L, ubus_strerror(UBUS_STATUS_INVALID_ARGUMENT));
+ return 3;
}
// Send the event
--
2.4.11
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list