X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mx%2Fhcache.c;h=01db5bdd955058ce44677f280228ebf6a08ce43a;hp=c3fca8dd71b248f72c277a7578c9570a6f9f6e1f;hb=07066d3ea19865d08c4a8fd98b5e87eeace810da;hpb=da04d632587a221112a0f065e4802e1ea5393e21 diff --git a/lib-mx/hcache.c b/lib-mx/hcache.c index c3fca8d..01db5bd 100644 --- a/lib-mx/hcache.c +++ b/lib-mx/hcache.c @@ -13,14 +13,13 @@ #ifdef USE_HCACHE -#if defined(HAVE_QDBM) -#include -#include -#include +#if defined(HAVE_TOKYOCABINET) +#include +#include #elif defined(HAVE_GDBM) #include #else -#error neither HAVE_QDBM nor HAVE_GDBM are set ?! +#error no supported DB library found ? #endif #include "charset.h" @@ -28,8 +27,8 @@ #include "hcache.h" struct hcache_t { -#if defined(HAVE_QDBM) - VILLA *db; +#if defined(HAVE_TOKYOCABINET) + TCHDB *db; #elif defined(HAVE_GDBM) GDBM_FILE db; #endif @@ -59,11 +58,7 @@ static int generate_crc32(void) crc = crc32(crc, mod_cset.charset, m_strlen(mod_cset.charset)); #endif crc = crc32(crc, "USE_POP", m_strlen("USE_POP")); - crc = crc32(crc, "MIXMASTER", m_strlen("MIXMASTER")); crc = crc32(crc, "USE_IMAP", m_strlen("USE_IMAP")); -#ifdef USE_NNTP - crc = crc32(crc, "USE_NNTP", m_strlen("USE_NNTP")); -#endif return crc; } @@ -277,12 +272,6 @@ static void dump_envelope(buffer_t *buf, ENVELOPE * e) dump_cstr(buf, e->x_label); dump_cstr(buf, e->list_post); -#ifdef USE_NNTP - dump_cstr(buf, e->newsgroups); - dump_cstr(buf, e->xref); - dump_cstr(buf, e->followup_to); -#endif - dump_list(buf, e->references); dump_list(buf, e->in_reply_to); dump_list(buf, e->userhdrs); @@ -314,16 +303,9 @@ static const void *restore_envelope(const char *d, ENVELOPE *e) d = restore_cstr(d, &e->x_label); d = restore_cstr(d, &e->list_post); -#ifdef USE_NNTP - d = restore_cstr(d, &e->newsgroups); - d = restore_cstr(d, &e->xref); - d = restore_cstr(d, &e->followup_to); -#endif - d = restore_list(d, &e->references); d = restore_list(d, &e->in_reply_to); d = restore_list(d, &e->userhdrs); - return d; } @@ -391,16 +373,14 @@ hcache_t *mutt_hcache_open(const char *folder) path = mutt_hcache_per_folder(mod_core.cachedir, folder); { -#if defined(HAVE_QDBM) - int flags = VL_OWRITER | VL_OCREAT; - if (option(OPTHCACHECOMPRESS)) - flags |= VL_OZCOMP; - - h->db = vlopen(path, flags, VL_CMPLEX); +#if defined(HAVE_TOKYOCABINET) + h->db = tchdbnew(); + if (!tchdbopen(h->db, path, HDBOWRITER | HDBOCREAT)) { + tchdbdel(h->db); + h->db = NULL; + } #elif defined(HAVE_GDBM) - int pagesize = atoi(HeaderCachePageSize) ?: 16384; - - h->db = gdbm_open((char *) path, pagesize, GDBM_WRCREAT, 00600, NULL); + h->db = gdbm_open((char *) path, 16384, GDBM_WRCREAT, 00600, NULL); #endif } @@ -416,8 +396,9 @@ void mutt_hcache_close(hcache_t **db) if (!*db) return; -#if defined(HAVE_QDBM) - vlclose((*db)->db); +#if defined(HAVE_TOKYOCABINET) + tchdbdel((*db)->db); + (*db)->db = NULL; #elif defined(HAVE_GDBM) gdbm_close((*db)->db); #endif @@ -438,11 +419,12 @@ void *mutt_hcache_fetch(hcache_t *db, const char *filename, snprintf(path, sizeof(path), "%s%s", db->folder, filename); { -#if defined(HAVE_QDBM) - int ksize = strlen(db->folder) + keylen(path + strlen(db->folder)); - data = vlget(db->db, path, ksize, NULL); + int ksize = keylen(path); +#if defined(HAVE_TOKYOCABINET) + int unused; + data = tchdbget(db->db, path, ksize, &unused); #elif defined(HAVE_GDBM) - datum k = { .dptr = path, .dsize = keylen(path) }; + datum k = { .dptr = path, .dsize = ksize }; data = gdbm_fetch(db->db, k).dtpr; #endif @@ -473,12 +455,11 @@ int mutt_hcache_store(hcache_t *db, const char *filename, HEADER *header, data = mutt_hcache_dump(db, header, uid_validity); { -#if defined(HAVE_QDBM) - int ksize = strlen(db->folder) + keylen(path + strlen(db->folder)); - - ret = vlput(db->db, path, ksize, data->data, data->len, VL_DOVER); + int ksize = keylen(path); +#if defined(HAVE_TOKYOCABINET) + ret = !!tchdbput(db->db, path, ksize, data->data, data->len) - 1; #elif defined(HAVE_GDBM) - datum k = { .dptr = path, .dsize = keylen(path) }; + datum k = { .dptr = path, .dsize = ksize }; datum v = { .dptr = data->data, .dsize = data->len }; ret = gdbm_store(db->db, k, v, GDBM_REPLACE); @@ -489,23 +470,23 @@ int mutt_hcache_store(hcache_t *db, const char *filename, HEADER *header, return ret; } -int mutt_hcache_delete(hcache_t *db, const char *filename, +void mutt_hcache_delete(hcache_t *db, const char *filename, ssize_t (*keylen)(const char *fn)) { char path[_POSIX_PATH_MAX]; if (!db) - return -1; + return; snprintf(path, sizeof(path), "%s%s", db->folder, filename); { -#if defined(HAVE_QDBM) - int ksize = strlen(db->folder) + keylen(path + strlen(db->folder)); - return vlout(db->db, path, ksize); + int ksize = keylen(path); +#if defined(HAVE_TOKYOCABINET) + tchdbout(db->db, path, ksize); #elif defined(HAVE_GDBM) - datum k = { .dptr = path, .dsize = keylen(path) }; - return gdbm_delete(db->db, k); + datum k = { .dptr = path, .dsize = ksize }; + gdbm_delete(db->db, k); #endif } }