X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mx%2Fmh.c;h=5e889d6b97ba2bf2a9f7b0595961672556dddfb9;hp=0d04ea9279551c53be77dd8194fd2497de01e004;hb=6b4475312b058043257fba4526817f60d9e26baf;hpb=9946738a6a1c27a5602a14d1afe2eea2389732b2 diff --git a/lib-mx/mh.c b/lib-mx/mh.c index 0d04ea9..5e889d6 100644 --- a/lib-mx/mh.c +++ b/lib-mx/mh.c @@ -16,7 +16,7 @@ #include #include -#include +#include #include "mutt.h" #include "mx.h" @@ -181,7 +181,7 @@ static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) p_delete(tgt); close (fd); unlink (path); - return (-1); + return -1; } return 0; @@ -730,7 +730,7 @@ static 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(ctx->path); #endif for (p = md, count = 0; p; p = p->next, count++) { @@ -803,7 +803,7 @@ static int _mh_read_dir (CONTEXT * ctx, const char *subdir) } static int mh_read_dir (CONTEXT* ctx) { - return (_mh_read_dir (ctx, NULL)); + return _mh_read_dir (ctx, NULL); } /* read a maildir style mailbox */ @@ -813,7 +813,7 @@ static int maildir_read_dir (CONTEXT * ctx) * of the main folder path from which to read messages */ if (_mh_read_dir (ctx, "new") == -1 || _mh_read_dir (ctx, "cur") == -1) - return (-1); + return -1; return 0; } @@ -916,13 +916,30 @@ static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr p_delete(&msg->path); close (fd); unlink (path); - return (-1); + return -1; } return 0; } +static int maildir_open_message(MESSAGE *msg, CONTEXT *ctx, int msgno) +{ + HEADER *cur = ctx->hdrs[msgno]; + char path[_POSIX_PATH_MAX]; + + snprintf (path, sizeof (path), "%s/%s", ctx->path, cur->path); + if ((msg->fp = fopen(path, "r")) == NULL + && errno == ENOENT && ctx->magic == M_MAILDIR) { + msg->fp = maildir_open_find_message (ctx->path, cur->path); + } + + if (msg->fp == NULL) { + mutt_perror (path); + return -1; + } + return 0; +} /* * Commit a message to a maildir folder. @@ -1027,7 +1044,7 @@ static int _mh_commit_message (MESSAGE * msg, CONTEXT * ctx, HEADER * hdr, if ((dirp = opendir (ctx->path)) == NULL) { mutt_perror (ctx->path); - return (-1); + return -1; } /* figure out what the next message number is */ @@ -1177,7 +1194,7 @@ static int maildir_sync_message (CONTEXT * ctx, int msgno) (h->env && (h->env->refs_changed || h->env->irt_changed))) { /* when doing attachment deletion/rethreading, fall back to the MH case. */ if (mh_rewrite_message (ctx, msgno) != 0) - return (-1); + return -1; } else { /* we just have to rename the file. */ @@ -1190,7 +1207,7 @@ static int maildir_sync_message (CONTEXT * ctx, int msgno) char *p; if ((p = strrchr (h->path, '/')) == NULL) { - return (-1); + return -1; } p++; m_strcpy(newpath, sizeof(newpath), p); @@ -1216,11 +1233,11 @@ static int maildir_sync_message (CONTEXT * ctx, int msgno) if (rename (oldpath, fullpath) != 0) { mutt_perror ("rename"); - return (-1); + return -1; } m_strreplace(&h->path, partpath); } - return (0); + return 0; } static int mh_sync_mailbox (CONTEXT * ctx, int unused __attribute__ ((unused)), int *index_hint) @@ -1229,7 +1246,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused __attribute__ ((unused)), int i, j; #ifdef USE_HCACHE - void *hc = NULL; + hcache_t *hc = NULL; #endif /* USE_HCACHE */ if (ctx->magic == M_MH) @@ -1242,7 +1259,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused __attribute__ ((unused)), #ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) - hc = mutt_hcache_open (HeaderCache, ctx->path); + hc = mutt_hcache_open(ctx->path); #endif /* USE_HCACHE */ for (i = 0; i < ctx->msgcount; i++) { @@ -1286,7 +1303,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused __attribute__ ((unused)), #ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) - mutt_hcache_close (hc); + mutt_hcache_close (&hc); #endif /* USE_HCACHE */ if (ctx->magic == M_MH) @@ -1311,7 +1328,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused __attribute__ ((unused)), err: #ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) - mutt_hcache_close (hc); + mutt_hcache_close (&hc); #endif /* USE_HCACHE */ return -1; } @@ -1812,6 +1829,7 @@ mx_t const maildir_mx = { access, maildir_read_dir, maildir_open_new_message, + maildir_open_message, NULL, maildir_check_mailbox, NULL, @@ -1827,6 +1845,7 @@ mx_t const mh_mx = { access, mh_read_dir, mh_open_new_message, + maildir_open_message, NULL, mh_check_mailbox, NULL,