aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table/e-tree-table-adapter.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2002-08-07 04:31:40 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2002-08-07 04:31:40 +0800
commit71eabe9f8c8c6a31f26cd1a02d1f49612bc46f38 (patch)
treeb607d2de6baa67786a11caa320d4991ac258472c /widgets/table/e-tree-table-adapter.c
parenteb83dd4dd0cc797f1a83fbcd99a41cb4723a0e51 (diff)
downloadgsoc2013-evolution-71eabe9f8c8c6a31f26cd1a02d1f49612bc46f38.tar
gsoc2013-evolution-71eabe9f8c8c6a31f26cd1a02d1f49612bc46f38.tar.gz
gsoc2013-evolution-71eabe9f8c8c6a31f26cd1a02d1f49612bc46f38.tar.bz2
gsoc2013-evolution-71eabe9f8c8c6a31f26cd1a02d1f49612bc46f38.tar.lz
gsoc2013-evolution-71eabe9f8c8c6a31f26cd1a02d1f49612bc46f38.tar.xz
gsoc2013-evolution-71eabe9f8c8c6a31f26cd1a02d1f49612bc46f38.tar.zst
gsoc2013-evolution-71eabe9f8c8c6a31f26cd1a02d1f49612bc46f38.zip
#include <string.h> for memset
2002-08-06 Jeffrey Stedfast <fejj@ximian.com> * e-cell-progress.c: #include <string.h> for memset * e-table.c (e_table_save_specification): Updated to use e_xml_save_file() instead of xmlSaveFile(). Also fixed to save to a tmp file first. * e-table-specification.c (e_table_specification_save_to_file): Same as above. * e-table-state.c (e_table_state_save_to_file): Same here. * e-tree-table-adapter.c (e_tree_table_adapter_save_expanded_state): And here too. svn path=/trunk/; revision=17717
Diffstat (limited to 'widgets/table/e-tree-table-adapter.c')
-rw-r--r--widgets/table/e-tree-table-adapter.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/widgets/table/e-tree-table-adapter.c b/widgets/table/e-tree-table-adapter.c
index 20f41e6ebc..552b15ddf6 100644
--- a/widgets/table/e-tree-table-adapter.c
+++ b/widgets/table/e-tree-table-adapter.c
@@ -22,9 +22,17 @@
* 02111-1307, USA.
*/
+
+#ifdef HAVE_CONFIG_H
#include <config.h>
+#endif
+
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
#include <gtk/gtksignal.h>
#include <gnome-xml/tree.h>
#include <gnome-xml/parser.h>
@@ -931,11 +939,13 @@ save_expanded_state_func (gpointer keyp, gpointer value, gpointer data)
void
e_tree_table_adapter_save_expanded_state (ETreeTableAdapter *etta, const char *filename)
{
- xmlDoc *doc;
- xmlNode *root;
ETreeTableAdapterPriv *priv;
+ char *tmp, *slash;
TreeAndRoot tar;
-
+ xmlDocPtr doc;
+ xmlNode *root;
+ int ret;
+
g_return_if_fail(etta != NULL);
priv = etta->priv;
@@ -951,13 +961,25 @@ e_tree_table_adapter_save_expanded_state (ETreeTableAdapter *etta, const char *f
tar.root = root;
tar.tree = etta->priv->source;
-
+
g_hash_table_foreach (priv->attributes,
save_expanded_state_func,
&tar);
-
- xmlSaveFile (filename, doc);
-
+
+ tmp = alloca (strlen (filename) + 5);
+ slash = strrchr (filename, '/');
+ if (slash)
+ sprintf (tmp, "%.*s.#%s", slash - filename + 1, filename, slash + 1);
+ else
+ sprintf (tmp, ".#%s", filename);
+
+ ret = e_xml_save_file (tmp, doc);
+ if (ret != -1)
+ ret = rename (tmp, filename);
+
+ if (ret == -1)
+ unlink (tmp);
+
xmlFreeDoc (doc);
}