Fix sed 's' command's 'p' flag, so it can print line twice
authorGlenn L McGrath <bug1@ihug.co.nz>
Fri, 28 Mar 2003 07:44:03 +0000 (07:44 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Fri, 28 Mar 2003 07:44:03 +0000 (07:44 -0000)
editors/sed.c

index 78d46091fb3d8f8f8c196747591600207154a156..d14b6f7634b0d829e7ef26a26847a45f0c3fd270 100644 (file)
@@ -792,25 +792,23 @@ static void process_file(FILE *file)
                                                 *    flag exists in the first place.
                                                 */
 
-                                               /* if the user specified that they didn't want anything printed (i.e., a -n
-                                                * flag and no 'p' flag after the s///), then there's really no point doing
-                                                * anything here. */
-                                               if (be_quiet && !sed_cmd->sub_p)
-                                                       break;
-
                                                /* we print the line once, unless we were told to be quiet */
-                                               if (!be_quiet)
+                                               if (!be_quiet) {
                                                        altered |= do_subst_command(sed_cmd, &line);
+                                                       if (altered && ((sed_cmd->linear == NULL) || (sed_cmd->linear->cmd != 's'))) {
+                                                               puts(line);
+                                                       }
+                                               }
 
                                                /* we also print the line if we were given the 'p' flag
                                                 * (this is quite possibly the second printing) */
-                                               if (sed_cmd->sub_p)
+                                               if (sed_cmd->sub_p) {
                                                        altered |= do_subst_command(sed_cmd, &line);
-                                               if (altered && ((sed_cmd->linear == NULL) || (sed_cmd->linear->cmd != 's')))
-                                                       puts(line);
-
+                                                       if (altered) {
+                                                               puts(line);
+                                                       }
+                                               }
                                                break;
-
                                        case 'a':
                                                puts(line);
                                                fputs(sed_cmd->editline, stdout);