Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Sep 2023 15:00:34 GMT
From:      Dag-Erling =?utf-8?Q?Sm=C3=B8rgrav?= <des@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: e035e58097ae - stable/13 - split: Add missing test cases.
Message-ID:  <202309141500.38EF0YBU089594@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=e035e58097ae6e7fbdf4934c65752baf3f6ab7d3

commit e035e58097ae6e7fbdf4934c65752baf3f6ab7d3
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2023-09-06 03:28:19 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2023-09-14 14:59:52 +0000

    split: Add missing test cases.
    
    This adds test cases for c4f7198f47c1 and ac17fc816e67.
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    kevans
    Differential Revision:  https://reviews.freebsd.org/D41755
    
    (cherry picked from commit cbea5eddb1b6ae2a101beacf00bf165517f4f2b1)
    
    split: Code cleanup.
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    kevans
    Differential Revision:  https://reviews.freebsd.org/D41756
    
    (cherry picked from commit 851bf856d1a7ad5427ea9c22639ab6f6c4a3f503)
    
    split: Fix linecount parsing.
    
    The “undocumented kludge” which unfortunately can't be dropped for backward compatibility reasons was prone to segfaulting and would improperly allow a new linecount when one was already set.  Fix these issues and add regression tests.
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    kevans
    Differential Revision:  https://reviews.freebsd.org/D41757
    
    (cherry picked from commit 117c54a78ccd214c236806721f21da750e512d3e)
---
 usr.bin/split/split.c             | 45 ++++++++++++++++++++-------------------
 usr.bin/split/tests/split_test.sh | 45 ++++++++++++++++++++++++++++++++++++++-
 2 files changed, 67 insertions(+), 23 deletions(-)

diff --git a/usr.bin/split/split.c b/usr.bin/split/split.c
index b5a457ab6ecd..af1ed69c9482 100644
--- a/usr.bin/split/split.c
+++ b/usr.bin/split/split.c
@@ -41,7 +41,6 @@ static const char sccsid[] = "@(#)split.c	8.2 (Berkeley) 4/16/94";
 #endif
 
 #include <sys/param.h>
-#include <sys/types.h>
 #include <sys/stat.h>
 
 #include <ctype.h>
