aboutsummaryrefslogtreecommitdiff
path: root/editors
diff options
context:
space:
mode:
Diffstat (limited to 'editors')
-rw-r--r--editors/sed.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/editors/sed.c b/editors/sed.c
index ddd4780d3..b40aa8e02 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -265,6 +265,7 @@ static int parse_subst_cmd(sed_cmd_t * const sed_cmd, const char *substr)
case 'g':
sed_cmd->sub_g = 1;
break;
+ /* Hmm, i dont see the I option mentioned in the standard */
case 'I':
cflags |= REG_ICASE;
break;
@@ -381,7 +382,7 @@ static char *parse_cmd_str(sed_cmd_t * const sed_cmd, char *cmdstr)
{
/* if it was a single-letter command that takes no arguments (such as 'p'
* or 'd') all we need to do is increment the index past that command */
- if (strchr("pd=", sed_cmd->cmd)) {
+ if (strchr("pqd=", sed_cmd->cmd)) {
cmdstr++;
}
/* handle (s)ubstitution command */
@@ -400,7 +401,6 @@ static char *parse_cmd_str(sed_cmd_t * const sed_cmd, char *cmdstr)
error_msg_and_die("Command only uses one address");
cmdstr += parse_file_cmd(sed_cmd, cmdstr);
}
- /* handle grouped commands */
else {
error_msg_and_die("Unsupported command %c", sed_cmd->cmd);
}
@@ -794,16 +794,19 @@ static void process_file(FILE *file)
break;
case 'r': {
- FILE *outfile;
- puts(line);
- outfile = fopen(sed_cmd->filename, "r");
- if (outfile)
- print_file(outfile);
- /* else if we couldn't open the output file,
- * no biggie, just don't print anything */
- altered++;
- }
- break;
+ FILE *outfile;
+ puts(line);
+ outfile = fopen(sed_cmd->filename, "r");
+ if (outfile)
+ print_file(outfile);
+ /* else if we couldn't open the output file,
+ * no biggie, just don't print anything */
+ altered++;
+ }
+ break;
+ case 'q': /* Branch to end of script and quit */
+ free(line);
+ return;
}
}