diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2011-08-11 02:27:13 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2011-08-11 02:27:13 +0200 |
commit | 87249fbf5090f5118b8d651c2615f02dcec2ff6b (patch) | |
tree | 6fc23f1a01c3e1b0f51fc850b35c1c12c5ec358e | |
parent | 5845a06c9ed8c16200942d1fba581db90a451cc6 (diff) | |
download | busybox-w32-87249fbf5090f5118b8d651c2615f02dcec2ff6b.tar.gz busybox-w32-87249fbf5090f5118b8d651c2615f02dcec2ff6b.tar.bz2 busybox-w32-87249fbf5090f5118b8d651c2615f02dcec2ff6b.zip |
find: fix a bug in !ENABLE_FEATURE_FIND_XDEV config
A subtle one: wrong pairing of "else"!
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | findutils/find.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/findutils/find.c b/findutils/find.c index babcda0ed..05f88d2f0 100644 --- a/findutils/find.c +++ b/findutils/find.c | |||
@@ -336,6 +336,9 @@ | |||
336 | # define FNM_CASEFOLD 0 | 336 | # define FNM_CASEFOLD 0 |
337 | #endif | 337 | #endif |
338 | 338 | ||
339 | #define dbg(...) ((void)0) | ||
340 | /* #define dbg(...) bb_error_msg(__VA_ARGS__) */ | ||
341 | |||
339 | /* This is a NOEXEC applet. Be very careful! */ | 342 | /* This is a NOEXEC applet. Be very careful! */ |
340 | 343 | ||
341 | 344 | ||
@@ -469,10 +472,12 @@ static int exec_actions(action ***appp, const char *fileName, const struct stat | |||
469 | #if ENABLE_FEATURE_FIND_NOT | 472 | #if ENABLE_FEATURE_FIND_NOT |
470 | if (ap->invert) rc ^= TRUE; | 473 | if (ap->invert) rc ^= TRUE; |
471 | #endif | 474 | #endif |
475 | dbg("grp %d action %d rc:0x%x", cur_group, cur_action, rc); | ||
472 | if (rc & TRUE) /* current group failed, try next */ | 476 | if (rc & TRUE) /* current group failed, try next */ |
473 | break; | 477 | break; |
474 | } | 478 | } |
475 | } | 479 | } |
480 | dbg("returning:0x%x", rc ^ TRUE); | ||
476 | return rc ^ TRUE; /* restore TRUE bit */ | 481 | return rc ^ TRUE; /* restore TRUE bit */ |
477 | } | 482 | } |
478 | 483 | ||
@@ -910,6 +915,8 @@ static action*** parse_params(char **argv) | |||
910 | int parm = index_in_strings(params, arg); | 915 | int parm = index_in_strings(params, arg); |
911 | const char *arg1 = argv[1]; | 916 | const char *arg1 = argv[1]; |
912 | 917 | ||
918 | dbg("arg:'%s' arg1:'%s' parm:%d PARM_type:%d", arg, arg1, parm, PARM_type); | ||
919 | |||
913 | if (parm >= PARM_name) { | 920 | if (parm >= PARM_name) { |
914 | /* All options/actions starting from -name require argument */ | 921 | /* All options/actions starting from -name require argument */ |
915 | if (!arg1) | 922 | if (!arg1) |
@@ -925,18 +932,22 @@ static action*** parse_params(char **argv) | |||
925 | * expression is reached. | 932 | * expression is reached. |
926 | */ | 933 | */ |
927 | /* Options */ | 934 | /* Options */ |
935 | if (0) { } | ||
928 | #if ENABLE_FEATURE_FIND_XDEV | 936 | #if ENABLE_FEATURE_FIND_XDEV |
929 | if (parm == OPT_XDEV) { | 937 | else if (parm == OPT_XDEV) { |
938 | dbg("%d", __LINE__); | ||
930 | G.xdev_on = 1; | 939 | G.xdev_on = 1; |
931 | } | 940 | } |
932 | #endif | 941 | #endif |
933 | #if ENABLE_FEATURE_FIND_MAXDEPTH | 942 | #if ENABLE_FEATURE_FIND_MAXDEPTH |
934 | else if (parm == OPT_MINDEPTH || parm == OPT_MINDEPTH + 1) { | 943 | else if (parm == OPT_MINDEPTH || parm == OPT_MINDEPTH + 1) { |
944 | dbg("%d", __LINE__); | ||
935 | G.minmaxdepth[parm - OPT_MINDEPTH] = xatoi_positive(arg1); | 945 | G.minmaxdepth[parm - OPT_MINDEPTH] = xatoi_positive(arg1); |
936 | } | 946 | } |
937 | #endif | 947 | #endif |
938 | #if ENABLE_FEATURE_FIND_DEPTH | 948 | #if ENABLE_FEATURE_FIND_DEPTH |
939 | else if (parm == OPT_DEPTH) { | 949 | else if (parm == OPT_DEPTH) { |
950 | dbg("%d", __LINE__); | ||
940 | G.recurse_flags |= ACTION_DEPTHFIRST; | 951 | G.recurse_flags |= ACTION_DEPTHFIRST; |
941 | } | 952 | } |
942 | #endif | 953 | #endif |
@@ -951,9 +962,11 @@ static action*** parse_params(char **argv) | |||
951 | */ | 962 | */ |
952 | /* Operators */ | 963 | /* Operators */ |
953 | else if (parm == PARM_a IF_DESKTOP(|| parm == PARM_and)) { | 964 | else if (parm == PARM_a IF_DESKTOP(|| parm == PARM_and)) { |
965 | dbg("%d", __LINE__); | ||
954 | /* no further special handling required */ | 966 | /* no further special handling required */ |
955 | } | 967 | } |
956 | else if (parm == PARM_o IF_DESKTOP(|| parm == PARM_or)) { | 968 | else if (parm == PARM_o IF_DESKTOP(|| parm == PARM_or)) { |
969 | dbg("%d", __LINE__); | ||
957 | /* start new OR group */ | 970 | /* start new OR group */ |
958 | cur_group++; | 971 | cur_group++; |
959 | appp = xrealloc(appp, (cur_group+2) * sizeof(*appp)); | 972 | appp = xrealloc(appp, (cur_group+2) * sizeof(*appp)); |
@@ -965,26 +978,31 @@ static action*** parse_params(char **argv) | |||
965 | else if (parm == PARM_char_not IF_DESKTOP(|| parm == PARM_not)) { | 978 | else if (parm == PARM_char_not IF_DESKTOP(|| parm == PARM_not)) { |
966 | /* also handles "find ! ! -name 'foo*'" */ | 979 | /* also handles "find ! ! -name 'foo*'" */ |
967 | invert_flag ^= 1; | 980 | invert_flag ^= 1; |
981 | dbg("invert_flag:%d", invert_flag); | ||
968 | } | 982 | } |
969 | #endif | 983 | #endif |
970 | /* Actions */ | 984 | /* Actions */ |
971 | else if (parm == PARM_print) { | 985 | else if (parm == PARM_print) { |
986 | dbg("%d", __LINE__); | ||
972 | G.need_print = 0; | 987 | G.need_print = 0; |
973 | (void) ALLOC_ACTION(print); | 988 | (void) ALLOC_ACTION(print); |
974 | } | 989 | } |
975 | #if ENABLE_FEATURE_FIND_PRINT0 | 990 | #if ENABLE_FEATURE_FIND_PRINT0 |
976 | else if (parm == PARM_print0) { | 991 | else if (parm == PARM_print0) { |
992 | dbg("%d", __LINE__); | ||
977 | G.need_print = 0; | 993 | G.need_print = 0; |
978 | (void) ALLOC_ACTION(print0); | 994 | (void) ALLOC_ACTION(print0); |
979 | } | 995 | } |
980 | #endif | 996 | #endif |
981 | #if ENABLE_FEATURE_FIND_PRUNE | 997 | #if ENABLE_FEATURE_FIND_PRUNE |
982 | else if (parm == PARM_prune) { | 998 | else if (parm == PARM_prune) { |
999 | dbg("%d", __LINE__); | ||
983 | (void) ALLOC_ACTION(prune); | 1000 | (void) ALLOC_ACTION(prune); |
984 | } | 1001 | } |
985 | #endif | 1002 | #endif |
986 | #if ENABLE_FEATURE_FIND_DELETE | 1003 | #if ENABLE_FEATURE_FIND_DELETE |
987 | else if (parm == PARM_delete) { | 1004 | else if (parm == PARM_delete) { |
1005 | dbg("%d", __LINE__); | ||
988 | G.need_print = 0; | 1006 | G.need_print = 0; |
989 | G.recurse_flags |= ACTION_DEPTHFIRST; | 1007 | G.recurse_flags |= ACTION_DEPTHFIRST; |
990 | (void) ALLOC_ACTION(delete); | 1008 | (void) ALLOC_ACTION(delete); |
@@ -994,6 +1012,7 @@ static action*** parse_params(char **argv) | |||
994 | else if (parm == PARM_exec) { | 1012 | else if (parm == PARM_exec) { |
995 | int i; | 1013 | int i; |
996 | action_exec *ap; | 1014 | action_exec *ap; |
1015 | dbg("%d", __LINE__); | ||
997 | G.need_print = 0; | 1016 | G.need_print = 0; |
998 | ap = ALLOC_ACTION(exec); | 1017 | ap = ALLOC_ACTION(exec); |
999 | ap->exec_argv = ++argv; /* first arg after -exec */ | 1018 | ap->exec_argv = ++argv; /* first arg after -exec */ |
@@ -1028,6 +1047,7 @@ static action*** parse_params(char **argv) | |||
1028 | char **endarg; | 1047 | char **endarg; |
1029 | unsigned nested = 1; | 1048 | unsigned nested = 1; |
1030 | 1049 | ||
1050 | dbg("%d", __LINE__); | ||
1031 | endarg = argv; | 1051 | endarg = argv; |
1032 | while (1) { | 1052 | while (1) { |
1033 | if (!*++endarg) | 1053 | if (!*++endarg) |
@@ -1047,6 +1067,7 @@ static action*** parse_params(char **argv) | |||
1047 | #endif | 1067 | #endif |
1048 | else if (parm == PARM_name || parm == PARM_iname) { | 1068 | else if (parm == PARM_name || parm == PARM_iname) { |
1049 | action_name *ap; | 1069 | action_name *ap; |
1070 | dbg("%d", __LINE__); | ||
1050 | ap = ALLOC_ACTION(name); | 1071 | ap = ALLOC_ACTION(name); |
1051 | ap->pattern = arg1; | 1072 | ap->pattern = arg1; |
1052 | ap->iname = (parm == PARM_iname); | 1073 | ap->iname = (parm == PARM_iname); |
@@ -1054,6 +1075,7 @@ static action*** parse_params(char **argv) | |||
1054 | #if ENABLE_FEATURE_FIND_PATH | 1075 | #if ENABLE_FEATURE_FIND_PATH |
1055 | else if (parm == PARM_path || parm == PARM_ipath) { | 1076 | else if (parm == PARM_path || parm == PARM_ipath) { |
1056 | action_path *ap; | 1077 | action_path *ap; |
1078 | dbg("%d", __LINE__); | ||
1057 | ap = ALLOC_ACTION(path); | 1079 | ap = ALLOC_ACTION(path); |
1058 | ap->pattern = arg1; | 1080 | ap->pattern = arg1; |
1059 | ap->ipath = (parm == PARM_ipath); | 1081 | ap->ipath = (parm == PARM_ipath); |
@@ -1062,6 +1084,7 @@ static action*** parse_params(char **argv) | |||
1062 | #if ENABLE_FEATURE_FIND_REGEX | 1084 | #if ENABLE_FEATURE_FIND_REGEX |
1063 | else if (parm == PARM_regex) { | 1085 | else if (parm == PARM_regex) { |
1064 | action_regex *ap; | 1086 | action_regex *ap; |
1087 | dbg("%d", __LINE__); | ||
1065 | ap = ALLOC_ACTION(regex); | 1088 | ap = ALLOC_ACTION(regex); |
1066 | xregcomp(&ap->compiled_pattern, arg1, 0 /*cflags*/); | 1089 | xregcomp(&ap->compiled_pattern, arg1, 0 /*cflags*/); |
1067 | } | 1090 | } |
@@ -1071,6 +1094,7 @@ static action*** parse_params(char **argv) | |||
1071 | action_type *ap; | 1094 | action_type *ap; |
1072 | ap = ALLOC_ACTION(type); | 1095 | ap = ALLOC_ACTION(type); |
1073 | ap->type_mask = find_type(arg1); | 1096 | ap->type_mask = find_type(arg1); |
1097 | dbg("created:type mask:%x", ap->type_mask); | ||
1074 | } | 1098 | } |
1075 | #endif | 1099 | #endif |
1076 | #if ENABLE_FEATURE_FIND_PERM | 1100 | #if ENABLE_FEATURE_FIND_PERM |
@@ -1081,6 +1105,7 @@ static action*** parse_params(char **argv) | |||
1081 | */ | 1105 | */ |
1082 | else if (parm == PARM_perm) { | 1106 | else if (parm == PARM_perm) { |
1083 | action_perm *ap; | 1107 | action_perm *ap; |
1108 | dbg("%d", __LINE__); | ||
1084 | ap = ALLOC_ACTION(perm); | 1109 | ap = ALLOC_ACTION(perm); |
1085 | ap->perm_char = arg1[0]; | 1110 | ap->perm_char = arg1[0]; |
1086 | arg1 = plus_minus_num(arg1); | 1111 | arg1 = plus_minus_num(arg1); |
@@ -1092,6 +1117,7 @@ static action*** parse_params(char **argv) | |||
1092 | #if ENABLE_FEATURE_FIND_MTIME | 1117 | #if ENABLE_FEATURE_FIND_MTIME |
1093 | else if (parm == PARM_mtime) { | 1118 | else if (parm == PARM_mtime) { |
1094 | action_mtime *ap; | 1119 | action_mtime *ap; |
1120 | dbg("%d", __LINE__); | ||
1095 | ap = ALLOC_ACTION(mtime); | 1121 | ap = ALLOC_ACTION(mtime); |
1096 | ap->mtime_char = arg1[0]; | 1122 | ap->mtime_char = arg1[0]; |
1097 | ap->mtime_days = xatoul(plus_minus_num(arg1)); | 1123 | ap->mtime_days = xatoul(plus_minus_num(arg1)); |
@@ -1100,6 +1126,7 @@ static action*** parse_params(char **argv) | |||
1100 | #if ENABLE_FEATURE_FIND_MMIN | 1126 | #if ENABLE_FEATURE_FIND_MMIN |
1101 | else if (parm == PARM_mmin) { | 1127 | else if (parm == PARM_mmin) { |
1102 | action_mmin *ap; | 1128 | action_mmin *ap; |
1129 | dbg("%d", __LINE__); | ||
1103 | ap = ALLOC_ACTION(mmin); | 1130 | ap = ALLOC_ACTION(mmin); |
1104 | ap->mmin_char = arg1[0]; | 1131 | ap->mmin_char = arg1[0]; |
1105 | ap->mmin_mins = xatoul(plus_minus_num(arg1)); | 1132 | ap->mmin_mins = xatoul(plus_minus_num(arg1)); |
@@ -1109,6 +1136,7 @@ static action*** parse_params(char **argv) | |||
1109 | else if (parm == PARM_newer) { | 1136 | else if (parm == PARM_newer) { |
1110 | struct stat stat_newer; | 1137 | struct stat stat_newer; |
1111 | action_newer *ap; | 1138 | action_newer *ap; |
1139 | dbg("%d", __LINE__); | ||
1112 | ap = ALLOC_ACTION(newer); | 1140 | ap = ALLOC_ACTION(newer); |
1113 | xstat(arg1, &stat_newer); | 1141 | xstat(arg1, &stat_newer); |
1114 | ap->newer_mtime = stat_newer.st_mtime; | 1142 | ap->newer_mtime = stat_newer.st_mtime; |
@@ -1117,6 +1145,7 @@ static action*** parse_params(char **argv) | |||
1117 | #if ENABLE_FEATURE_FIND_INUM | 1145 | #if ENABLE_FEATURE_FIND_INUM |
1118 | else if (parm == PARM_inum) { | 1146 | else if (parm == PARM_inum) { |
1119 | action_inum *ap; | 1147 | action_inum *ap; |
1148 | dbg("%d", __LINE__); | ||
1120 | ap = ALLOC_ACTION(inum); | 1149 | ap = ALLOC_ACTION(inum); |
1121 | ap->inode_num = xatoul(arg1); | 1150 | ap->inode_num = xatoul(arg1); |
1122 | } | 1151 | } |
@@ -1124,6 +1153,7 @@ static action*** parse_params(char **argv) | |||
1124 | #if ENABLE_FEATURE_FIND_USER | 1153 | #if ENABLE_FEATURE_FIND_USER |
1125 | else if (parm == PARM_user) { | 1154 | else if (parm == PARM_user) { |
1126 | action_user *ap; | 1155 | action_user *ap; |
1156 | dbg("%d", __LINE__); | ||
1127 | ap = ALLOC_ACTION(user); | 1157 | ap = ALLOC_ACTION(user); |
1128 | ap->uid = bb_strtou(arg1, NULL, 10); | 1158 | ap->uid = bb_strtou(arg1, NULL, 10); |
1129 | if (errno) | 1159 | if (errno) |
@@ -1133,6 +1163,7 @@ static action*** parse_params(char **argv) | |||
1133 | #if ENABLE_FEATURE_FIND_GROUP | 1163 | #if ENABLE_FEATURE_FIND_GROUP |
1134 | else if (parm == PARM_group) { | 1164 | else if (parm == PARM_group) { |
1135 | action_group *ap; | 1165 | action_group *ap; |
1166 | dbg("%d", __LINE__); | ||
1136 | ap = ALLOC_ACTION(group); | 1167 | ap = ALLOC_ACTION(group); |
1137 | ap->gid = bb_strtou(arg1, NULL, 10); | 1168 | ap->gid = bb_strtou(arg1, NULL, 10); |
1138 | if (errno) | 1169 | if (errno) |
@@ -1161,6 +1192,7 @@ static action*** parse_params(char **argv) | |||
1161 | { "", 0 } | 1192 | { "", 0 } |
1162 | }; | 1193 | }; |
1163 | action_size *ap; | 1194 | action_size *ap; |
1195 | dbg("%d", __LINE__); | ||
1164 | ap = ALLOC_ACTION(size); | 1196 | ap = ALLOC_ACTION(size); |
1165 | ap->size_char = arg1[0]; | 1197 | ap->size_char = arg1[0]; |
1166 | ap->size = XATOU_SFX(plus_minus_num(arg1), find_suffixes); | 1198 | ap->size = XATOU_SFX(plus_minus_num(arg1), find_suffixes); |
@@ -1169,6 +1201,7 @@ static action*** parse_params(char **argv) | |||
1169 | #if ENABLE_FEATURE_FIND_CONTEXT | 1201 | #if ENABLE_FEATURE_FIND_CONTEXT |
1170 | else if (parm == PARM_context) { | 1202 | else if (parm == PARM_context) { |
1171 | action_context *ap; | 1203 | action_context *ap; |
1204 | dbg("%d", __LINE__); | ||
1172 | ap = ALLOC_ACTION(context); | 1205 | ap = ALLOC_ACTION(context); |
1173 | /*ap->context = NULL; - ALLOC_ACTION did it */ | 1206 | /*ap->context = NULL; - ALLOC_ACTION did it */ |
1174 | /* SELinux headers erroneously declare non-const parameter */ | 1207 | /* SELinux headers erroneously declare non-const parameter */ |
@@ -1179,6 +1212,7 @@ static action*** parse_params(char **argv) | |||
1179 | #if ENABLE_FEATURE_FIND_LINKS | 1212 | #if ENABLE_FEATURE_FIND_LINKS |
1180 | else if (parm == PARM_links) { | 1213 | else if (parm == PARM_links) { |
1181 | action_links *ap; | 1214 | action_links *ap; |
1215 | dbg("%d", __LINE__); | ||
1182 | ap = ALLOC_ACTION(links); | 1216 | ap = ALLOC_ACTION(links); |
1183 | ap->links_char = arg1[0]; | 1217 | ap->links_char = arg1[0]; |
1184 | ap->links_count = xatoul(plus_minus_num(arg1)); | 1218 | ap->links_count = xatoul(plus_minus_num(arg1)); |
@@ -1190,6 +1224,7 @@ static action*** parse_params(char **argv) | |||
1190 | } | 1224 | } |
1191 | argv++; | 1225 | argv++; |
1192 | } | 1226 | } |
1227 | dbg("exiting %s", __func__); | ||
1193 | return appp; | 1228 | return appp; |
1194 | #undef ALLOC_ACTION | 1229 | #undef ALLOC_ACTION |
1195 | } | 1230 | } |