[git commit] cut: code shrink
Denys Vlasenko
vda.linux at googlemail.com
Fri Dec 20 23:24:30 UTC 2024
commit: https://git.busybox.net/busybox/commit/?id=1ea89fa98a7c4b1b6924f136963c91caf5a5dccb
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
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 at googlemail.com>
---
coreutils/cut.c | 22 +++++++++++++---------
1 file 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 {
static int cmpfunc(const void *a, const void *b)
{
- return (((struct cut_range *) a)->startpos -
- ((struct cut_range *) b)->startpos);
+ const struct cut_range *aa = a;
+ const struct cut_range *bb = b;
+ return aa->startpos - bb->startpos;
}
#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,
while ((line = xmalloc_fgetline(file)) != NULL) {
/* set up a list so we can keep track of what's been printed */
- int linelen = strlen(line);
+ unsigned linelen = strlen(line);
unsigned cl_pos = 0;
- /* cut based on chars/bytes XXX: only works when sizeof(char) == byte */
+ /* Cut based on chars/bytes XXX: only works when sizeof(char) == byte */
if (option_mask32 & (OPT_CHAR | OPT_BYTE)) {
char *printed = xzalloc(linelen + 1);
int need_odelim = 0;
/* print the chars specified in each cut list */
for (; NOT_END_OF_LIST(cut_list[cl_pos]); cl_pos++) {
- unsigned spos;
- for (spos = cut_list[cl_pos].startpos; spos < linelen;) {
+ unsigned spos = cut_list[cl_pos].startpos;
+ while (spos < linelen) {
if (!printed[spos]) {
printed[spos] = 'X';
if (need_odelim && spos != 0 && !printed[spos-1]) {
@@ -129,8 +130,10 @@ static void cut_file(FILE *file, const char *delim, const char *odelim,
}
putchar(line[spos]);
}
- if (++spos > cut_list[cl_pos].endpos) {
- need_odelim = (odelim && odelim[0]); /* will print OSEP (if not empty) */
+ spos++;
+ if (spos > cut_list[cl_pos].endpos) {
+ /* will print OSEP (if not empty) */
+ need_odelim = (odelim && odelim[0]);
break;
}
}
@@ -242,7 +245,8 @@ static void cut_file(FILE *file, const char *delim, const char *odelim,
continue;
}
/* Got delimiter */
- if (dcount++ < cut_list[cl_pos].startpos) {
+ dcount++;
+ if (dcount <= cut_list[cl_pos].startpos) {
/* Not yet within range - loop */
start = next;
continue;
More information about the busybox-cvs
mailing list