diff options
-rw-r--r-- | editors/sed.c | 11 | ||||
-rwxr-xr-x | testsuite/sed.tests | 6 |
2 files changed, 13 insertions, 4 deletions
diff --git a/editors/sed.c b/editors/sed.c index a8c35388b..4c7f75521 100644 --- a/editors/sed.c +++ b/editors/sed.c | |||
@@ -113,7 +113,7 @@ typedef struct sed_cmd_s { | |||
113 | int end_line; /* 'sed 1,3p' 0 == one line only. -1 = last line ($). -2-N = +N */ | 113 | int end_line; /* 'sed 1,3p' 0 == one line only. -1 = last line ($). -2-N = +N */ |
114 | int end_line_orig; | 114 | int end_line_orig; |
115 | 115 | ||
116 | FILE *sw_file; /* File (sw) command writes to, -1 for none. */ | 116 | FILE *sw_file; /* File (sw) command writes to, NULL for none. */ |
117 | char *string; /* Data string for (saicytb) commands. */ | 117 | char *string; /* Data string for (saicytb) commands. */ |
118 | 118 | ||
119 | unsigned which_match; /* (s) Which match to replace (0 for all) */ | 119 | unsigned which_match; /* (s) Which match to replace (0 for all) */ |
@@ -179,7 +179,7 @@ static void sed_free_and_close_stuff(void) | |||
179 | sed_cmd_t *sed_cmd_next = sed_cmd->next; | 179 | sed_cmd_t *sed_cmd_next = sed_cmd->next; |
180 | 180 | ||
181 | if (sed_cmd->sw_file) | 181 | if (sed_cmd->sw_file) |
182 | xprint_and_close_file(sed_cmd->sw_file); | 182 | fclose(sed_cmd->sw_file); |
183 | 183 | ||
184 | if (sed_cmd->beg_match) { | 184 | if (sed_cmd->beg_match) { |
185 | regfree(sed_cmd->beg_match); | 185 | regfree(sed_cmd->beg_match); |
@@ -426,8 +426,11 @@ static int parse_subst_cmd(sed_cmd_t *sed_cmd, const char *substr) | |||
426 | /* Write to file */ | 426 | /* Write to file */ |
427 | case 'w': | 427 | case 'w': |
428 | { | 428 | { |
429 | char *temp; | 429 | char *fname; |
430 | idx += parse_file_cmd(/*sed_cmd,*/ substr+idx, &temp); | 430 | idx += parse_file_cmd(/*sed_cmd,*/ substr+idx+1, &fname); |
431 | sed_cmd->sw_file = xfopen_for_write(fname); | ||
432 | sed_cmd->sw_last_char = '\n'; | ||
433 | free(fname); | ||
431 | break; | 434 | break; |
432 | } | 435 | } |
433 | /* Ignore case (gnu exension) */ | 436 | /* Ignore case (gnu exension) */ |
diff --git a/testsuite/sed.tests b/testsuite/sed.tests index 34479e55f..5d2356b64 100755 --- a/testsuite/sed.tests +++ b/testsuite/sed.tests | |||
@@ -365,6 +365,12 @@ testing "sed /regex/,+0<cmd> -i works" \ | |||
365 | "1\n2\n3\n4\n5\n6\n7\n8\n" \ | 365 | "1\n2\n3\n4\n5\n6\n7\n8\n" \ |
366 | "1\n2\n4\n5\n6\n7\n8\n" \ | 366 | "1\n2\n4\n5\n6\n7\n8\n" \ |
367 | 367 | ||
368 | testing "sed 's///w FILE'" \ | ||
369 | "sed 's/qwe/ZZZ/wz'; cat z; rm z" \ | ||
370 | "123\nZZZ\nasd\n""ZZZ\n" \ | ||
371 | "" \ | ||
372 | "123\nqwe\nasd\n" | ||
373 | |||
368 | # testing "description" "commands" "result" "infile" "stdin" | 374 | # testing "description" "commands" "result" "infile" "stdin" |
369 | 375 | ||
370 | exit $FAILCOUNT | 376 | exit $FAILCOUNT |