find: fix -name matching for dotfiles. -1 byte
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 26 Apr 2010 07:54:04 +0000 (09:54 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 26 Apr 2010 07:54:04 +0000 (09:54 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
findutils/find.c

index 0b06938..30fb03d 100644 (file)
@@ -198,14 +198,19 @@ static int exec_actions(action ***appp, const char *fileName, const struct stat
 ACTF(name)
 {
        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--;
                while (tmp != fileName && *--tmp != '/')
                        continue;
                if (*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