|  | @@ -3966,7 +3966,7 @@ static void *mmap(void *addr, int64_t len, int prot, int flags, int fd,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void handle_request(struct mg_connection *);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static int handle_lsp_request(struct mg_connection *, const char *, 
 | 
	
		
			
				|  |  | +static int handle_lsp_request(struct mg_connection *, const char *,
 | 
	
		
			
				|  |  |                                 struct file *, struct lua_State *);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static int lsp_mg_error(lua_State *L) {
 | 
	
	
		
			
				|  | @@ -4006,10 +4006,10 @@ static void lsp_abort(lua_State *L) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static int lsp(struct mg_connection *conn, const char *path,
 | 
	
		
			
				|  |  | -                const char *p, int64_t len, lua_State *L) {
 | 
	
		
			
				|  |  | -  int i, j, result, pos = 0, lines = 1, lualines = 0; 
 | 
	
		
			
				|  |  | +               const char *p, int64_t len, lua_State *L) {
 | 
	
		
			
				|  |  | +  int i, j, result, pos = 0, lines = 1, lualines = 0;
 | 
	
		
			
				|  |  |    char chunkname [MG_BUF_LEN];
 | 
	
		
			
				|  |  | -          
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    for (i = 0; i < len; i++) {
 | 
	
		
			
				|  |  |      if (p[i] == '\n') ++lines;
 | 
	
		
			
				|  |  |      if (p[i] == '<' && p[i + 1] == '?') {
 | 
	
	
		
			
				|  | @@ -4025,7 +4025,7 @@ static int lsp(struct mg_connection *conn, const char *path,
 | 
	
		
			
				|  |  |              result = lua_tointeger(L, -1);
 | 
	
		
			
				|  |  |              if (result) return result;
 | 
	
		
			
				|  |  |            } else {
 | 
	
		
			
				|  |  | -            lua_pcall(L, 0, 0, 1);  
 | 
	
		
			
				|  |  | +            lua_pcall(L, 0, 0, 1);
 | 
	
		
			
				|  |  |              result = lua_tointeger(L, -1);
 | 
	
		
			
				|  |  |              if (result) return result;
 | 
	
		
			
				|  |  |            }
 | 
	
	
		
			
				|  | @@ -4044,7 +4044,7 @@ static int lsp(struct mg_connection *conn, const char *path,
 | 
	
		
			
				|  |  |    if (i > pos) {
 | 
	
		
			
				|  |  |      mg_write(conn, p + pos, i - pos);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -4088,14 +4088,14 @@ static int lsp_mod_include(lua_State *L) {
 | 
	
		
			
				|  |  |    return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// mg.cry: Log an error. Default value for mg.onerror. 
 | 
	
		
			
				|  |  | +// mg.cry: Log an error. Default value for mg.onerror.
 | 
	
		
			
				|  |  |  static int lsp_mod_cry(lua_State *L){
 | 
	
		
			
				|  |  |    struct mg_connection *conn = lua_touserdata(L, lua_upvalueindex(1));
 | 
	
		
			
				|  |  |    cry(conn, "%s", lua_tostring(L, -1));
 | 
	
		
			
				|  |  |    return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// mg.redirect: Redirect the request (internally). 
 | 
	
		
			
				|  |  | +// mg.redirect: Redirect the request (internally).
 | 
	
		
			
				|  |  |  static int lsp_mod_redirect(lua_State *L) {
 | 
	
		
			
				|  |  |    struct mg_connection *conn = lua_touserdata(L, lua_upvalueindex(1));
 | 
	
		
			
				|  |  |    conn->request_info.uri = lua_tostring(L, -1);
 | 
	
	
		
			
				|  | @@ -4116,7 +4116,7 @@ static void reg_int(struct lua_State *L, const char *name, int val) {
 | 
	
		
			
				|  |  |    lua_rawset(L, -3);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static void reg_function(struct lua_State *L, const char *name, 
 | 
	
		
			
				|  |  | +static void reg_function(struct lua_State *L, const char *name,
 | 
	
		
			
				|  |  |                           lua_CFunction func, struct mg_connection *conn) {
 | 
	
		
			
				|  |  |    lua_pushstring(L, name);
 | 
	
		
			
				|  |  |    lua_pushlightuserdata(L, conn);
 | 
	
	
		
			
				|  | @@ -4143,7 +4143,7 @@ static void prepare_lua_environment(struct mg_connection *conn, lua_State *L) {
 | 
	
		
			
				|  |  |    lua_pushlightuserdata(L, conn);
 | 
	
		
			
				|  |  |    lua_pushcclosure(L, lsp_mg_read, 1);
 | 
	
		
			
				|  |  |    lua_setglobal(L, "read");
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    // Register mg module
 | 
	
		
			
				|  |  |    lua_newtable(L);
 | 
	
		
			
				|  |  |    reg_function(L, "cry", lsp_mod_cry, conn);
 | 
	
	
		
			
				|  | @@ -4152,7 +4152,7 @@ static void prepare_lua_environment(struct mg_connection *conn, lua_State *L) {
 | 
	
		
			
				|  |  |    reg_function(L, "redirect", lsp_mod_redirect, conn);
 | 
	
		
			
				|  |  |    reg_string(L, "version", MONGOOSE_VERSION);
 | 
	
		
			
				|  |  |    lua_setglobal(L, "mg");
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    // Export request_info
 | 
	
		
			
				|  |  |    lua_newtable(L);
 | 
	
		
			
				|  |  |    reg_string(L, "request_method", ri->request_method);
 | 
	
	
		
			
				|  | @@ -4184,7 +4184,7 @@ static void send_lua_error(struct lua_State *L, const char *fmt, ...) {
 | 
	
		
			
				|  |  |    va_start(ap, fmt);
 | 
	
		
			
				|  |  |    len += vsnprintf(buf + len, sizeof(buf) - len, fmt, ap);
 | 
	
		
			
				|  |  |    va_end(ap);
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    lua_pushstring(L, buf);
 | 
	
		
			
				|  |  |    lua_error(L);
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -4221,7 +4221,7 @@ static int handle_lsp_request(struct mg_connection *conn, const char *path,
 | 
	
		
			
				|  |  |          conn->ctx->callbacks.init_lua(conn, L);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    error = lsp(conn, path, filep->membuf == NULL ? p : filep->membuf, 
 | 
	
		
			
				|  |  | +    error = lsp(conn, path, filep->membuf == NULL ? p : filep->membuf,
 | 
	
		
			
				|  |  |                  filep->size, L);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 |