From fbad9ef2ba71e8b2baf5ed45995e2d44f43637e8 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sat, 16 Dec 2000 23:38:12 +0000 Subject: Config file handle wasn't closed if config_write_block() failed git-svn-id: http://svn.irssi.org/repos/irssi/trunk@993 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- src/lib-config/write.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/lib-config/write.c') diff --git a/src/lib-config/write.c b/src/lib-config/write.c index 76f29a09..bad7e878 100644 --- a/src/lib-config/write.c +++ b/src/lib-config/write.c @@ -310,10 +310,15 @@ static int config_write_block(CONFIG_REC *rec, CONFIG_NODE *node, int list, int /* Write configuration file. Write to `fname' if it's not NULL. */ int config_write(CONFIG_REC *rec, const char *fname, int create_mode) { + int ret; + g_return_val_if_fail(rec != NULL, -1); g_return_val_if_fail(fname != NULL || rec->fname != NULL, -1); g_return_val_if_fail(create_mode != -1 || rec->create_mode != -1, -1); + if (rec->handle != -1) + close(rec->handle); + rec->handle = open(fname != NULL ? fname : rec->fname, O_WRONLY | O_TRUNC | O_CREAT, create_mode != -1 ? create_mode : rec->create_mode); @@ -322,14 +327,14 @@ int config_write(CONFIG_REC *rec, const char *fname, int create_mode) rec->tmp_indent_level = 0; rec->tmp_last_lf = TRUE; - if (config_write_block(rec, rec->mainnode, FALSE, TRUE) == -1) { + ret = config_write_block(rec, rec->mainnode, FALSE, TRUE); + if (ret == -1) { /* write error */ config_error(rec, errno == 0 ? "bug" : g_strerror(errno)); - return -1; } close(rec->handle); rec->handle = -1; - return 0; + return ret; } -- cgit v1.2.3