diff options
-rw-r--r-- | bfs.h | 3 | ||||
-rw-r--r-- | eval.c | 24 | ||||
-rw-r--r-- | parse.c | 4 | ||||
-rwxr-xr-x | tests.sh | 16 |
4 files changed, 46 insertions, 1 deletions
@@ -125,6 +125,9 @@ bool eval_ctime(const expression *expr, eval_state *state); bool eval_mmin(const expression *expr, eval_state *state); bool eval_mtime(const expression *expr, eval_state *state); +bool eval_gid(const expression *expr, eval_state *state); +bool eval_uid(const expression *expr, eval_state *state); + bool eval_empty(const expression *expr, eval_state *state); bool eval_hidden(const expression *expr, eval_state *state); bool eval_type(const expression *expr, eval_state *state); @@ -179,6 +179,30 @@ bool eval_mtime(const expression *expr, eval_state *state) { } /** + * -gid test. + */ +bool eval_gid(const expression *expr, eval_state *state) { + const struct stat *statbuf = fill_statbuf(state); + if (!statbuf) { + return false; + } + + return do_cmp(expr, statbuf->st_gid); +} + +/** + * -uid test. + */ +bool eval_uid(const expression *expr, eval_state *state) { + const struct stat *statbuf = fill_statbuf(state); + if (!statbuf) { + return false; + } + + return do_cmp(expr, statbuf->st_uid); +} + +/** * -delete action. */ bool eval_delete(const expression *expr, eval_state *state) { @@ -409,6 +409,10 @@ static expression *parse_literal(parser_state *state) { return new_test_idata(state, eval_access, X_OK); } else if (strcmp(arg, "-false") == 0) { return &expr_false; + } else if (strcmp(arg, "-gid") == 0) { + return parse_test_icmp(state, arg, eval_gid); + } else if (strcmp(arg, "-uid") == 0) { + return parse_test_icmp(state, arg, eval_uid); } else if (strcmp(arg, "-hidden") == 0) { return new_test(state, eval_hidden); } else if (strcmp(arg, "-nohidden") == 0) { @@ -110,7 +110,21 @@ function test_0015() { find_diff "$1" -empty } -for i in {1..15}; do +function test_0016() { + basic_structure "$1" + find_diff "$1" -gid "$(id -g)" && \ + find_diff "$1" -gid +0 && \ + find_diff "$1" -gid -10000 +} + +function test_0017() { + basic_structure "$1" + find_diff "$1" -uid "$(id -u)" && \ + find_diff "$1" -uid +0 && \ + find_diff "$1" -uid -10000 +} + +for i in {1..17}; do dir="$(mktemp -d "${TMPDIR:-/tmp}"/bfs.XXXXXXXXXX)" test="test_$(printf '%04d' $i)" "$test" "$dir" |