[PATCH 3/9] sed: Don't close the same file twice
Steve Capper
steve.capper at arm.com
Mon Apr 4 10:49:56 UTC 2022
From: Tudor Cretu <tudor.cretu at arm.com>
Calling fclose on an already closed file is undefined behaviour.
Rather than close cmd->sw_file, we instead walk through G.FILE_head and
close all the files from there. (cmd->sw_file is populated by
sed_xfopen_w, which adds the reference to G.FILE).
Signed-off-by: Tudor Cretu <tudor.cretu at arm.com>
Reviewed-by: Steve Capper <steve.capper at arm.com>
[SteveC: add last paragraph to commit log]
Signed-off-by: Steve Capper <steve.capper at arm.com>
---
editors/sed.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/editors/sed.c b/editors/sed.c
index 32a4b61f6..c6b9474ae 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -182,15 +182,18 @@ struct globals {
static void sed_free_and_close_stuff(void)
{
sed_cmd_t *sed_cmd = G.sed_cmd_head;
+ struct sed_FILE *sed_file = G.FILE_head;
llist_free(G.append_head, free);
+ while (sed_file) {
+ fclose(sed_file->fp);
+ sed_file = sed_file->next;
+ }
+
while (sed_cmd) {
sed_cmd_t *sed_cmd_next = sed_cmd->next;
- if (sed_cmd->sw_file)
- fclose(sed_cmd->sw_file);
-
/* Used to free regexps, but now there is code
* in get_address() which can reuse a regexp
* for constructs as /regexp/cmd1;//cmd2
--
2.35.1
More information about the busybox
mailing list