Still fine tunning the printing of the substitute command
authorGlenn L McGrath <bug1@ihug.co.nz>
Fri, 28 Mar 2003 14:11:34 +0000 (14:11 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Fri, 28 Mar 2003 14:11:34 +0000 (14:11 -0000)
editors/sed.c

index d1db5fa4f5fb807c2981a9eda8343d5b98fca3ff..1cbf974b650755183e0fd4e0874282365ff368a7 100644 (file)
@@ -714,6 +714,7 @@ static void process_file(FILE *file)
        static int linenum = 0; /* GNU sed does not restart counting lines at EOF */
        unsigned int still_in_range = 0;
        int altered;
+       int force_print;
 
        line = bb_get_chomped_line_from_file(file);
        if (line == NULL) {
@@ -731,6 +732,7 @@ static void process_file(FILE *file)
 
                linenum++;
                altered = 0;
+               force_print = 0;
 
                /* for every line, go through all the commands */
                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);
                                                altered |= substituted;
                                                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
@@ -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
                 * line was altered (via a 'd'elete or 's'ubstitution), in which case
                 * the altered line was already printed */
-               if (!be_quiet && !altered)
+               if ((!be_quiet && !altered) || force_print){
                        puts(line);
-
+               }
                free(line);
                line = next_line;
        } while (line);