made note of my recent changes
[oweals/busybox.git] / find.c
diff --git a/find.c b/find.c
index c154cf4e784a6923552838e9ba12a313bf94efb1..40a508f051d6b1892985fff5d92a43dc871eebba 100644 (file)
--- a/find.c
+++ b/find.c
@@ -32,9 +32,18 @@ static char* pattern=NULL;
 static char* directory=".";
 static int dereferenceFlag=FALSE;
 
-static const char find_usage[] = "find [path...] [expression]\n"
-"default path is the current directory; default expression is -print\n"
-"expression may consist of:\n";
+static const char find_usage[] = "find [PATH...] [EXPRESSION]\n\n"
+"Search for files in a directory hierarchy.  The default PATH is\n"
+"the current directory; default EXPRESSION is '-print'\n\n"
+"\nEXPRESSION may consist of:\n"
+"\t-follow\n\t\tDereference symbolic links.\n"
+"\t-name PATTERN\n\t\tFile name (with leading directories removed) matches PATTERN.\n"
+"\t-print\n\t\tprint the full file name followed by a newline to stdout.\n\n"
+#if defined BB_REGEXP
+"This version of find matches full regular expresions.\n";
+#else
+"This version of find matches strings (not regular expresions).\n";
+#endif
 
 
 
@@ -42,30 +51,14 @@ static int fileAction(const char *fileName, struct stat* statbuf)
 {
     if (pattern==NULL)
        fprintf(stdout, "%s\n", fileName);
-    else if (find_match(fileName, pattern, TRUE) == TRUE)
-       fprintf(stdout, "%s\n", fileName);
-    return( TRUE);
-}
-
-static int dirAction(const char *fileName, struct stat* statbuf)
-{
-    DIR *dir;
-    struct dirent *entry;
-    
-    if (pattern==NULL)
-       fprintf(stdout, "%s\n", fileName);
-    else if (find_match(fileName, pattern, TRUE) == TRUE)
-       fprintf(stdout, "%s\n", fileName);
-
-    dir = opendir( fileName);
-    if (!dir) {
-       perror("Can't open directory");
-       exit(FALSE);
-    }
-    while ((entry = readdir(dir)) != NULL) {
-       char dirName[NAME_MAX];
-       sprintf(dirName, "%s/%s", fileName, entry->d_name);
-       recursiveAction( dirName, TRUE, dereferenceFlag, FALSE, fileAction, dirAction);
+    else {
+       char* tmp = strrchr( fileName, '/');
+       if (tmp == NULL)
+           tmp = (char*)fileName;
+       else
+           tmp++;
+       if (check_wildcard_match(tmp, pattern) == TRUE)
+           fprintf(stdout, "%s\n", fileName);
     }
     return( TRUE);
 }