summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-05-03 17:19:20 +0000
committerjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-05-03 17:19:20 +0000
commit4965d6c03d5fd46a2498726079aa1880c9818770 (patch)
tree76ca67e830a682292bd5b52a2dbb0d7b0dcbb007
parentf978449dac910d3379e44ea438198c8f29df8008 (diff)
downloaduhttpd-4965d6c03d5fd46a2498726079aa1880c9818770.tar.gz
uhttpd: added uhttpd.docroot
Passes the document-root to the Lua handler by placing it in uhttpd.docroot. It could alternatively be placed in env.DOCUMENT_ROOT which would more closely resemble the CGI protocol; but would mean that it is not available at the time when the handler-chunk is loaded but rather not until the handler is called, without any code savings. Signed-off-by: David Favro <openwrt@meta-dynamic.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk/package/uhttpd/src@31571 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--uhttpd-lua.c12
-rw-r--r--uhttpd-lua.h2
-rw-r--r--uhttpd.c2
-rw-r--r--uhttpd.h2
4 files changed, 13 insertions, 5 deletions
diff --git a/uhttpd-lua.c b/uhttpd-lua.c
index a140dc2..83b0b0a 100644
--- a/uhttpd-lua.c
+++ b/uhttpd-lua.c
@@ -137,7 +137,7 @@ static int uh_lua_urlencode(lua_State *L)
}
-lua_State * uh_lua_init(const char *handler)
+lua_State * uh_lua_init(const struct config *conf)
{
lua_State *L = lua_open();
const char *err_str = NULL;
@@ -164,12 +164,20 @@ lua_State * uh_lua_init(const char *handler)
lua_pushcfunction(L, uh_lua_urlencode);
lua_setfield(L, -2, "urlencode");
+ /* Pass the document-root to the Lua handler by placing it in
+ ** uhttpd.docroot. It could alternatively be placed in env.DOCUMENT_ROOT
+ ** which would more closely resemble the CGI protocol; but would mean that
+ ** it is not available at the time when the handler-chunk is loaded but
+ ** rather not until the handler is called, without any code savings. */
+ lua_pushstring(L, conf->docroot);
+ lua_setfield(L, -2, "docroot");
+
/* _G.uhttpd = { ... } */
lua_setfield(L, LUA_GLOBALSINDEX, "uhttpd");
/* load Lua handler */
- switch( luaL_loadfile(L, handler) )
+ switch( luaL_loadfile(L, conf->lua_handler) )
{
case LUA_ERRSYNTAX:
fprintf(stderr,
diff --git a/uhttpd-lua.h b/uhttpd-lua.h
index 7304665..2d2f73c 100644
--- a/uhttpd-lua.h
+++ b/uhttpd-lua.h
@@ -32,7 +32,7 @@
#define UH_LUA_ERR_PARAM -3
-lua_State * uh_lua_init();
+lua_State * uh_lua_init(const struct config *conf);
void uh_lua_request(
struct client *cl, struct http_request *req, lua_State *L
diff --git a/uhttpd.c b/uhttpd.c
index 5d66e23..78e0b5d 100644
--- a/uhttpd.c
+++ b/uhttpd.c
@@ -1089,7 +1089,7 @@ int main (int argc, char **argv)
if( ! conf.lua_prefix )
conf.lua_prefix = "/lua";
- conf.lua_state = conf.lua_init(conf.lua_handler);
+ conf.lua_state = conf.lua_init(&conf);
}
}
#endif
diff --git a/uhttpd.h b/uhttpd.h
index 993bf93..c03d1ae 100644
--- a/uhttpd.h
+++ b/uhttpd.h
@@ -83,7 +83,7 @@ struct config {
char *lua_prefix;
char *lua_handler;
lua_State *lua_state;
- lua_State * (*lua_init) (const char *handler);
+ lua_State * (*lua_init) (const struct config *conf);
void (*lua_close) (lua_State *L);
void (*lua_request) (struct client *cl, struct http_request *req, lua_State *L);
#endif