X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mx%2Fmh.c;h=5e889d6b97ba2bf2a9f7b0595961672556dddfb9;hp=89ae790ae812076b3de3ed7033ee283ccf8b3271;hb=fc9b0f39b53ad39e08c45d4c036af036f512755e;hpb=c819524d3e0eb3c982c43d4ee88c148b1141397a diff --git a/lib-mx/mh.c b/lib-mx/mh.c index 89ae790..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" @@ -163,7 +163,7 @@ static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) for (;;) { snprintf (path, _POSIX_PATH_MAX, "%s/.mutt-%s-%d-%d", - dest->path, NONULL(MCore.shorthost), (int) getpid (), Counter++); + dest->path, NONULL(mod_core.shorthost), (int) getpid (), Counter++); umask (Umask); if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) { if (errno != EEXIST) { @@ -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; @@ -656,7 +656,7 @@ static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last, /* FOO - really ignore the return value? */ maildir_parse_entry (ctx, last, subdir, de->d_name, count, is_old, -#if HAVE_DIRENT_D_INO +#ifdef HAVE_DIRENT_D_INO de->d_ino #else 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; } @@ -898,7 +898,7 @@ static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr for (;;) { snprintf (path, _POSIX_PATH_MAX, "%s/tmp/%s.%ld.%u_%d.%s%s", dest->path, subdir, (long) time (NULL), - (unsigned int) getpid (), Counter++, NONULL (MCore.shorthost), suffix); + (unsigned int) getpid (), Counter++, NONULL (mod_core.shorthost), suffix); umask (Umask); if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) { @@ -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. @@ -971,7 +988,7 @@ static int maildir_commit_message (MESSAGE * msg, CONTEXT * ctx, HEADER * hdr) for (;;) { snprintf (path, _POSIX_PATH_MAX, "%s/%ld.%u_%d.%s%s", subdir, (long) time (NULL), (unsigned int) getpid (), Counter++, - NONULL (MCore.shorthost), suffix); + NONULL (mod_core.shorthost), suffix); snprintf (full, _POSIX_PATH_MAX, "%s/%s", ctx->path, path); if (safe_rename (msg->path, full) == 0) { @@ -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,