diff options
author | Denys Vlasenko | 2014-06-19 11:32:11 +0200 |
---|---|---|
committer | Denys Vlasenko | 2014-06-19 11:32:11 +0200 |
commit | 6be3a5242ce4855734a4cdd5770b6ea7adaf2b3d (patch) | |
tree | e4903316cbaaaeb7cb0a4396daacb3ec1ff8e467 /findutils | |
parent | 14158b4127dba30466c50147b868a6a89702960b (diff) | |
download | busybox-6be3a5242ce4855734a4cdd5770b6ea7adaf2b3d.zip busybox-6be3a5242ce4855734a4cdd5770b6ea7adaf2b3d.tar.gz |
find: exit code fixes for find -exec
function old new delta
func_exec 127 100 -27
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'findutils')
-rw-r--r-- | findutils/find.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/findutils/find.c b/findutils/find.c index 8ac3da7..493f72e 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; } } } |