changeset: 6300:d498f0e91914
user: [email protected]
date: Mon Mar 04 04:14:43 2013 +0000
link: http://dev.mutt.org/hg/mutt/rev/d498f0e91914
use mkdtemp() to create temporary directory rather than mktemp() followed by
mkdir()
closes #3637
diffs (40 lines):
diff -r 4c16c0d1ba9e -r d498f0e91914 lib.c
--- a/lib.c Sat Feb 23 03:12:43 2013 +0000
+++ b/lib.c Mon Mar 04 04:14:43 2013 +0000
@@ -548,7 +548,6 @@
const char *basename;
char parent[_POSIX_PATH_MAX];
char *p;
- int rv;
strfcpy (parent, NONULL (path), sizeof (parent));
@@ -563,17 +562,19 @@
basename = path;
}
- do
+ snprintf (newdir, ndlen, "%s/%s", parent, ".muttXXXXXX");
+ if (mkdtemp(newdir) == NULL)
{
- snprintf (newdir, ndlen, "%s/%s", parent, ".muttXXXXXX");
- mktemp (newdir);
- }
- while ((rv = mkdir (newdir, 0700)) == -1 && errno == EEXIST);
+ dprint(1, (debugfile, "mutt_mkwrapdir: mkdtemp() failed\n"));
+ return -1;
+ }
- if (rv == -1)
- return -1;
-
- snprintf (newfile, nflen, "%s/%s", newdir, NONULL(basename));
+ if (snprintf (newfile, nflen, "%s/%s", newdir, NONULL(basename)) >= nflen)
+ {
+ rmdir(newdir);
+ dprint(1, (debugfile, "mutt_mkwrapdir: string was truncated\n"));
+ return -1;
+ }
return 0;
}