[git commit] cut: we can't get empty cut_list[], remove the check for that

Denys Vlasenko vda.linux at googlemail.com
Sun Dec 15 23:19:43 UTC 2024


commit: https://git.busybox.net/busybox/commit/?id=ba9651b803f0eb2a8cba0205ae72c75ab773adaf
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
.rodata                                           105685  105659     -26

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/cut.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/coreutils/cut.c b/coreutils/cut.c
index 20138075c..3d9f2b373 100644
--- a/coreutils/cut.c
+++ b/coreutils/cut.c
@@ -287,7 +287,7 @@ int cut_main(int argc UNUSED_PARAM, char **argv)
 	/* growable array holding a series of lists */
 	struct cut_list *cut_list = NULL;
 	unsigned nlists = 0;	/* number of elements in above list */
-	char *sopt, *ltok;
+	char *LIST, *ltok;
 	const char *delim = NULL;
 	const char *odelim = NULL;
 	unsigned opt;
@@ -311,7 +311,7 @@ int cut_main(int argc UNUSED_PARAM, char **argv)
 			"\0" "b:c:f:" IF_FEATURE_CUT_REGEX("F:") /* one of -bcfF is required */
 			"b--"ARG":c--"ARG":f--"ARG IF_FEATURE_CUT_REGEX(":F--"ARG), /* they are mutually exclusive */
 		IF_LONG_OPTS(cut_longopts,)
-			&sopt, &sopt, &sopt, &delim, &odelim IF_FEATURE_CUT_REGEX(, &sopt)
+			&LIST, &LIST, &LIST, &delim, &odelim IF_FEATURE_CUT_REGEX(, &LIST)
 		);
 	if (!odelim)
 		odelim = (opt & OPT_REGEX) ? " " : delim;
@@ -322,7 +322,7 @@ int cut_main(int argc UNUSED_PARAM, char **argv)
 	argv += optind;
 	//if (!(opt & (OPT_BYTE | OPT_CHAR | OPT_FIELDS | OPT_REGEX)))
 	//	bb_simple_error_msg_and_die("expected a list of bytes, characters, or fields");
-	// ^^^ handled by getopt32
+	//^^^ handled by getopt32
 
 	/* non-field (char or byte) cutting has some special handling */
 	if (!(opt & (OPT_FIELDS|OPT_REGEX))) {
@@ -344,7 +344,7 @@ int cut_main(int argc UNUSED_PARAM, char **argv)
 	 * more than one range can be separated by commas
 	 */
 	/* take apart the ranges, one by one (separated with commas) */
-	while ((ltok = strsep(&sopt, ",")) != NULL) {
+	while ((ltok = strsep(&LIST, ",")) != NULL) {
 		char *ntok;
 		int s, e;
 
@@ -382,17 +382,20 @@ int cut_main(int argc UNUSED_PARAM, char **argv)
 		if (s < 0 || e < s)
 			bb_error_msg_and_die("invalid range %s-%s", ntok, ltok ?: ntok);
 
-		/* add the new list */
+		/* add the new range */
 		cut_list = xrealloc_vector(cut_list, 4, nlists);
-		/* NB: startpos is always >= 0 */
+		/* NB: s is always >= 0 */
 		cut_list[nlists].startpos = s;
 		cut_list[nlists].endpos = e;
 		nlists++;
 	}
 
 	/* make sure we got some cut positions out of all that */
-	if (nlists == 0)
-		bb_simple_error_msg_and_die("missing list of positions");
+	//if (nlists == 0)
+	//	bb_simple_error_msg_and_die("missing list of positions");
+	//^^^ this is impossible since one of -bcfF is required,
+	// they populate LIST with non-empty string and when it is parsed,
+	// cut_list[] gets at least one element.
 
 	/* now that the lists are parsed, we need to sort them to make life
 	 * easier on us when it comes time to print the chars / fields / lines


More information about the busybox-cvs mailing list