diff options
author | Elliott Hughes <enh@google.com> | 2019-02-13 09:02:24 -0800 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2019-02-13 13:50:40 -0600 |
commit | fbedc9dd74aeb0331202f9e503316960e32fa879 (patch) | |
tree | 4fdecbdbdc597ddb8278eec5cccf172133188790 | |
parent | 318e7009e92ede1dfcc49ff1249396fd43757619 (diff) | |
download | toybox-fbedc9dd74aeb0331202f9e503316960e32fa879.tar.gz |
find: fix -path/-ipath and add -wholename/-iwholename synonyms.
Plus new tests.
-rwxr-xr-x | tests/find.test | 9 | ||||
-rw-r--r-- | toys/posix/find.c | 7 |
2 files changed, 13 insertions, 3 deletions
diff --git a/tests/find.test b/tests/find.test index 25c24400..7f2e6921 100755 --- a/tests/find.test +++ b/tests/find.test @@ -94,4 +94,13 @@ testing "-iname (no arguments)" \ testing "" "find dir \( -iname file -o -iname missing \) -exec echo {} \;" \ "dir/file\n" "" "" +testing "-path glob" \ + "find dir -path 'dir*e'" "dir/file\n" "" "" +testing "-wholename glob" \ + "find dir -wholename 'dir*e'" "dir/file\n" "" "" +testing "-ipath glob" \ + "find dir -ipath 'dIr*E'" "dir/file\n" "" "" +testing "-iwholename glob" \ + "find dir -iwholename 'dIr*E'" "dir/file\n" "" "" + rm -rf dir diff --git a/toys/posix/find.c b/toys/posix/find.c index e6facb30..bae96db5 100644 --- a/toys/posix/find.c +++ b/toys/posix/find.c @@ -328,13 +328,14 @@ static int do_find(struct dirtree *new) // Remaining filters take an argument } else { if (!strcmp(s, "name") || !strcmp(s, "iname") + || !strcmp(s, "wholename") || !strcmp(s, "iwholename") || !strcmp(s, "path") || !strcmp(s, "ipath")) { - int i = (*s == 'i'); + int i = (*s == 'i'), is_path = (s[i] != 'n'); char *arg = ss[1], *path = 0, *name = new ? new->name : arg; // Handle path expansion and case flattening - if (new && s[i] == 'p') name = path = dirtree_path(new, 0); + if (new && is_path) name = path = dirtree_path(new, 0); if (i) { if ((check || !new) && name) name = strlower(name); if (!new) dlist_add(&TT.argdata, name); @@ -342,7 +343,7 @@ static int do_find(struct dirtree *new) } if (check) { - test = !fnmatch(arg, name, FNM_PATHNAME*(s[i] == 'p')); + test = !fnmatch(arg, name, FNM_PATHNAME*(!is_path)); if (i) free(name); } free(path); |