From ccd43a83014d77cda09b5af82de9996bcd1fa333 Mon Sep 17 00:00:00 2001 From: Glenn L McGrath Date: Fri, 28 Mar 2003 07:44:03 +0000 Subject: [PATCH] Fix sed 's' command's 'p' flag, so it can print line twice --- editors/sed.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/editors/sed.c b/editors/sed.c index 78d46091f..d14b6f763 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -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);