mirror of
https://github.com/irssi/irssi.git
synced 2025-02-02 15:08:01 -05:00
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
This commit is contained in:
parent
2e033b5c6d
commit
fbad9ef2ba
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user