From 6be3a5242ce4855734a4cdd5770b6ea7adaf2b3d Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 19 Jun 2014 11:32:11 +0200 Subject: find: exit code fixes for find -exec function old new delta func_exec 127 100 -27 Signed-off-by: Denys Vlasenko --- findutils/find.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'findutils/find.c') diff --git a/findutils/find.c b/findutils/find.c index 8ac3da7a0..493f72e61 100644 --- a/findutils/find.c +++ b/findutils/find.c @@ -634,6 +634,7 @@ static int do_exec(action_exec *ap, const char *fileName) } else { int j = 0; while (ap->filelist[j]) { + /* 2nd arg here should be ap->subst_count[i], but it is always 1: */ *pp++ = xmalloc_substitute_string(arg, 1, "{}", ap->filelist[j]); free(ap->filelist[j]); j++; @@ -669,16 +670,16 @@ ACTF(exec) { # if ENABLE_FEATURE_FIND_EXEC_PLUS if (ap->filelist) { - int rc = 0; + int rc; + ap->filelist = xrealloc_vector(ap->filelist, 8, ap->filelist_idx); + ap->filelist[ap->filelist_idx++] = xstrdup(fileName); + ap->file_len += strlen(fileName) + sizeof(char*) + 1; /* If we have lots of files already, exec the command */ + rc = 1; if (ap->file_len >= 32*1024) rc = do_exec(ap, NULL); - - ap->file_len += strlen(fileName) + sizeof(char*) + 1; - ap->filelist = xrealloc_vector(ap->filelist, 8, ap->filelist_idx); - ap->filelist[ap->filelist_idx++] = xstrdup(fileName); - return rc == 0; /* return 1 if exitcode 0 */ + return rc; } # endif return do_exec(ap, fileName); @@ -698,8 +699,8 @@ static int flush_exec_plus(void) # if ENABLE_FEATURE_FIND_NOT if (ap->invert) rc = !rc; # endif - if (rc) - return rc; + if (rc == 0) + return 1; } } } -- cgit v1.2.3