summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorruki <[email protected]>2018-05-02 23:25:59 +0800
committerruki <[email protected]>2018-05-02 14:35:58 +0800
commit4bda9b04b16460c93f6342a17c93cf07f191b7cc (patch)
treeb2aafa6646ec79db030fe71f056cc64c8d326e0c /core/src
parentcb8d8dcf2b7a698e7a6c31f1e58722b505132f32 (diff)
improve os.match
Diffstat (limited to 'core/src')
-rw-r--r--core/src/tbox/src/tbox/platform/directory.h4
-rw-r--r--core/src/tbox/src/tbox/platform/posix/directory.c10
-rw-r--r--core/src/tbox/src/tbox/platform/windows/directory.c10
-rw-r--r--core/src/xmake/os/find.c6
4 files changed, 15 insertions, 15 deletions
diff --git a/core/src/tbox/src/tbox/platform/directory.h b/core/src/tbox/src/tbox/platform/directory.h
index 9b6cb0771..d5e3b49b9 100644
--- a/core/src/tbox/src/tbox/platform/directory.h
+++ b/core/src/tbox/src/tbox/platform/directory.h
@@ -109,13 +109,13 @@ tb_size_t tb_directory_temporary(tb_char_t* path, tb_size_t maxn);
/*! the directory walk
*
* @param path the directory path
- * @param recursion is recursion?
+ * @param recursion the recursion level, 0, 1, 2 or -1 (infinite)
* @param prefix is prefix recursion? directory is the first item
* @param func the callback func
* @param data the callback data
*
*/
-tb_void_t tb_directory_walk(tb_char_t const* path, tb_bool_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv);
+tb_void_t tb_directory_walk(tb_char_t const* path, tb_long_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv);
/*! copy directory
*
diff --git a/core/src/tbox/src/tbox/platform/posix/directory.c b/core/src/tbox/src/tbox/platform/posix/directory.c
index fc75b3cf3..fddbc428d 100644
--- a/core/src/tbox/src/tbox/platform/posix/directory.c
+++ b/core/src/tbox/src/tbox/platform/posix/directory.c
@@ -96,7 +96,7 @@ static tb_bool_t tb_directory_walk_copy(tb_char_t const* path, tb_file_info_t co
// continue
return tb_true;
}
-static tb_bool_t tb_directory_walk_impl(tb_char_t const* path, tb_bool_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv)
+static tb_bool_t tb_directory_walk_impl(tb_char_t const* path, tb_long_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv)
{
// check
tb_assert_and_check_return_val(path && func, tb_false);
@@ -136,7 +136,7 @@ static tb_bool_t tb_directory_walk_impl(tb_char_t const* path, tb_bool_t recursi
tb_check_break(ok);
// walk to the next directory
- if (info.type == TB_FILE_TYPE_DIRECTORY && recursion) ok = tb_directory_walk_impl(temp, recursion, prefix, func, priv);
+ if (info.type == TB_FILE_TYPE_DIRECTORY && recursion) ok = tb_directory_walk_impl(temp, recursion > 0? recursion - 1 : recursion, prefix, func, priv);
tb_check_break(ok);
// do callback
@@ -203,7 +203,7 @@ tb_bool_t tb_directory_remove(tb_char_t const* path)
tb_assert_and_check_return_val(path, tb_false);
// walk remove
- tb_directory_walk_impl(path, tb_true, tb_false, tb_directory_walk_remove, tb_null);
+ tb_directory_walk_impl(path, -1, tb_false, tb_directory_walk_remove, tb_null);
// remove it
return !remove(path)? tb_true : tb_false;
@@ -253,7 +253,7 @@ tb_size_t tb_directory_temporary(tb_char_t* path, tb_size_t maxn)
return tb_strlcpy(path, "/tmp", maxn);
}
#endif
-tb_void_t tb_directory_walk(tb_char_t const* path, tb_bool_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv)
+tb_void_t tb_directory_walk(tb_char_t const* path, tb_long_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv)
{
// check
tb_assert_and_check_return(path && func);
@@ -290,7 +290,7 @@ tb_bool_t tb_directory_copy(tb_char_t const* path, tb_char_t const* dest)
tuple[0].cstr = dest;
tuple[1].ul = tb_strlen(path);
tuple[2].b = tb_true;
- tb_directory_walk_impl(path, tb_true, tb_true, tb_directory_walk_copy, tuple);
+ tb_directory_walk_impl(path, -1, tb_true, tb_directory_walk_copy, tuple);
// ok?
tb_bool_t ok = tuple[2].b;
diff --git a/core/src/tbox/src/tbox/platform/windows/directory.c b/core/src/tbox/src/tbox/platform/windows/directory.c
index 7a67f3b88..3c7e96a0f 100644
--- a/core/src/tbox/src/tbox/platform/windows/directory.c
+++ b/core/src/tbox/src/tbox/platform/windows/directory.c
@@ -98,7 +98,7 @@ static tb_bool_t tb_directory_walk_copy(tb_char_t const* path, tb_file_info_t co
// continue
return tb_true;
}
-static tb_bool_t tb_directory_walk_impl(tb_wchar_t const* path, tb_bool_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv)
+static tb_bool_t tb_directory_walk_impl(tb_wchar_t const* path, tb_long_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv)
{
// check
tb_assert_and_check_return_val(path && func, tb_false);
@@ -141,7 +141,7 @@ static tb_bool_t tb_directory_walk_impl(tb_wchar_t const* path, tb_bool_t recurs
tb_check_break(ok);
// walk to the next directory
- if (info.type == TB_FILE_TYPE_DIRECTORY && recursion) ok = tb_directory_walk_impl(temp_w, recursion, prefix, func, priv);
+ if (info.type == TB_FILE_TYPE_DIRECTORY && recursion) ok = tb_directory_walk_impl(temp_w, recursion > 0? recursion - 1 : recursion, prefix, func, priv);
tb_check_break(ok);
// do callback
@@ -212,7 +212,7 @@ tb_bool_t tb_directory_remove(tb_char_t const* path)
if (!tb_path_absolute_w(path, full, TB_PATH_MAXN)) return tb_false;
// walk remove
- tb_directory_walk_impl(full, tb_true, tb_false, tb_directory_walk_remove, tb_null);
+ tb_directory_walk_impl(full, -1, tb_false, tb_directory_walk_remove, tb_null);
// remove it
return RemoveDirectoryW(full)? tb_true : tb_false;
@@ -289,7 +289,7 @@ tb_size_t tb_directory_temporary(tb_char_t* path, tb_size_t maxn)
// ok?
return size != -1? size : 0;
}
-tb_void_t tb_directory_walk(tb_char_t const* path, tb_bool_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv)
+tb_void_t tb_directory_walk(tb_char_t const* path, tb_long_t recursion, tb_bool_t prefix, tb_directory_walk_func_t func, tb_cpointer_t priv)
{
// check
tb_assert_and_check_return(path && func);
@@ -327,7 +327,7 @@ tb_bool_t tb_directory_copy(tb_char_t const* path, tb_char_t const* dest)
tuple[0].cstr = dest;
tuple[1].ul = tb_strlen(path);
tuple[2].b = tb_true;
- tb_directory_walk(path, tb_true, tb_true, tb_directory_walk_copy, tuple);
+ tb_directory_walk(path, -1, tb_true, tb_directory_walk_copy, tuple);
// ok?
tb_bool_t ok = tuple[2].b;
diff --git a/core/src/xmake/os/find.c b/core/src/xmake/os/find.c
index 79f281f2b..194494f0b 100644
--- a/core/src/xmake/os/find.c
+++ b/core/src/xmake/os/find.c
@@ -180,8 +180,8 @@ tb_int_t xm_os_find(lua_State* lua)
tb_char_t const* pattern = luaL_checkstring(lua, 2);
tb_check_return_val(pattern, 0);
- // is recurse?
- tb_bool_t recurse = lua_toboolean(lua, 3);
+ // the recursion level
+ tb_long_t recursion = lua_tointeger(lua, 3);
// the match mode
tb_long_t mode = lua_tointeger(lua, 4);
@@ -198,7 +198,7 @@ tb_int_t xm_os_find(lua_State* lua)
tuple[1].cstr = pattern;
tuple[2].l = mode;
tuple[3].ul = 0;
- tb_directory_walk(rootdir, recurse, tb_true, xm_os_find_walk, tuple);
+ tb_directory_walk(rootdir, recursion, tb_true, xm_os_find_walk, tuple);
// pop string package
lua_pop(lua, 1);