aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2024-12-21 00:24:30 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2024-12-21 00:24:30 +0100
commit1ea89fa98a7c4b1b6924f136963c91caf5a5dccb (patch)
treeae5c07149d45c06bd57dcbe5949e384f95f27d4d
parentb03f5162ac239c3743cfac246b3760b0020f4d23 (diff)
downloadbusybox-w32-1ea89fa98a7c4b1b6924f136963c91caf5a5dccb.tar.gz
busybox-w32-1ea89fa98a7c4b1b6924f136963c91caf5a5dccb.tar.bz2
busybox-w32-1ea89fa98a7c4b1b6924f136963c91caf5a5dccb.zip
cut: code shrink
This change eliminates one temporary: - if (dcount++ < cut_list[cl_pos].startpos) + dcount++; + if (dcount <= cut_list[cl_pos].startpos) function old new delta cut_main 1402 1373 -29 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--coreutils/cut.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/coreutils/cut.c b/coreutils/cut.c
index 65e0e5c30..93b58b493 100644
--- a/coreutils/cut.c
+++ b/coreutils/cut.c
@@ -91,8 +91,9 @@ struct cut_range {
91 91
92static int cmpfunc(const void *a, const void *b) 92static int cmpfunc(const void *a, const void *b)
93{ 93{
94 return (((struct cut_range *) a)->startpos - 94 const struct cut_range *aa = a;
95 ((struct cut_range *) b)->startpos); 95 const struct cut_range *bb = b;
96 return aa->startpos - bb->startpos;
96} 97}
97 98
98#define END_OF_LIST(list_elem) ((list_elem).startpos == UINT_MAX) 99#define END_OF_LIST(list_elem) ((list_elem).startpos == UINT_MAX)
@@ -109,18 +110,18 @@ static void cut_file(FILE *file, const char *delim, const char *odelim,
109 while ((line = xmalloc_fgetline(file)) != NULL) { 110 while ((line = xmalloc_fgetline(file)) != NULL) {
110 111
111 /* set up a list so we can keep track of what's been printed */ 112 /* set up a list so we can keep track of what's been printed */
112 int linelen = strlen(line); 113 unsigned linelen = strlen(line);
113 unsigned cl_pos = 0; 114 unsigned cl_pos = 0;
114 115
115 /* cut based on chars/bytes XXX: only works when sizeof(char) == byte */ 116 /* Cut based on chars/bytes XXX: only works when sizeof(char) == byte */
116 if (option_mask32 & (OPT_CHAR | OPT_BYTE)) { 117 if (option_mask32 & (OPT_CHAR | OPT_BYTE)) {
117 char *printed = xzalloc(linelen + 1); 118 char *printed = xzalloc(linelen + 1);
118 int need_odelim = 0; 119 int need_odelim = 0;
119 120
120 /* print the chars specified in each cut list */ 121 /* print the chars specified in each cut list */
121 for (; NOT_END_OF_LIST(cut_list[cl_pos]); cl_pos++) { 122 for (; NOT_END_OF_LIST(cut_list[cl_pos]); cl_pos++) {
122 unsigned spos; 123 unsigned spos = cut_list[cl_pos].startpos;
123 for (spos = cut_list[cl_pos].startpos; spos < linelen;) { 124 while (spos < linelen) {
124 if (!printed[spos]) { 125 if (!printed[spos]) {
125 printed[spos] = 'X'; 126 printed[spos] = 'X';
126 if (need_odelim && spos != 0 && !printed[spos-1]) { 127 if (need_odelim && spos != 0 && !printed[spos-1]) {
@@ -129,8 +130,10 @@ static void cut_file(FILE *file, const char *delim, const char *odelim,
129 } 130 }
130 putchar(line[spos]); 131 putchar(line[spos]);
131 } 132 }
132 if (++spos > cut_list[cl_pos].endpos) { 133 spos++;
133 need_odelim = (odelim && odelim[0]); /* will print OSEP (if not empty) */ 134 if (spos > cut_list[cl_pos].endpos) {
135 /* will print OSEP (if not empty) */
136 need_odelim = (odelim && odelim[0]);
134 break; 137 break;
135 } 138 }
136 } 139 }
@@ -242,7 +245,8 @@ static void cut_file(FILE *file, const char *delim, const char *odelim,
242 continue; 245 continue;
243 } 246 }
244 /* Got delimiter */ 247 /* Got delimiter */
245 if (dcount++ < cut_list[cl_pos].startpos) { 248 dcount++;
249 if (dcount <= cut_list[cl_pos].startpos) {
246 /* Not yet within range - loop */ 250 /* Not yet within range - loop */
247 start = next; 251 start = next;
248 continue; 252 continue;