find: small improvement
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 29 Oct 2006 19:03:56 +0000 (19:03 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 29 Oct 2006 19:03:56 +0000 (19:03 -0000)
findutils/find.c

index 7869840e2d602d2904d2fa9df72b7400d5c936e0..a3cbe668daadd29a37663851fb238201f9af81cd 100644 (file)
@@ -30,6 +30,8 @@
  * file.txt  file.txt
  * file.txt
  * /tmp
+ * # find -name '*.c' -o -name '*.h'
+ * [shows files, *.c and *.h intermixed]
  */
 
 #include "busybox.h"
@@ -93,7 +95,6 @@ static char* subst(const char *src, int count, const char* filename)
 {
        char *buf, *dst, *end;
        int flen = strlen(filename);
-//puts(src);
        /* we replace each '{}' with filename: growth by strlen-2 */
        buf = dst = xmalloc(strlen(src) + count*(flen-2) + 1);
        while ((end = strstr(src, "{}"))) {
@@ -104,7 +105,6 @@ static char* subst(const char *src, int count, const char* filename)
                dst += flen;
        }
        strcpy(dst, src);
-//puts(buf);
        return buf;
 }
 
@@ -363,16 +363,20 @@ int find_main(int argc, char **argv)
        }
 
        if (firstopt == 1) {
-               if (!recursive_action(".", TRUE, dereference, FALSE, fileAction,
-                                       fileAction, NULL, 0))
+               static const char *const dot[] = { ".", NULL };
+               firstopt++;
+               argv = (char**)dot - 1;
+       }
+       for (i = 1; i < firstopt; i++) {
+               if (!recursive_action(argv[i],
+                               TRUE,           // recurse
+                               dereference,    // follow links
+                               FALSE,          // depth first
+                               fileAction,     // file action
+                               fileAction,     // dir action
+                               NULL,           // user data
+                               0))             // depth
                        status = EXIT_FAILURE;
-       } else {
-               for (i = 1; i < firstopt; i++) {
-                       if (!recursive_action(argv[i], TRUE, dereference, FALSE,
-                                       fileAction, fileAction, NULL, 0))
-                               status = EXIT_FAILURE;
-               }
        }
-
        return status;
 }