find: fix -path/-ipath and add -wholename/-iwholename synonyms.
Plus new tests.
This commit is contained in:
parent
318e7009e9
commit
fbedc9dd74
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user