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;  
 }
 

Reply via email to