summaryrefslogtreecommitdiff
path: root/lua.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-01-05 14:17:21 +0100
committerFelix Fietkau <nbd@openwrt.org>2013-01-05 14:17:21 +0100
commit852a5a4f11f0b4de924a49403ab864cc0584a0ad (patch)
tree51883262eb467673b599b67dae1f9bea71789eb7 /lua.c
parentac5351b425c2a8faf6e22f8f380f6c5536b95ad2 (diff)
add a c function for .send and .sendc
Diffstat (limited to 'lua.c')
-rw-r--r--lua.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/lua.c b/lua.c
index 0dd4d4c..0b06a33 100644
--- a/lua.c
+++ b/lua.c
@@ -89,6 +89,19 @@ static int uh_lua_recv(lua_State *L)
}
}
+static int uh_lua_send(lua_State *L)
+{
+ const char *buf;
+ size_t len;
+
+ buf = luaL_checklstring(L, 1, &len);
+ if (len > 0)
+ len = write(STDOUT_FILENO, buf, len);
+
+ lua_pushnumber(L, len);
+ return 1;
+}
+
static int
uh_lua_strconvert(lua_State *L, int (*convert)(char *, int, const char *, int))
{
@@ -138,13 +151,10 @@ static lua_State *uh_lua_state_init(void)
/* build uhttpd api table */
lua_newtable(L);
- /*
- * use print as send and sendc implementation,
- * chunked transfer is handled in the main server
- */
- lua_getglobal(L, "print");
- lua_pushvalue(L, -1);
- lua_setfield(L, -3, "send");
+ lua_pushcfunction(L, uh_lua_send);
+ lua_setfield(L, -2, "send");
+
+ lua_pushcfunction(L, uh_lua_send);
lua_setfield(L, -2, "sendc");
lua_pushcfunction(L, uh_lua_recv);