aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2019-08-29 13:44:59 -0700
committerRob Landley <rob@landley.net>2019-08-30 13:07:57 -0500
commit3437f30ae9a24740bf3e9dd2b5db7482a5c1dfb8 (patch)
treeb6db868ba899d338bc34e11ef7fc8469821aba0b
parent0222d5957329eb575ef20ae7a00170bcab70b662 (diff)
downloadtoybox-3437f30ae9a24740bf3e9dd2b5db7482a5c1dfb8.tar.gz
find: fix -name corner case.
This fixes the case where someone's done something (weird) like: find src/*.c -name foo.c Previously the match would fail because one side of the comparison was already a path.
-rwxr-xr-xtests/find.test3
-rw-r--r--toys/posix/find.c3
2 files changed, 5 insertions, 1 deletions
diff --git a/tests/find.test b/tests/find.test
index b3e2c4fa..1f59149b 100755
--- a/tests/find.test
+++ b/tests/find.test
@@ -122,4 +122,7 @@ testing "missing root error" \
"LANG=C find -L dir/missing-root 2>err ; grep -q dir/missing-root err || echo missing error" \
"" "" ""
+testing "-path match root" "find dir/f* -path dir/file" "dir/file\n" "" ""
+testing "-name match root" "find dir/f* -name file" "dir/file\n" "" ""
+
rm -rf dir
diff --git a/toys/posix/find.c b/toys/posix/find.c
index 58a6f88d..02fdf3c4 100644
--- a/toys/posix/find.c
+++ b/toys/posix/find.c
@@ -368,7 +368,8 @@ static int do_find(struct dirtree *new)
}
if (check) {
- test = !fnmatch(arg, name, FNM_PATHNAME*(!is_path));
+ test = !fnmatch(arg, is_path ? name : basename(name),
+ FNM_PATHNAME*(!is_path));
if (i) free(name);
}
free(path);