implement -print0 for find
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -11,6 +11,16 @@ config CONFIG_FIND | |
| help | |
| find is used to search your system to find specified files. | |
| + | config CONFIG_FEATURE_FIND_PRINT0 |
| + | bool "Enable -print0 option" |
| + | default y |
| + | depends on CONFIG_FIND |
| + | help |
| + | Causes output names to be separated by a null character |
| + | rather than a newline. This allows names that contain |
| + | newlines and other whitespace to be more easily |
| + | interpreted by other programs. |
| + | |
| config CONFIG_FEATURE_FIND_MTIME | |
| bool "Enable modified time matching (-mtime) option" | |
| default y | |
| @@ -38,6 +38,9 @@ static const char msg_req_arg[] = "option `%s' requires an argument"; | |
| static const char msg_invalid_arg[] = "invalid argument `%s' to `%s'"; | |
| static char *pattern; | |
| + | #ifdef CONFIG_FEATURE_FIND_PRINT0 |
| + | static char printsep = '\n'; |
| + | #endif |
| #ifdef CONFIG_FEATURE_FIND_TYPE | |
| static int type_mask = 0; | |
| @@ -159,7 +162,11 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk) | |
| } | |
| #endif | |
| + | #ifdef CONFIG_FEATURE_FIND_PRINT0 |
| + | printf("%s%c", fileName, printsep); |
| + | #else |
| puts(fileName); | |
| + | #endif |
| no_match: | |
| return (TRUE); | |
| } | |
| @@ -217,6 +224,10 @@ int find_main(int argc, char **argv) | |
| else if (strcmp(argv[i], "-print") == 0) { | |
| ; | |
| } | |
| + | #ifdef CONFIG_FEATURE_FIND_PRINT0 |
| + | else if (strcmp(argv[i], "-print0") == 0) |
| + | printsep = '\0'; |
| + | #endif |
| else if (strcmp(argv[i], "-name") == 0) { | |
| if (++i == argc) | |
| bb_error_msg_and_die(msg_req_arg, "-name"); | |
| @@ -748,7 +748,9 @@ USE_FEATURE_DATE_ISOFMT( \ | |
| "\t-follow\t\tDereference symbolic links\n" \ | |
| "\t-name PATTERN\tFile name (leading directories removed) matches PATTERN\n" \ | |
| "\t-print\t\tPrint (default and assumed)\n" \ | |
| - | USE_FEATURE_FIND_TYPE( \ |
| + | USE_FEATURE_FIND_PRINT0( \ |
| + | "\t-print0\t\tDelimit output with null characters rather than\n\t\t\tnewlines" \ |
| + | ) USE_FEATURE_FIND_TYPE( \ |
| "\n\t-type X\t\tFiletype matches X (where X is one of: f,d,l,b,c,...)" \ | |
| ) USE_FEATURE_FIND_PERM( \ | |
| "\n\t-perm PERMS\tPermissions match any of (+NNN); all of (-NNN);\n\t\t\tor exactly (NNN)" \ | |