Still fine tunning the printing of the substitute command

This commit is contained in:
Glenn L McGrath 2003-03-28 14:11:34 +00:00
parent 595a6a4199
commit a0f0f0cf76

View File

@ -714,6 +714,7 @@ static void process_file(FILE *file)
static int linenum = 0; /* GNU sed does not restart counting lines at EOF */ static int linenum = 0; /* GNU sed does not restart counting lines at EOF */
unsigned int still_in_range = 0; unsigned int still_in_range = 0;
int altered; int altered;
int force_print;
line = bb_get_chomped_line_from_file(file); line = bb_get_chomped_line_from_file(file);
if (line == NULL) { if (line == NULL) {
@ -731,6 +732,7 @@ static void process_file(FILE *file)
linenum++; linenum++;
altered = 0; altered = 0;
force_print = 0;
/* for every line, go through all the commands */ /* for every line, go through all the commands */
for (sed_cmd = sed_cmd_head.linear; sed_cmd; sed_cmd = sed_cmd->linear) { for (sed_cmd = sed_cmd_head.linear; sed_cmd; sed_cmd = sed_cmd->linear) {
@ -797,7 +799,7 @@ static void process_file(FILE *file)
substituted = do_subst_command(sed_cmd, &line); substituted = do_subst_command(sed_cmd, &line);
altered |= substituted; altered |= substituted;
if (!be_quiet && altered && ((sed_cmd->linear == NULL) || (sed_cmd->linear->cmd != 's'))) { if (!be_quiet && altered && ((sed_cmd->linear == NULL) || (sed_cmd->linear->cmd != 's'))) {
puts(line); force_print = 1;
} }
/* we also print the line if we were given the 'p' flag /* we also print the line if we were given the 'p' flag
@ -908,9 +910,9 @@ static void process_file(FILE *file)
/* we will print the line unless we were told to be quiet or if the /* we will print the line unless we were told to be quiet or if the
* line was altered (via a 'd'elete or 's'ubstitution), in which case * line was altered (via a 'd'elete or 's'ubstitution), in which case
* the altered line was already printed */ * the altered line was already printed */
if (!be_quiet && !altered) if ((!be_quiet && !altered) || force_print){
puts(line); puts(line);
}
free(line); free(line);
line = next_line; line = next_line;
} while (line); } while (line);