From 20a1d9b0a47e708ffed7ef27d8cd21be5d34b6f5 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 15 Aug 2006 06:47:22 +0000 Subject: [PATCH] config wites are atomic - either all or nothing. if nothing - u keep your old config. SVN revision: 24730 --- src/bin/e_config.c | 24 +++++++++++++++++------- src/bin/e_widget_fsel.c | 5 +++-- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 448cc737e..3425abd2d 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -15,7 +15,7 @@ EAPI E_Config *e_config = NULL; static int _e_config_save_cb(void *data); static void _e_config_free(void); static int _e_config_cb_timer(void *data); -static void _e_config_eet_close_handle(Eet_File *ef, char *file); +static int _e_config_eet_close_handle(Eet_File *ef, char *file); /* local subsystem globals */ static int _e_config_save_block = 0; @@ -1496,7 +1496,7 @@ EAPI int e_config_profile_save(void) { Eet_File *ef; - char buf[4096]; + char buf[4096], buf2[4096]; char *homedir; int ok = 0; @@ -1504,14 +1504,18 @@ e_config_profile_save(void) homedir = e_user_homedir_get(); snprintf(buf, sizeof(buf), "%s/.e/e/config/profile.cfg", homedir); + snprintf(buf2, sizeof(buf2), "%s.tmp", buf); free(homedir); - ef = eet_open(buf, EET_FILE_MODE_WRITE); + ef = eet_open(buf2, EET_FILE_MODE_WRITE); if (ef) { ok = eet_write(ef, "config", _e_config_profile, strlen(_e_config_profile), 0); - _e_config_eet_close_handle(ef, buf); + if (_e_config_eet_close_handle(ef, buf2)) + ecore_file_mv(buf2, buf); + else + ecore_file_unlink(buf2); } return ok; } @@ -1520,7 +1524,7 @@ EAPI int e_config_domain_save(char *domain, E_Config_DD *edd, void *data) { Eet_File *ef; - char buf[4096]; + char buf[4096], buf2[4096]; char *homedir; int ok = 0; @@ -1532,12 +1536,16 @@ e_config_domain_save(char *domain, E_Config_DD *edd, void *data) ecore_file_mkpath(buf); snprintf(buf, sizeof(buf), "%s/.e/e/config/%s/%s.cfg", homedir, _e_config_profile, domain); + snprintf(buf2, sizeof(buf2), "%s.tmp", buf); E_FREE(homedir); ef = eet_open(buf, EET_FILE_MODE_WRITE); if (ef) { ok = eet_data_write(ef, edd, "config", data, 1); - _e_config_eet_close_handle(ef, buf); + if (_e_config_eet_close_handle(ef, buf2)) + ecore_file_mv(buf2, buf); + else + ecore_file_unlink(buf2); } return ok; } @@ -1860,7 +1868,7 @@ _e_config_cb_timer(void *data) return 0; } -static void +static int _e_config_eet_close_handle(Eet_File *ef, char *file) { Eet_Error err; @@ -1935,5 +1943,7 @@ _e_config_eet_close_handle(Eet_File *ef, char *file) ecore_file_unlink(file); e_util_dialog_show(_("Enlightenment Configration Write Problems"), erstr, file); + return 0; } + return 1; } diff --git a/src/bin/e_widget_fsel.c b/src/bin/e_widget_fsel.c index d22c358f5..e455a6efb 100644 --- a/src/bin/e_widget_fsel.c +++ b/src/bin/e_widget_fsel.c @@ -172,7 +172,7 @@ _e_wid_fsel_files_selection_change(void *data, Evas_Object *obj, void *event_inf } wd->path = strdup(buf); if (wd->preview) - _e_wid_fsel_preview_file(wd); + _e_wid_fsel_preview_file(wd); e_widget_entry_text_set(wd->o_entry, ici->file); evas_list_free(selected); if (wd->chg_func) wd->chg_func(wd->chg_data, wd->obj); @@ -194,7 +194,8 @@ _e_wid_fsel_files_selected(void *data, Evas_Object *obj, void *event_info) EAPI Evas_Object * e_widget_fsel_add(Evas *evas, char *dev, char *path, char *selected, char *filter, void (*sel_func) (void *data, Evas_Object *obj), void *sel_data, - void (*chg_func) (void *data, Evas_Object *obj), void *chg_data, int preview) + void (*chg_func) (void *data, Evas_Object *obj), void *chg_data, + int preview) { Evas_Object *obj, *o; E_Widget_Data *wd;