diff --git a/src/civetweb.c b/src/civetweb.c index e19d5ccf..341b2bbc 100644 --- a/src/civetweb.c +++ b/src/civetweb.c @@ -526,7 +526,7 @@ enum { NUM_THREADS, RUN_AS_USER, REWRITE, HIDE_FILES, REQUEST_TIMEOUT, #if defined(USE_LUA) - LUA_SCRIPT_EXTENSIONS, LUA_SERVER_PAGE_EXTENSIONS, + LUA_PRELOAD_FILE, LUA_SCRIPT_EXTENSIONS, LUA_SERVER_PAGE_EXTENSIONS, #endif #if defined(USE_WEBSOCKET) WEBSOCKET_ROOT, @@ -570,6 +570,7 @@ static const char *config_options[] = { "request_timeout_ms", "30000", #if defined(USE_LUA) + "lua_preload_file", NULL, "lua_script_pattern", "**.lua$", "lua_server_page_pattern", "**.lp$|**.lsp$", #endif diff --git a/src/main.c b/src/main.c index bdcd6f2e..5e1e6f97 100644 --- a/src/main.c +++ b/src/main.c @@ -552,6 +552,9 @@ static int is_filename_option(const char *option_name) !strcmp(option_name, "put_delete_auth_file") || !strcmp(option_name, "access_log_file") || !strcmp(option_name, "error_log_file") || +#ifdef USE_LUA + !strcmp(option_name, "lua_preload_file") || +#endif !strcmp(option_name, "ssl_certificate"); } diff --git a/src/mod_lua.inl b/src/mod_lua.inl index 8f6dba34..0b419f15 100644 --- a/src/mod_lua.inl +++ b/src/mod_lua.inl @@ -605,6 +605,7 @@ static void prepare_lua_environment(struct mg_connection *conn, lua_State *L, co { const struct mg_request_info *ri = mg_get_request_info(conn); char src_addr[IP_ADDR_STR_LEN]; + const char * preload_file = conn->ctx->config[LUA_PRELOAD_FILE]; int i; extern void luaL_openlibs(lua_State *); @@ -719,6 +720,11 @@ static void prepare_lua_environment(struct mg_connection *conn, lua_State *L, co /* Register default mg.onerror function */ IGNORE_UNUSED_RESULT(luaL_dostring(L, "mg.onerror = function(e) mg.write('\\nLua error:\\n', " "debug.traceback(e, 1)) end")); + + /* Preload */ + if ((preload_file != NULL) && (*preload_file != 0)) { + IGNORE_UNUSED_RESULT(luaL_dofile(L, preload_file)); + } } static int lua_error_handler(lua_State *L)