[git commit] find: fix a bug in !ENABLE_FEATURE_FIND_XDEV config

Denys Vlasenko vda.linux at googlemail.com
Thu Aug 11 00:27:13 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=87249fbf5090f5118b8d651c2615f02dcec2ff6b
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

A subtle one: wrong pairing of "else"!

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 findutils/find.c |   37 ++++++++++++++++++++++++++++++++++++-
 1 files changed, 36 insertions(+), 1 deletions(-)

diff --git a/findutils/find.c b/findutils/find.c
index babcda0..05f88d2 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -336,6 +336,9 @@
 # define FNM_CASEFOLD 0
 #endif
 
+#define dbg(...) ((void)0)
+/* #define dbg(...) bb_error_msg(__VA_ARGS__) */
+
 /* This is a NOEXEC applet. Be very careful! */
 
 
@@ -469,10 +472,12 @@ static int exec_actions(action ***appp, const char *fileName, const struct stat
 #if ENABLE_FEATURE_FIND_NOT
 			if (ap->invert) rc ^= TRUE;
 #endif
+			dbg("grp %d action %d rc:0x%x", cur_group, cur_action, rc);
 			if (rc & TRUE) /* current group failed, try next */
 				break;
 		}
 	}
+	dbg("returning:0x%x", rc ^ TRUE);
 	return rc ^ TRUE; /* restore TRUE bit */
 }
 
@@ -910,6 +915,8 @@ static action*** parse_params(char **argv)
 		int parm = index_in_strings(params, arg);
 		const char *arg1 = argv[1];
 
