82 lines
1.9 KiB
Diff
82 lines
1.9 KiB
Diff
diff --git a/composer/e-composer-autosave.c b/composer/e-composer-autosave.c
|
|
index a289866..f783e6c 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 509b312..15b5668 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;
|