uhttpd: added uhttpd.docroot
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 3 May 2012 17:19:20 +0000 (17:19 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 3 May 2012 17:19:20 +0000 (17:19 +0000)
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>
SVN-Revision: 31571

package/uhttpd/src/uhttpd-lua.c
package/uhttpd/src/uhttpd-lua.h
package/uhttpd/src/uhttpd.c
package/uhttpd/src/uhttpd.h

index a140dc2f2de36eb8a2e88d35e3bed86be184b72f..83b0b0a26b9cfbced8afb9c5289948362f59fd9d 100644 (file)
@@ -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,
index 7304665000f11026f59ca9a2c40882fa2d969a61..2d2f73c1c2ab86482ff0401a4d28c5bca27f21c1 100644 (file)
@@ -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
index 5d66e23a50b5e5590b848cde75f2a896f678d90f..78e0b5d952ec8027b4c38f0dc89649640c2b8f5a 100644 (file)
@@ -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
index 993bf93af1dc0d436864379fbea730df2d196f00..c03d1ae6510737d9cc10b4c3809cd30dd33f5142 100644 (file)
@@ -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