X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mx%2Fmh.c;h=5e889d6b97ba2bf2a9f7b0595961672556dddfb9;hp=f60cfe58b9060d456db213c106ed02c7871945b0;hb=fc9b0f39b53ad39e08c45d4c036af036f512755e;hpb=da04d632587a221112a0f065e4802e1ea5393e21 diff --git a/lib-mx/mh.c b/lib-mx/mh.c index f60cfe5..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; @@ -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) @@ -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,