aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--composer/e-composer-autosave.c8
-rw-r--r--e-util/e-mktemp.c24
2 files changed, 25 insertions, 7 deletions
diff --git a/composer/e-composer-autosave.c b/composer/e-composer-autosave.c
index a28986625d..002f6d0028 100644
--- a/composer/e-composer-autosave.c
+++ b/composer/e-composer-autosave.c
@@ -91,6 +91,7 @@ static gboolean
composer_autosave_state_open (AutosaveState *state)
{
gchar *path;
+ gint fd;
if (state->file != NULL)
return TRUE;
@@ -100,13 +101,16 @@ composer_autosave_state_open (AutosaveState *state)
/* Since GIO doesn't have support for creating temporary files
* from a template (and in a given directory), we have to use
- * mktemp(), which brings a small risk of overwriting another
+ * g_mkstemp(), which brings a small risk of overwriting another
* autosave file. The risk is, however, miniscule. */
- if (mktemp (path) == NULL) {
+ fd = g_mkstemp (path);
+ if (fd == -1) {
g_free (path);
return FALSE;
}
+ close (fd);
+
/* Create the GFile */
state->file = g_file_new_for_path (path);
g_free (path);
diff --git a/e-util/e-mktemp.c b/e-util/e-mktemp.c
index 509b312ee8..15b566877e 100644
--- a/e-util/e-mktemp.c
+++ b/e-util/e-mktemp.c
@@ -167,7 +167,7 @@ gchar *
e_mktemp (const gchar *template)
{
GString *path;
- gchar *ret;
+ gint fd;
path = get_dir (TRUE);
if (!path)
@@ -179,10 +179,14 @@ e_mktemp (const gchar *template)
else
g_string_append (path, "unknown-XXXXXX");
- ret = mktemp (path->str);
- g_string_free(path, ret == NULL);
+ fd = g_mkstemp (path->str);
- return ret;
+ if (fd != -1) {
+ close (fd);
+ g_unlink (path->str);
+ }
+
+ return g_string_free (path, fd == -1);
}
gint
@@ -226,7 +230,17 @@ e_mkdtemp (const gchar *template)
#ifdef HAVE_MKDTEMP
tmpdir = mkdtemp (path->str);
#else
- tmpdir = mktemp (path->str);
+ {
+ gint fd = g_mkstemp (path->str);
+ if (fd == -1) {
+ tmpdir = NULL;
+ } else {
+ close (fd);
+ tmpdir = path->str;
+ g_unlink (tmpdir);
+ }
+ }
+
if (tmpdir) {
if (g_mkdir (tmpdir, S_IRWXU) == -1)
tmpdir = NULL;