@@ -85,14 +84,14 @@ static void usage(void) __dead2;
 int
 main(int argc, char **argv)
 {
-	int ch;
-	int error;
-	char *ep, *p;
+	const char *p;
+	char *ep;
+	int ch, error;
 
 	setlocale(LC_ALL, "");
 
 	dflag = false;
-	while ((ch = getopt(argc, argv, "0123456789a:b:cdl:n:p:")) != -1)
+	while ((ch = getopt(argc, argv, "0::1::2::3::4::5::6::7::8::9::a:b:cdl:n:p:")) != -1)
 		switch (ch) {
 		case '0': case '1': case '2': case '3': case '4':
 		case '5': case '6': case '7': case '8': case '9':
@@ -100,17 +99,15 @@ main(int argc, char **argv)
 			 * Undocumented kludge: split was originally designed
 			 * to take a number after a dash.
 			 */
-			if (numlines == 0) {
-				p = argv[optind - 1];
-				if (p[0] == '-' && p[1] == ch && !p[2])
-					numlines = strtol(++p, &ep, 10);
-				else
-					numlines =
-					    strtol(argv[optind] + 1, &ep, 10);
-				if (numlines <= 0 || *ep)
-					errx(EX_USAGE,
-					    "%s: illegal line count", optarg);
-			}
+			if (numlines != 0)
+				usage();
+			numlines = ch - '0';
+			p = optarg ? optarg : "";
+			while (numlines >= 0 && *p >= '0' && *p <= '9')
+				numlines = numlines * 10 + *p++ - '0';
+			if (numlines <= 0 || *p != '\0')
+				errx(EX_USAGE, "%c%s: illegal line count", ch,
+				    optarg ? optarg : "");
 			break;
 		case 'a':		/* Suffix length */
 			if ((sufflen = strtol(optarg, &ep, 10)) <= 0 || *ep)
@@ -157,17 +154,22 @@ main(int argc, char **argv)
 	argv += optind;
 	argc -= optind;
 
-	if (*argv != NULL) {			/* Input file. */
+	if (argc > 0) {			/* Input file. */
 		if (strcmp(*argv, "-") == 0)
 			ifd = STDIN_FILENO;
 		else if ((ifd = open(*argv, O_RDONLY, 0)) < 0)
 			err(EX_NOINPUT, "%s", *argv);
 		++argv;
+		--argc;
+	}
+	if (argc > 0) {			/* File name prefix. */
+		if (strlcpy(fname, *argv, sizeof(fname)) >= sizeof(fname))
+			errx(EX_USAGE, "file name prefix is too long: %s",
+			    *argv);
+		++argv;
+		--argc;
 	}
-	if (*argv != NULL)			/* File name prefix. */
-		if (strlcpy(fname, *argv++, sizeof(fname)) >= sizeof(fname))
-			errx(EX_USAGE, "file name prefix is too long");
-	if (*argv != NULL)
+	if (argc > 0)
 		usage();
 
 	if (strlen(fname) + (unsigned long)sufflen >= sizeof(fname))
@@ -400,7 +402,6 @@ newfile(void)
 		sufflen++;
 
 		/* Reset so we start back at all 'a's in our extended suffix. */
-		tfnum = 0;
 		fnum = 0;
 	}
 
diff --git a/usr.bin/split/tests/split_test.sh b/usr.bin/split/tests/split_test.sh
index 899fd028e74b..c9b87c01618c 100755
--- a/usr.bin/split/tests/split_test.sh
+++ b/usr.bin/split/tests/split_test.sh
@@ -1,7 +1,7 @@
 #
 # SPDX-License-Identifier: BSD-2-Clause
 #
-# Copyright (c) 2022 Klara Systems
+# Copyright (c) 2022-2023 Klara Systems
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -200,6 +200,45 @@ EOF
 	atf_check -o file:foo-ab cat split-ab
 }
 
+atf_test_case autoextend
+autoextend_body()
+{
+	seq $((26*25+1)) >input
+	atf_check split -l1 input
+	atf_check -o inline:"$((26*25))\n" cat xyz
+	atf_check -o inline:"$((26*25+1))\n" cat xzaaa
+}
+
+atf_test_case continue
+continue_body()
+{
+	echo hello >input
+	atf_check split input
+	atf_check -o file:input cat xaa
+	atf_check -s exit:1 -e ignore cat xab
+	atf_check split -c input
+	atf_check -o file:input cat xab
+}
+
+atf_test_case undocumented_kludge
+undocumented_kludge_body()
+{
+	seq 5000 >input
+	atf_check split -1000 input
+	atf_check -o file:xae seq 4001 5000
+	atf_check split -d1000 input
+	atf_check -o file:x04 seq 4001 5000
+}
+
+atf_test_case duplicate_linecount
+duplicate_linecount_body()
+{
+	atf_check -s exit:64 -e ignore split -5 -5 /dev/null
+	atf_check -s exit:64 -e ignore split -l5 -5 /dev/null
+	atf_check -s exit:64 -e ignore split -5 -l5 /dev/null
+	atf_check -s exit:64 -e ignore split -l5 -l5 /dev/null
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case bytes
@@ -209,4 +248,8 @@ atf_init_test_cases()
 	atf_add_test_case numeric_suffix
 	atf_add_test_case larger_suffix_length
 	atf_add_test_case pattern
+	atf_add_test_case autoextend
+	atf_add_test_case continue
+	atf_add_test_case undocumented_kludge
+	atf_add_test_case duplicate_linecount
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202309141500.38EF0YBU089594>