aboutsummaryrefslogtreecommitdiff
path: root/findutils/find.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2014-06-19 11:32:11 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2014-06-19 11:32:11 +0200
commit6be3a5242ce4855734a4cdd5770b6ea7adaf2b3d (patch)
treee4903316cbaaaeb7cb0a4396daacb3ec1ff8e467 /findutils/find.c
parent14158b4127dba30466c50147b868a6a89702960b (diff)
downloadbusybox-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/find.c')
-rw-r--r--findutils/find.c17
1 files changed, 9 insertions, 8 deletions
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;
}
}
}