/* Append md5sumed folder to path if path is a directory. */
static const char *
-mutt_hcache_per_folder(const char *path, const char *folder)
+mutt_hcache_per_folder(const char *path, const char *folder,
+ hcache_namer_t namer)
{
static char mutt_hcache_per_folder_path[_POSIX_PATH_MAX];
struct stat path_stat;
#if HAVE_QDBM
header_cache_t *
-mutt_hcache_open(const char *path, const char *folder)
+mutt_hcache_open(const char *path, const char *folder, hcache_namer_t namer)
{
struct header_cache *h = safe_calloc(1, sizeof (HEADER_CACHE));
int flags = VL_OWRITER | VL_OCREAT;
return NULL;
}
- path = mutt_hcache_per_folder(path, h->folder);
+ path = mutt_hcache_per_folder(path, h->folder, namer);
if (option(OPTHCACHECOMPRESS))
flags |= VL_OZCOMP;
#elif HAVE_GDBM
header_cache_t *
-mutt_hcache_open(const char *path, const char *folder)
+mutt_hcache_open(const char *path, const char *folder, hcache_namer_t namer)
{
struct header_cache *h = safe_calloc(1, sizeof (HEADER_CACHE));
int pagesize = atoi(HeaderCachePageSize) ? atoi(HeaderCachePageSize) : 16384;
return NULL;
}
- path = mutt_hcache_per_folder(path, h->folder);
+ path = mutt_hcache_per_folder(path, h->folder, namer);
h->db = gdbm_open((char *) path, pagesize, GDBM_WRCREAT, 00600, NULL);
if (h->db)
}
header_cache_t *
-mutt_hcache_open(const char *path, const char *folder)
+mutt_hcache_open(const char *path, const char *folder, hcache_namer_t namer)
{
struct stat sb;
u_int32_t createflags = DB_CREATE;
}
tmp = get_foldername (folder);
- path = mutt_hcache_per_folder(path, tmp);
+ path = mutt_hcache_per_folder(path, tmp, namer);
snprintf(h->lockfile, _POSIX_PATH_MAX, "%s-lock-hack", path);
FREE(&tmp);
struct header_cache;
typedef struct header_cache header_cache_t;
-header_cache_t *mutt_hcache_open(const char *path, const char *folder);
+typedef int (*hcache_namer_t)(const char* path, char* dest, size_t dlen);
+
+header_cache_t *mutt_hcache_open(const char *path, const char *folder,
+ hcache_namer_t namer);
void mutt_hcache_close(header_cache_t *h);
HEADER *mutt_hcache_restore(const unsigned char *d, HEADER **oh);
void *mutt_hcache_fetch(header_cache_t *h, const char *filename, size_t (*keylen)(const char *fn));
mutt_account_tourl (&idata->conn->account, &url);
url.path = (char*)mbox;
url_ciss_tostring (&url, urlstr, sizeof (urlstr), 0);
- hc = mutt_hcache_open (HeaderCache, urlstr);
+ hc = mutt_hcache_open (HeaderCache, urlstr, NULL);
if (hc)
{
uidvalidity = mutt_hcache_fetch_raw (hc, "/UIDVALIDITY", imap_hcache_keylen);
url_ciss_tostring (&url, cachepath, sizeof (cachepath), 0);
FREE (&mx.mbox);
- idata->hcache = mutt_hcache_open (HeaderCache, cachepath);
+ idata->hcache = mutt_hcache_open (HeaderCache, cachepath, NULL);
return idata->hcache != NULL ? 0 : -1;
}
#ifdef USE_HCACHE
if (ctx && ctx->magic == M_MH)
- hc = mutt_hcache_open (HeaderCache, ctx->path);
+ hc = mutt_hcache_open (HeaderCache, ctx->path, NULL);
#endif
while ((de = readdir (dirp)) != NULL)
struct stat lastchanged;
int ret;
- hc = mutt_hcache_open (HeaderCache, ctx->path);
+ hc = mutt_hcache_open (HeaderCache, ctx->path, NULL);
#endif
for (p = md, count = 0; p; p = p->next, count++)
#if USE_HCACHE
if (ctx->magic == M_MAILDIR || ctx->magic == M_MH)
- hc = mutt_hcache_open(HeaderCache, ctx->path);
+ hc = mutt_hcache_open(HeaderCache, ctx->path, NULL);
#endif /* USE_HCACHE */
snprintf (msgbuf, sizeof (msgbuf), _("Writing %s..."), ctx->path);
header_cache_t *hc = NULL;
void *data;
- hc = mutt_hcache_open (HeaderCache, ctx->path);
+ hc = mutt_hcache_open (HeaderCache, ctx->path, NULL);
#endif
time (&pop_data->check_time);
M_PROGRESS_MSG, WriteInc, ctx->deleted);
#if USE_HCACHE
- hc = mutt_hcache_open (HeaderCache, ctx->path);
+ hc = mutt_hcache_open (HeaderCache, ctx->path, NULL);
#endif
for (i = 0, j = 0, ret = 0; ret == 0 && i < ctx->msgcount; i++)