/*
- * Copyright (C) 2006 Brendan Cully <brendan@kublai.com>
- * Copyright (C) 2006 Rocco Rutte <pdmef@gmx.net>
+ * Copyright (C) 2006-7 Brendan Cully <brendan@kublai.com>
+ * Copyright (C) 2006, 2009 Rocco Rutte <pdmef@gmx.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
char *dst, size_t dstlen)
{
char host[STRING];
+ char path[_POSIX_PATH_MAX];
ciss_url_t url;
- size_t len;
+ int len;
if (!account || !MessageCachedir || !*MessageCachedir || !dst || !dstlen)
return -1;
return -1;
}
- dprint (3, (debugfile, "bcache_path: URL: '%s'\n", host));
+ mutt_encode_path (path, sizeof (path), NONULL (mailbox));
len = snprintf (dst, dstlen-1, "%s/%s%s%s", MessageCachedir,
- host, NONULL(mailbox),
- (mailbox && *mailbox &&
- mailbox[mutt_strlen(mailbox) - 1] == '/') ? "" : "/");
+ host, path,
+ (*path && path[mutt_strlen (path) - 1] == '/') ? "" : "/");
+
+ dprint (3, (debugfile, "bcache_path: rc: %d, path: '%s'\n", len, dst));
+
if (len < 0 || len >= dstlen-1)
return -1;
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 (s + 1, '/');
}
+ out:
dprint (3, (debugfile, "bcache: put: '%s'\n", path));
return fp;