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 | |
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>
-rw-r--r-- | findutils/find.c | 17 | ||||
-rwxr-xr-x | testsuite/find.tests | 26 |
2 files changed, 35 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; } } } diff --git a/testsuite/find.tests b/testsuite/find.tests index 345d1e8..f041106 100755 --- a/testsuite/find.tests +++ b/testsuite/find.tests @@ -15,6 +15,32 @@ testing "find -type f" \ "./testfile\n" \ "" "" +optional FEATURE_FIND_EXEC +testing "find -exec exitcode 1" \ + "cd find.tempdir && find testfile -exec true {} \; 2>&1; echo \$?" \ + "0\n" \ + "" "" +SKIP= +optional FEATURE_FIND_EXEC_PLUS +testing "find -exec exitcode 2" \ + "cd find.tempdir && find testfile -exec true {} + 2>&1; echo \$?" \ + "0\n" \ + "" "" +SKIP= +# Surprisingly, "-exec false ;" results in exitcode 0! "-exec false +" is different!!! +optional FEATURE_FIND_EXEC +testing "find -exec exitcode 3" \ + "cd find.tempdir && find testfile -exec false {} \; 2>&1; echo \$?" \ + "0\n" \ + "" "" +SKIP= +optional FEATURE_FIND_EXEC_PLUS +testing "find -exec exitcode 4" \ + "cd find.tempdir && find testfile -exec false {} + 2>&1; echo \$?" \ + "1\n" \ + "" "" +SKIP= + # testing "description" "command" "result" "infile" "stdin" rm -rf find.tempdir |