find: fix -name matching for dotfiles. -1 byte

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2010-04-26 09:54:04 +02:00
parent 05273daf6f
commit 9138817a27

View File

@ -198,14 +198,19 @@ static int exec_actions(action ***appp, const char *fileName, const struct stat
ACTF(name) ACTF(name)
{ {
const char *tmp = bb_basename(fileName); const char *tmp = bb_basename(fileName);
if (tmp != fileName && !*tmp) { /* "foo/bar/". Oh no... go back to 'b' */ if (tmp != fileName && *tmp == '\0') {
/* "foo/bar/". Oh no... go back to 'b' */
tmp--; tmp--;
while (tmp != fileName && *--tmp != '/') while (tmp != fileName && *--tmp != '/')
continue; continue;
if (*tmp == '/') if (*tmp == '/')
tmp++; tmp++;
} }
return fnmatch(ap->pattern, tmp, FNM_PERIOD | (ap->iname ? FNM_CASEFOLD : 0)) == 0; /* Was using FNM_PERIOD flag too,
* but somewhere between 4.1.20 and 4.4.0 GNU find stopped using it.
* find -name '*foo' should match .foo too:
*/
return fnmatch(ap->pattern, tmp, (ap->iname ? FNM_CASEFOLD : 0)) == 0;
} }
#if ENABLE_FEATURE_FIND_PATH #if ENABLE_FEATURE_FIND_PATH