1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-05 16:55:50 +03:00

Added function to get all entries of a directory.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1476601 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Guenter Knauf
2013-04-27 15:26:08 +00:00
parent 8f776652e7
commit 8f652c1b74

View File

@@ -1192,6 +1192,46 @@ static int lua_ap_set_document_root(lua_State *L)
return 0;
}
/*
* lua_ap_getdir; r:get_direntries(directory) - Gets all entries of a
* directory and returns the directory info as a table
*/
static int lua_ap_getdir(lua_State *L)
{
request_rec *r;
apr_dir_t *thedir;
apr_finfo_t file_info;
apr_status_t status;
const char *directory;
luaL_checktype(L, 1, LUA_TUSERDATA);
luaL_checktype(L, 2, LUA_TSTRING);
r = ap_lua_check_request_rec(L, 1);
directory = lua_tostring(L, 2);
if (apr_dir_open(&thedir, directory, r->pool) == APR_SUCCESS) {
int i = 0;
lua_newtable(L);
do {
status = apr_dir_read(&file_info, APR_FINFO_NAME, thedir);
if (APR_STATUS_IS_INCOMPLETE(status)) {
continue; /* ignore un-stat()able files */
}
else if (status != APR_SUCCESS) {
break;
}
lua_pushinteger(L, ++i);
lua_pushstring(L, file_info.name);
lua_settable(L, -3);
} while (1);
apr_dir_close(thedir);
return 1;
}
else {
return 0;
}
}
/*
* lua_ap_stat; r:stat(filename) - Runs stat on a file and returns the file
* info as a table
@@ -1985,6 +2025,8 @@ AP_LUA_DECLARE(void) ap_lua_load_request_lmodule(lua_State *L, apr_pool_t *p)
makefun(&lua_db_acquire, APL_REQ_FUNTYPE_LUACFUN, p));
apr_hash_set(dispatch, "stat", APR_HASH_KEY_STRING,
makefun(&lua_ap_stat, APL_REQ_FUNTYPE_LUACFUN, p));
apr_hash_set(dispatch, "get_direntries", APR_HASH_KEY_STRING,
makefun(&lua_ap_getdir, APL_REQ_FUNTYPE_LUACFUN, p));
apr_hash_set(dispatch, "regex", APR_HASH_KEY_STRING,
makefun(&lua_ap_regex, APL_REQ_FUNTYPE_LUACFUN, p));
apr_hash_set(dispatch, "sleep", APR_HASH_KEY_STRING,