From 283e8d87593ee50880fdb3acbef85e5666313162 Mon Sep 17 00:00:00 2001 From: Rocco Rutte Date: Thu, 18 May 2006 18:35:10 +0000 Subject: [PATCH] Use header_cache_t* instead of void* for header cache. In hcache.c, the header_cache structure is defined to match the needs per DB backend used. Thus the interface uses void* abstract from it. This patch adds a 'header_cache' forward declaration to hcache.h so that we at least get a little more type safety. --- hcache.c | 58 +++++++++++++++++++------------------------------- hcache.h | 17 +++++++++------ imap/imap.c | 2 +- imap/message.c | 2 +- mh.c | 20 +++++++++++------ 5 files changed, 48 insertions(+), 51 deletions(-) diff --git a/hcache.c b/hcache.c index b67c48e98..217d5788f 100644 --- a/hcache.c +++ b/hcache.c @@ -566,10 +566,9 @@ mutt_hcache_per_folder(const char *path, const char *folder) /* This function transforms a header into a char so that it is useable by * db_store */ static void * -mutt_hcache_dump(void *_db, HEADER * h, int *off, +mutt_hcache_dump(header_cache_t *h, HEADER * header, int *off, unsigned long uid_validity) { - struct header_cache *db = _db; unsigned char *d = NULL; *off = 0; @@ -585,15 +584,15 @@ mutt_hcache_dump(void *_db, HEADER * h, int *off, } *off += sizeof (validate); - d = dump_int(db->crc, d, off); + d = dump_int(h->crc, d, off); lazy_realloc(&d, *off + sizeof (HEADER)); - memcpy(d + *off, h, sizeof (HEADER)); + memcpy(d + *off, header, sizeof (HEADER)); *off += sizeof (HEADER); - d = dump_envelope(h->env, d, off); - d = dump_body(h->content, d, off); - d = dump_char(h->maildir_flags, d, off); + d = dump_envelope(header->env, d, off); + d = dump_body(header->content, d, off); + d = dump_char(header->maildir_flags, d, off); return d; } @@ -633,13 +632,12 @@ mutt_hcache_restore(const unsigned char *d, HEADER ** oh) } void * -mutt_hcache_fetch(void *db, const char *filename, +mutt_hcache_fetch(header_cache_t *h, const char *filename, size_t(*keylen) (const char *fn)) { - struct header_cache *h = db; void* data; - data = mutt_hcache_fetch_raw (db, filename, keylen); + data = mutt_hcache_fetch_raw (h, filename, keylen); if (!data || !crc32_matches(data, h->crc)) { @@ -651,10 +649,9 @@ mutt_hcache_fetch(void *db, const char *filename, } void * -mutt_hcache_fetch_raw (void *db, const char *filename, +mutt_hcache_fetch_raw (header_cache_t *h, const char *filename, size_t(*keylen) (const char *fn)) { - struct header_cache *h = db; #ifndef HAVE_DB4 char path[_POSIX_PATH_MAX]; int ksize; @@ -703,11 +700,10 @@ mutt_hcache_fetch_raw (void *db, const char *filename, } int -mutt_hcache_store(void *db, const char *filename, HEADER * header, +mutt_hcache_store(header_cache_t *h, const char *filename, HEADER * header, unsigned long uid_validity, size_t(*keylen) (const char *fn)) { - struct header_cache *h = db; char* data; int dlen; int ret; @@ -715,8 +711,8 @@ mutt_hcache_store(void *db, const char *filename, HEADER * header, if (!h) return -1; - data = mutt_hcache_dump(db, header, &dlen, uid_validity); - ret = mutt_hcache_store_raw (db, filename, data, dlen, keylen); + data = mutt_hcache_dump(h, header, &dlen, uid_validity); + ret = mutt_hcache_store_raw (h, filename, data, dlen, keylen); FREE(&data); @@ -724,10 +720,9 @@ mutt_hcache_store(void *db, const char *filename, HEADER * header, } int -mutt_hcache_store_raw (void* db, const char* filename, void* data, +mutt_hcache_store_raw (header_cache_t* h, const char* filename, void* data, size_t dlen, size_t(*keylen) (const char* fn)) { - struct header_cache *h = db; #ifndef HAVE_DB4 char path[_POSIX_PATH_MAX]; int ksize; @@ -775,7 +770,7 @@ mutt_hcache_store_raw (void* db, const char* filename, void* data, } #if HAVE_QDBM -void * +header_cache_t * mutt_hcache_open(const char *path, const char *folder) { struct header_cache *h = safe_calloc(1, sizeof (HEADER_CACHE)); @@ -809,10 +804,8 @@ mutt_hcache_open(const char *path, const char *folder) } void -mutt_hcache_close(void *db) +mutt_hcache_close(header_cache_t *h) { - struct header_cache *h = db; - if (!h) return; @@ -822,10 +815,9 @@ mutt_hcache_close(void *db) } int -mutt_hcache_delete(void *db, const char *filename, +mutt_hcache_delete(header_cache_t *h, const char *filename, size_t(*keylen) (const char *fn)) { - struct header_cache *h = db; char path[_POSIX_PATH_MAX]; int ksize; @@ -842,7 +834,7 @@ mutt_hcache_delete(void *db, const char *filename, #elif HAVE_GDBM -void * +header_cache_t * mutt_hcache_open(const char *path, const char *folder) { struct header_cache *h = safe_calloc(1, sizeof (HEADER_CACHE)); @@ -878,10 +870,8 @@ mutt_hcache_open(const char *path, const char *folder) } void -mutt_hcache_close(void *db) +mutt_hcache_close(header_cache_t *h) { - struct header_cache *h = db; - if (!h) return; @@ -891,11 +881,10 @@ mutt_hcache_close(void *db) } int -mutt_hcache_delete(void *db, const char *filename, +mutt_hcache_delete(header_cache_t *h, const char *filename, size_t(*keylen) (const char *fn)) { datum key; - struct header_cache *h = db; char path[_POSIX_PATH_MAX]; if (!h) @@ -928,7 +917,7 @@ mutt_hcache_dbt_empty_init(DBT * dbt) dbt->flags = 0; } -void * +header_cache_t * mutt_hcache_open(const char *path, const char *folder) { struct stat sb; @@ -1008,10 +997,8 @@ mutt_hcache_open(const char *path, const char *folder) } void -mutt_hcache_close(void *db) +mutt_hcache_close(header_cache_t *h) { - struct header_cache *h = db; - if (!h) return; @@ -1023,11 +1010,10 @@ mutt_hcache_close(void *db) } int -mutt_hcache_delete(void *db, const char *filename, +mutt_hcache_delete(header_cache_t *h, const char *filename, size_t(*keylen) (const char *fn)) { DBT key; - struct header_cache *h = db; if (!h) return -1; diff --git a/hcache.h b/hcache.h index 7f4e16eb5..e2c93cfc8 100644 --- a/hcache.h +++ b/hcache.h @@ -21,16 +21,19 @@ #ifndef _HCACHE_H_ #define _HCACHE_H_ 1 -void *mutt_hcache_open(const char *path, const char *folder); -void mutt_hcache_close(void *db); +struct header_cache; +typedef struct header_cache header_cache_t; + +header_cache_t *mutt_hcache_open(const char *path, const char *folder); +void mutt_hcache_close(header_cache_t *h); HEADER *mutt_hcache_restore(const unsigned char *d, HEADER **oh); -void *mutt_hcache_fetch(void *db, const char *filename, size_t (*keylen)(const char *fn)); -void *mutt_hcache_fetch_raw (void *db, const char *filename, +void *mutt_hcache_fetch(header_cache_t *h, const char *filename, size_t (*keylen)(const char *fn)); +void *mutt_hcache_fetch_raw (header_cache_t *h, const char *filename, size_t (*keylen)(const char *fn)); -int mutt_hcache_store(void *db, const char *filename, HEADER *h, +int mutt_hcache_store(header_cache_t *h, const char *filename, HEADER *header, unsigned long uid_validity, size_t (*keylen)(const char *fn)); -int mutt_hcache_store_raw (void* db, const char* filename, void* data, +int mutt_hcache_store_raw (header_cache_t *h, const char* filename, void* data, size_t dlen, size_t(*keylen) (const char* fn)); -int mutt_hcache_delete(void *db, const char *filename, size_t (*keylen)(const char *fn)); +int mutt_hcache_delete(header_cache_t *h, const char *filename, size_t (*keylen)(const char *fn)); #endif /* _HCACHE_H_ */ diff --git a/imap/imap.c b/imap/imap.c index f707f3d41..99b0c4704 100644 --- a/imap/imap.c +++ b/imap/imap.c @@ -242,7 +242,7 @@ void imap_expunge_mailbox (IMAP_DATA* idata) int i, cacheno; #if USE_HCACHE - void* hc; + header_cache_t *hc; char uidbuf[32]; hc = mutt_hcache_open (HeaderCache, idata->ctx->path); diff --git a/imap/message.c b/imap/message.c index 54ec25866..d89937617 100644 --- a/imap/message.c +++ b/imap/message.c @@ -71,7 +71,7 @@ int imap_read_headers (IMAP_DATA* idata, int msgbegin, int msgend) const char *want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE CONTENT-DESCRIPTION IN-REPLY-TO REPLY-TO LINES LIST-POST X-LABEL"; #if USE_HCACHE - void *hc = NULL; + header_cache_t *hc = NULL; unsigned int *uid_validity = NULL; unsigned int *uidnext = NULL; int evalhc = 0; diff --git a/mh.c b/mh.c index 3a4e44cd0..c05bdcd3e 100644 --- a/mh.c +++ b/mh.c @@ -641,8 +641,11 @@ static HEADER *maildir_parse_message (int magic, const char *fname, static int maildir_parse_entry (CONTEXT * ctx, struct maildir ***last, const char *subdir, const char *fname, - int *count, int is_old, ino_t inode, - void *hc) + int *count, int is_old, ino_t inode +#if USE_HCACHE + , header_cache_t *hc +#endif + ) { struct maildir *entry; HEADER *h = NULL; @@ -728,7 +731,9 @@ static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last, struct dirent *de; char buf[_POSIX_PATH_MAX]; int is_old = 0; - void *hc = NULL; +#ifdef USE_HCACHE + header_cache_t *hc = NULL; +#endif if (subdir) { @@ -764,7 +769,10 @@ static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last, #else 0 #endif - , hc); +#if USE_HCACHE + , hc +#endif + ); } closedir (dirp); @@ -935,7 +943,7 @@ void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) int count; #if USE_HCACHE - void *hc = NULL; + header_cache_t *hc = NULL; void *data; struct timeval *when = NULL; struct stat lastchanged; @@ -1488,7 +1496,7 @@ int mh_sync_mailbox (CONTEXT * ctx, int *index_hint) char path[_POSIX_PATH_MAX], tmp[_POSIX_PATH_MAX]; int i, j; #if USE_HCACHE - void *hc = NULL; + header_cache_t *hc = NULL; #endif /* USE_HCACHE */ if (ctx->magic == M_MH) -- 2.40.0