- very minor tweak: save 1 byte.
statistics: text data bss dec hex filename 867 0 12 879 36f fold.o.oorig.gcc-3.3 843 0 12 855 357 fold.o.oorig.gcc-3.4 780 0 12 792 318 fold.o.oorig.gcc-4.0 761 0 12 773 305 fold.o.oorig.gcc-4.1-HEAD 761 0 12 773 305 fold.o.oorig.gcc-4.2-HEAD 866 0 12 878 36e fold.o.gcc-3.3 842 0 12 854 356 fold.o.gcc-3.4 779 0 12 791 317 fold.o.gcc-4.0 760 0 12 772 304 fold.o.gcc-4.1-HEAD 760 0 12 772 304 fold.o.gcc-4.2-HEAD
This commit is contained in:
parent
76b24270d4
commit
4bf31272ff
126
coreutils/fold.c
126
coreutils/fold.c
@ -51,7 +51,6 @@ extern int fold_main(int argc, char **argv)
|
||||
int i;
|
||||
int errs = 0;
|
||||
|
||||
|
||||
if(!ENABLE_DEBUG_YANK_SUSv2) {
|
||||
/* Turn any numeric options into -w options. */
|
||||
for (i = 1; i < argc; i++) {
|
||||
@ -78,80 +77,81 @@ extern int fold_main(int argc, char **argv)
|
||||
|
||||
do {
|
||||
FILE *istream = bb_wfopen_input(*argv);
|
||||
if (istream != NULL) {
|
||||
int c;
|
||||
int column = 0; /* Screen column where next char will go. */
|
||||
int offset_out = 0; /* Index in `line_out' for next char. */
|
||||
static char *line_out = NULL;
|
||||
static int allocated_out = 0;
|
||||
int c;
|
||||
int column = 0; /* Screen column where next char will go. */
|
||||
int offset_out = 0; /* Index in `line_out' for next char. */
|
||||
static char *line_out = NULL;
|
||||
static int allocated_out = 0;
|
||||
|
||||
while ((c = getc(istream)) != EOF) {
|
||||
if (offset_out + 1 >= allocated_out) {
|
||||
allocated_out += 1024;
|
||||
line_out = xrealloc(line_out, allocated_out);
|
||||
}
|
||||
if (istream == NULL) {
|
||||
errs |= EXIT_FAILURE;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (c == '\n') {
|
||||
line_out[offset_out++] = c;
|
||||
fwrite(line_out, sizeof(char), (size_t) offset_out, stdout);
|
||||
column = offset_out = 0;
|
||||
continue;
|
||||
}
|
||||
while ((c = getc(istream)) != EOF) {
|
||||
if (offset_out + 1 >= allocated_out) {
|
||||
allocated_out += 1024;
|
||||
line_out = xrealloc(line_out, allocated_out);
|
||||
}
|
||||
|
||||
if (c == '\n') {
|
||||
line_out[offset_out++] = c;
|
||||
fwrite(line_out, sizeof(char), (size_t) offset_out, stdout);
|
||||
column = offset_out = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
rescan:
|
||||
column = adjust_column(column, c);
|
||||
column = adjust_column(column, c);
|
||||
|
||||
if (column > width) {
|
||||
/* This character would make the line too long.
|
||||
Print the line plus a newline, and make this character
|
||||
start the next line. */
|
||||
if (flags & FLAG_BREAK_SPACES) {
|
||||
/* Look for the last blank. */
|
||||
int logical_end;
|
||||
if (column > width) {
|
||||
/* This character would make the line too long.
|
||||
Print the line plus a newline, and make this character
|
||||
start the next line. */
|
||||
if (flags & FLAG_BREAK_SPACES) {
|
||||
/* Look for the last blank. */
|
||||
int logical_end;
|
||||
|
||||
for (logical_end = offset_out - 1; logical_end >= 0; logical_end--) {
|
||||
if (isblank(line_out[logical_end])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (logical_end >= 0) {
|
||||
/* Found a blank. Don't output the part after it. */
|
||||
logical_end++;
|
||||
fwrite(line_out, sizeof(char), (size_t) logical_end, stdout);
|
||||
putchar('\n');
|
||||
/* Move the remainder to the beginning of the next line.
|
||||
The areas being copied here might overlap. */
|
||||
memmove(line_out, line_out + logical_end, offset_out - logical_end);
|
||||
offset_out -= logical_end;
|
||||
for (column = i = 0; i < offset_out; i++) {
|
||||
column = adjust_column(column, line_out[i]);
|
||||
}
|
||||
goto rescan;
|
||||
}
|
||||
} else {
|
||||
if (offset_out == 0) {
|
||||
line_out[offset_out++] = c;
|
||||
continue;
|
||||
for (logical_end = offset_out - 1; logical_end >= 0; logical_end--) {
|
||||
if (isblank(line_out[logical_end])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
line_out[offset_out++] = '\n';
|
||||
fwrite(line_out, sizeof(char), (size_t) offset_out, stdout);
|
||||
column = offset_out = 0;
|
||||
goto rescan;
|
||||
if (logical_end >= 0) {
|
||||
/* Found a blank. Don't output the part after it. */
|
||||
logical_end++;
|
||||
fwrite(line_out, sizeof(char), (size_t) logical_end, stdout);
|
||||
putchar('\n');
|
||||
/* Move the remainder to the beginning of the next line.
|
||||
The areas being copied here might overlap. */
|
||||
memmove(line_out, line_out + logical_end, offset_out - logical_end);
|
||||
offset_out -= logical_end;
|
||||
for (column = i = 0; i < offset_out; i++) {
|
||||
column = adjust_column(column, line_out[i]);
|
||||
}
|
||||
goto rescan;
|
||||
}
|
||||
} else {
|
||||
if (offset_out == 0) {
|
||||
line_out[offset_out++] = c;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
line_out[offset_out++] = c;
|
||||
}
|
||||
|
||||
if (offset_out) {
|
||||
line_out[offset_out++] = '\n';
|
||||
fwrite(line_out, sizeof(char), (size_t) offset_out, stdout);
|
||||
column = offset_out = 0;
|
||||
goto rescan;
|
||||
}
|
||||
|
||||
if (ferror(istream) || bb_fclose_nonstdin(istream)) {
|
||||
bb_perror_msg("%s", *argv); /* Avoid multibyte problems. */
|
||||
errs |= EXIT_FAILURE;
|
||||
}
|
||||
} else {
|
||||
line_out[offset_out++] = c;
|
||||
}
|
||||
|
||||
if (offset_out) {
|
||||
fwrite(line_out, sizeof(char), (size_t) offset_out, stdout);
|
||||
}
|
||||
|
||||
if (ferror(istream) || bb_fclose_nonstdin(istream)) {
|
||||
bb_perror_msg("%s", *argv); /* Avoid multibyte problems. */
|
||||
errs |= EXIT_FAILURE;
|
||||
}
|
||||
} while (*++argv);
|
||||
|
Loading…
Reference in New Issue
Block a user