aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ephy-file-helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ephy-file-helpers.c')
-rw-r--r--lib/ephy-file-helpers.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/ephy-file-helpers.c b/lib/ephy-file-helpers.c
index 1161f6ac7..db988a2e3 100644
--- a/lib/ephy-file-helpers.c
+++ b/lib/ephy-file-helpers.c
@@ -35,6 +35,29 @@
static GHashTable *files = NULL;
static char *dot_dir = NULL;
+static char *tmp_dir = NULL;
+static GList *del_on_exit = NULL;
+
+char *
+ephy_file_tmp_directory (void)
+{
+ if (tmp_dir == NULL)
+ {
+ char *partial_name;
+ char *full_name;
+
+ partial_name = g_strconcat ("epiphany-", g_get_user_name (), "-XXXXXX", NULL);
+ full_name = g_build_filename (g_get_tmp_dir (), partial_name, NULL);
+ tmp_dir = mkdtemp (full_name);
+ g_free(partial_name);
+ if (tmp_dir == NULL)
+ {
+ g_free (full_name);
+ }
+ }
+
+ return tmp_dir;
+}
char *
ephy_file_tmp_filename (const char *base,
@@ -128,12 +151,32 @@ ephy_file_helpers_init (void)
(GDestroyNotify) g_free);
}
+static void
+delete_files (GList *l)
+{
+ for (; l != NULL; l = l->next)
+ {
+ unlink (l->data);
+ }
+}
+
void
ephy_file_helpers_shutdown (void)
{
g_hash_table_destroy (files);
+ del_on_exit = g_list_reverse (del_on_exit);
+ delete_files (del_on_exit);
+ g_list_foreach (del_on_exit, (GFunc)g_free, NULL);
+ g_list_free (del_on_exit);
+ del_on_exit = NULL;
+
+ rmdir (tmp_dir);
+ g_free (tmp_dir);
+ tmp_dir = NULL;
+
g_free (dot_dir);
+ dot_dir = NULL;
}
void
@@ -237,3 +280,10 @@ failed:
return retval;
}
+
+void
+ephy_file_delete_on_exit (const char *path)
+{
+ del_on_exit = g_list_prepend (del_on_exit,
+ g_strdup (path));
+}