config wites are atomic - either all or nothing. if nothing - u keep your old
authorCarsten Haitzler <raster@rasterman.com>
Tue, 15 Aug 2006 06:47:22 +0000 (06:47 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Tue, 15 Aug 2006 06:47:22 +0000 (06:47 +0000)
config.

SVN revision: 24730

src/bin/e_config.c
src/bin/e_widget_fsel.c

index 448cc73..3425abd 100644 (file)
@@ -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;
 }
index d22c358..e455a6e 100644 (file)
@@ -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;