summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hcache.c15
-rw-r--r--hcache.h5
-rw-r--r--imap/imap.c2
-rw-r--r--imap/util.c2
-rw-r--r--mh.c6
-rw-r--r--pop.c4
6 files changed, 19 insertions, 15 deletions
diff --git a/hcache.c b/hcache.c
index 8246ea7a..1709509f 100644
--- a/hcache.c
+++ b/hcache.c
@@ -464,7 +464,8 @@ crc_matches(const char *d, unsigned int crc)
/* 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;
@@ -749,7 +750,7 @@ static char* get_foldername(const char *folder) {
#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;
@@ -765,7 +766,7 @@ mutt_hcache_open(const char *path, const char *folder)
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;
@@ -814,7 +815,7 @@ mutt_hcache_delete(header_cache_t *h, const char *filename,
#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;
@@ -830,7 +831,7 @@ mutt_hcache_open(const char *path, const char *folder)
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)
@@ -898,7 +899,7 @@ mutt_hcache_dbt_empty_init(DBT * dbt)
}
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;
@@ -916,7 +917,7 @@ mutt_hcache_open(const char *path, const char *folder)
}
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);
diff --git a/hcache.h b/hcache.h
index e2c93cfc..0fbd2847 100644
--- a/hcache.h
+++ b/hcache.h
@@ -24,7 +24,10 @@
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));
diff --git a/imap/imap.c b/imap/imap.c
index 03d7298f..4a93872d 100644
--- a/imap/imap.c
+++ b/imap/imap.c
@@ -1597,7 +1597,7 @@ IMAP_STATUS* imap_mboxcache_get (IMAP_DATA* idata, const char* mbox, int create)
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);
diff --git a/imap/util.c b/imap/util.c
index 2a278704..7fab623c 100644
--- a/imap/util.c
+++ b/imap/util.c
@@ -85,7 +85,7 @@ int imap_hcache_open (IMAP_DATA* idata)
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;
}
diff --git a/mh.c b/mh.c
index b4e42c27..c12737ac 100644
--- a/mh.c
+++ b/mh.c
@@ -795,7 +795,7 @@ static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last,
#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)
@@ -998,7 +998,7 @@ void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md,
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++)
@@ -1586,7 +1586,7 @@ int mh_sync_mailbox (CONTEXT * ctx, int *index_hint)
#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);
diff --git a/pop.c b/pop.c
index 9fc4369c..cafeebf5 100644
--- a/pop.c
+++ b/pop.c
@@ -203,7 +203,7 @@ static int pop_fetch_headers (CONTEXT *ctx)
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);
@@ -613,7 +613,7 @@ int pop_sync_mailbox (CONTEXT *ctx, int *index_hint)
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++)