From d7384296f621e39e2fd86e6e3aae7e743b0aee65 Mon Sep 17 00:00:00 2001 From: Paul Fox Date: Fri, 12 May 2006 14:47:20 +0000 Subject: [PATCH] implement -print0 for find --- findutils/Config.in | 10 ++++++++++ findutils/find.c | 11 +++++++++++ include/usage.h | 4 +++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/findutils/Config.in b/findutils/Config.in index 3a9a506d7..8329a6c1f 100644 --- a/findutils/Config.in +++ b/findutils/Config.in @@ -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 diff --git a/findutils/find.c b/findutils/find.c index 7a71af9eb..17a1a5656 100644 --- a/findutils/find.c +++ b/findutils/find.c @@ -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"); diff --git a/include/usage.h b/include/usage.h index d09c1108e..0e3ecae05 100644 --- a/include/usage.h +++ b/include/usage.h @@ -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)" \