]> git.llucax.com Git - software/mutt-debian.git/blobdiff - bcache.c
releasing version 1.5.20-10
[software/mutt-debian.git] / bcache.c
index 60e5fdca587dbf16ddf4e64d9dedd6a61cfac7c9..81538d22ab9fef4f8a3e83ece058431a3042da3d 100644 (file)
--- a/bcache.c
+++ b/bcache.c
@@ -136,6 +136,13 @@ FILE* mutt_bcache_put(body_cache_t *bcache, const char *id, int tmp)
   snprintf (path, sizeof (path), "%s%s%s", bcache->path, id,
             tmp ? ".tmp" : "");
 
   snprintf (path, sizeof (path), "%s%s%s", bcache->path, id,
             tmp ? ".tmp" : "");
 
+  if ((fp = safe_fopen (path, "w+")))
+    goto out;
+
+  if (errno == EEXIST)
+    /* clean up leftover tmp file */
+    mutt_unlink (path);
+
   s = strchr (path + 1, '/');
   while (!(fp = safe_fopen (path, "w+")) && errno == ENOENT && s)
   {
   s = strchr (path + 1, '/');
   while (!(fp = safe_fopen (path, "w+")) && errno == ENOENT && s)
   {
@@ -147,6 +154,7 @@ FILE* mutt_bcache_put(body_cache_t *bcache, const char *id, int tmp)
     s = strchr (s + 1, '/');
   }
 
     s = strchr (s + 1, '/');
   }
 
+  out:
   dprint (3, (debugfile, "bcache: put: '%s'\n", path));
 
   return fp;
   dprint (3, (debugfile, "bcache: put: '%s'\n", path));
 
   return fp;