Add hcache path name hook
authorBrendan Cully <brendan@kublai.com>
Tue, 10 Apr 2007 23:40:53 +0000 (16:40 -0700)
committerBrendan Cully <brendan@kublai.com>
Tue, 10 Apr 2007 23:40:53 +0000 (16:40 -0700)
hcache.c
hcache.h
imap/imap.c
imap/util.c
mh.c
pop.c

index 8246ea7a4d1e1b2fddf03c10667bb7b57e3a3bdc..1709509fc5be30446daf083877ebd649b899cd65 100644 (file)
--- 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);
 
index e2c93cfc82d1f6d182c60f0a3552ada3e5277a7f..0fbd284710dc4655b7a27484822cf743f3f1dd7e 100644 (file)
--- a/hcache.h
+++ b/hcache.h
 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));
index 03d7298f22731e1dc63f4b85ad399e7eea729300..4a93872d00712dc998f72d3a631335baa6435942 100644 (file)
@@ -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);
index 2a278704e666b718ea4a746d3ecabd8265fd1b8e..7fab623c2f3c8cf2f85173fe262617df674a7821 100644 (file)
@@ -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 b4e42c27324502ade698d8345dc88a53b7427a17..c12737ac3a9a712b24c428e915b85e4cfb9b07d2 100644 (file)
--- 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 9fc4369c72b067ba20b388d1b6d956be41eb6820..cafeebf59143e602e7acd0491c2097cbd4c7632d 100644 (file)
--- 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++)