diff --git a/lib/vfs/interface.c b/lib/vfs/interface.c index 63bbddec6..0bd0ba207 100644 --- a/lib/vfs/interface.c +++ b/lib/vfs/interface.c @@ -775,6 +775,7 @@ mc_tmpdir (void) static const char *tmpdir = NULL; const char *sys_tmp; struct stat st; + gchar *template; /* Check if already correctly initialized */ if (tmpdir != NULL && lstat (tmpdir, &st) == 0 && S_ISDIR (st.st_mode) && @@ -789,7 +790,10 @@ mc_tmpdir (void) sys_tmp = TMPDIR_DEFAULT; } - g_snprintf (buffer, sizeof (buffer), "%s/mc-XXXXXX", sys_tmp); + template = g_build_filename (sys_tmp, "mc-XXXXXX", (char *) NULL); + g_strlcpy (buffer, template, sizeof (buffer)); + g_free (template); + tmpdir = g_mkdtemp (buffer); if (tmpdir != NULL) g_setenv ("MC_TMPDIR", tmpdir, TRUE); diff --git a/tests/lib/vfs/tempdir.c b/tests/lib/vfs/tempdir.c index 2a499d194..a09c47315 100644 --- a/tests/lib/vfs/tempdir.c +++ b/tests/lib/vfs/tempdir.c @@ -45,6 +45,9 @@ static void setup (void) { + /* Ensure that tests behave consistently irrespectively of the environment */ + g_unsetenv ("MC_TMPDIR"); + str_init_strings (NULL); vfs_init ();