[git commit] cut: "it's legal to pass an empty list" seems to be untrue
Denys Vlasenko
vda.linux at googlemail.com
Fri Dec 13 19:22:05 UTC 2024
commit: https://git.busybox.net/busybox/commit/?id=7624077772878db25d8221fc4d6f731e29ebcdba
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
function old new delta
cut_main 1344 1339 -5
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
coreutils/cut.c | 90 ++++++++++++++++++++++++++++-----------------------------
1 file changed, 44 insertions(+), 46 deletions(-)
diff --git a/coreutils/cut.c b/coreutils/cut.c
index 6eac7793f..9a99ad05c 100644
--- a/coreutils/cut.c
+++ b/coreutils/cut.c
@@ -336,61 +336,59 @@ int cut_main(int argc UNUSED_PARAM, char **argv)
* valid list formats: N, N-, N-M, -M
* more than one list can be separated by commas
*/
- {
+ /* take apart the lists, one by one (they are separated with commas) */
+ while ((ltok = strsep(&sopt, ",")) != NULL) {
char *ntok;
- int s = 0, e = 0;
-
- /* take apart the lists, one by one (they are separated with commas) */
- while ((ltok = strsep(&sopt, ",")) != NULL) {
-
- /* it's actually legal to pass an empty list */
- if (!ltok[0])
- continue;
+ int s, e;
- /* get the start pos */
- ntok = strsep(<ok, "-");
- if (!ntok[0]) {
- s = 0;
- } else {
- /* account for the fact that arrays are zero based, while
- * the user expects the first char on the line to be char #1 */
- s = xatoi_positive(ntok) - 1;
- }
-
- /* get the end pos */
- if (ltok == NULL) {
- e = s;
- } else if (!ltok[0]) {
- /* if the user specified no end position,
- * that means "til the end of the line" */
- e = INT_MAX;
- } else {
- /* again, arrays are zero based, lines are 1 based */
- e = xatoi_positive(ltok) - 1;
- }
+ /* it's actually legal to pass an empty list */
+ //if (!ltok[0])
+ // continue;
+ //^^^ testcase?
- if (s < 0 || e < s)
- bb_error_msg_and_die("invalid range %s-%s", ntok, ltok ?: ntok);
+ /* get the start pos */
+ ntok = strsep(<ok, "-");
+ if (!ntok[0]) {
+ s = 0;
+ } else {
+ /* account for the fact that arrays are zero based, while
+ * the user expects the first char on the line to be char #1 */
+ s = xatoi_positive(ntok) - 1;
+ }
- /* add the new list */
- cut_list = xrealloc_vector(cut_list, 4, nlists);
- /* NB: startpos is always >= 0 */
- cut_list[nlists].startpos = s;
- cut_list[nlists].endpos = e;
- nlists++;
+ /* get the end pos */
+ if (ltok == NULL) {
+ e = s;
+ } else if (!ltok[0]) {
+ /* if the user specified no end position,
+ * that means "til the end of the line" */
+ e = INT_MAX;
+ } else {
+ /* again, arrays are zero based, lines are 1 based */
+ e = xatoi_positive(ltok) - 1;
}
- /* 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 (s < 0 || e < s)
+ bb_error_msg_and_die("invalid range %s-%s", ntok, ltok ?: ntok);
- /* 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
- */
- if (!(opt & OPT_NOSORT))
- qsort(cut_list, nlists, sizeof(cut_list[0]), cmpfunc);
+ /* add the new list */
+ cut_list = xrealloc_vector(cut_list, 4, nlists);
+ /* NB: startpos 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");
+
+ /* 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
+ */
+ if (!(opt & OPT_NOSORT))
+ qsort(cut_list, nlists, sizeof(cut_list[0]), cmpfunc);
+
#if ENABLE_FEATURE_CUT_REGEX
if (opt & OPT_REGEX) {
xregcomp(®, delim, REG_EXTENDED);
More information about the busybox-cvs
mailing list