+		dbg("arg:'%s' arg1:'%s' parm:%d PARM_type:%d", arg, arg1, parm, PARM_type);
+
 		if (parm >= PARM_name) {
 			/* All options/actions starting from -name require argument */
 			if (!arg1)
@@ -925,18 +932,22 @@ static action*** parse_params(char **argv)
  * expression is reached.
  */
 		/* Options */
+		if (0) { }
 #if ENABLE_FEATURE_FIND_XDEV
-		if (parm == OPT_XDEV) {
+		else if (parm == OPT_XDEV) {
+			dbg("%d", __LINE__);
 			G.xdev_on = 1;
 		}
 #endif
 #if ENABLE_FEATURE_FIND_MAXDEPTH
 		else if (parm == OPT_MINDEPTH || parm == OPT_MINDEPTH + 1) {
+			dbg("%d", __LINE__);
 			G.minmaxdepth[parm - OPT_MINDEPTH] = xatoi_positive(arg1);
 		}
 #endif
 #if ENABLE_FEATURE_FIND_DEPTH
 		else if (parm == OPT_DEPTH) {
+			dbg("%d", __LINE__);
 			G.recurse_flags |= ACTION_DEPTHFIRST;
 		}
 #endif
@@ -951,9 +962,11 @@ static action*** parse_params(char **argv)
  */
 		/* Operators */
 		else if (parm == PARM_a IF_DESKTOP(|| parm == PARM_and)) {
+			dbg("%d", __LINE__);
 			/* no further special handling required */
 		}
 		else if (parm == PARM_o IF_DESKTOP(|| parm == PARM_or)) {
+			dbg("%d", __LINE__);
 			/* start new OR group */
 			cur_group++;
 			appp = xrealloc(appp, (cur_group+2) * sizeof(*appp));
@@ -965,26 +978,31 @@ static action*** parse_params(char **argv)
 		else if (parm == PARM_char_not IF_DESKTOP(|| parm == PARM_not)) {
 			/* also handles "find ! ! -name 'foo*'" */
 			invert_flag ^= 1;
+			dbg("invert_flag:%d", invert_flag);
 		}
 #endif
 		/* Actions */
 		else if (parm == PARM_print) {
+			dbg("%d", __LINE__);
 			G.need_print = 0;
 			(void) ALLOC_ACTION(print);
 		}
 #if ENABLE_FEATURE_FIND_PRINT0
 		else if (parm == PARM_print0) {
+			dbg("%d", __LINE__);
 			G.need_print = 0;
 			(void) ALLOC_ACTION(print0);
 		}
 #endif
 #if ENABLE_FEATURE_FIND_PRUNE
 		else if (parm == PARM_prune) {
+			dbg("%d", __LINE__);
 			(void) ALLOC_ACTION(prune);
 		}
 #endif
 #if ENABLE_FEATURE_FIND_DELETE
 		else if (parm == PARM_delete) {
+			dbg("%d", __LINE__);
 			G.need_print = 0;
 			G.recurse_flags |= ACTION_DEPTHFIRST;
 			(void) ALLOC_ACTION(delete);
@@ -994,6 +1012,7 @@ static action*** parse_params(char **argv)
 		else if (parm == PARM_exec) {
 			int i;
 			action_exec *ap;
+			dbg("%d", __LINE__);
 			G.need_print = 0;
 			ap = ALLOC_ACTION(exec);
 			ap->exec_argv = ++argv; /* first arg after -exec */
@@ -1028,6 +1047,7 @@ static action*** parse_params(char **argv)
 			char **endarg;
 			unsigned nested = 1;
 
+			dbg("%d", __LINE__);
 			endarg = argv;
 			while (1) {
 				if (!*++endarg)
@@ -1047,6 +1067,7 @@ static action*** parse_params(char **argv)
 #endif
 		else if (parm == PARM_name || parm == PARM_iname) {
 			action_name *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(name);
 			ap->pattern = arg1;
 			ap->iname = (parm == PARM_iname);
@@ -1054,6 +1075,7 @@ static action*** parse_params(char **argv)
 #if ENABLE_FEATURE_FIND_PATH
 		else if (parm == PARM_path || parm == PARM_ipath) {
 			action_path *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(path);
 			ap->pattern = arg1;
 			ap->ipath = (parm == PARM_ipath);
@@ -1062,6 +1084,7 @@ static action*** parse_params(char **argv)
 #if ENABLE_FEATURE_FIND_REGEX
 		else if (parm == PARM_regex) {
 			action_regex *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(regex);
 			xregcomp(&ap->compiled_pattern, arg1, 0 /*cflags*/);
 		}
@@ -1071,6 +1094,7 @@ static action*** parse_params(char **argv)
 			action_type *ap;
 			ap = ALLOC_ACTION(type);
 			ap->type_mask = find_type(arg1);
+			dbg("created:type mask:%x", ap->type_mask);
 		}
 #endif
 #if ENABLE_FEATURE_FIND_PERM
@@ -1081,6 +1105,7 @@ static action*** parse_params(char **argv)
  */
 		else if (parm == PARM_perm) {
 			action_perm *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(perm);
 			ap->perm_char = arg1[0];
 			arg1 = plus_minus_num(arg1);
@@ -1092,6 +1117,7 @@ static action*** parse_params(char **argv)
 #if ENABLE_FEATURE_FIND_MTIME
 		else if (parm == PARM_mtime) {
 			action_mtime *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(mtime);
 			ap->mtime_char = arg1[0];
 			ap->mtime_days = xatoul(plus_minus_num(arg1));
@@ -1100,6 +1126,7 @@ static action*** parse_params(char **argv)
 #if ENABLE_FEATURE_FIND_MMIN
 		else if (parm == PARM_mmin) {
 			action_mmin *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(mmin);
 			ap->mmin_char = arg1[0];
 			ap->mmin_mins = xatoul(plus_minus_num(arg1));
@@ -1109,6 +1136,7 @@ static action*** parse_params(char **argv)
 		else if (parm == PARM_newer) {
 			struct stat stat_newer;
 			action_newer *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(newer);
 			xstat(arg1, &stat_newer);
 			ap->newer_mtime = stat_newer.st_mtime;
@@ -1117,6 +1145,7 @@ static action*** parse_params(char **argv)
 #if ENABLE_FEATURE_FIND_INUM
 		else if (parm == PARM_inum) {
 			action_inum *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(inum);
 			ap->inode_num = xatoul(arg1);
 		}
@@ -1124,6 +1153,7 @@ static action*** parse_params(char **argv)
 #if ENABLE_FEATURE_FIND_USER
 		else if (parm == PARM_user) {
 			action_user *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(user);
 			ap->uid = bb_strtou(arg1, NULL, 10);
 			if (errno)
@@ -1133,6 +1163,7 @@ static action*** parse_params(char **argv)
 #if ENABLE_FEATURE_FIND_GROUP
 		else if (parm == PARM_group) {
 			action_group *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(group);
 			ap->gid = bb_strtou(arg1, NULL, 10);
 			if (errno)
@@ -1161,6 +1192,7 @@ static action*** parse_params(char **argv)
 				{ "", 0 }
 			};
 			action_size *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(size);
 			ap->size_char = arg1[0];
 			ap->size = XATOU_SFX(plus_minus_num(arg1), find_suffixes);
@@ -1169,6 +1201,7 @@ static action*** parse_params(char **argv)
 #if ENABLE_FEATURE_FIND_CONTEXT
 		else if (parm == PARM_context) {
 			action_context *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(context);
 			/*ap->context = NULL; - ALLOC_ACTION did it */
 			/* SELinux headers erroneously declare non-const parameter */
@@ -1179,6 +1212,7 @@ static action*** parse_params(char **argv)
 #if ENABLE_FEATURE_FIND_LINKS
 		else if (parm == PARM_links) {
 			action_links *ap;
+			dbg("%d", __LINE__);
 			ap = ALLOC_ACTION(links);
 			ap->links_char = arg1[0];
 			ap->links_count = xatoul(plus_minus_num(arg1));
@@ -1190,6 +1224,7 @@ static action*** parse_params(char **argv)
 		}
 		argv++;
 	}
+	dbg("exiting %s", __func__);
 	return appp;
 #undef ALLOC_ACTION
 }
-- 
1.7.3.4



More information about the busybox-cvs mailing list