From: Brendan Cully Date: Tue, 10 Apr 2007 23:40:53 +0000 (-0700) Subject: Add hcache path name hook X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=12c7364313feca3d830c9a9387dbf9ab471ceba0;p=neomutt Add hcache path name hook --- diff --git a/hcache.c b/hcache.c index 8246ea7a4..1709509fc 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 e2c93cfc8..0fbd28471 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 03d7298f2..4a93872d0 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 2a278704e..7fab623c2 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 b4e42c273..c12737ac3 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 9fc4369c7..cafeebf59 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++)