From: Damien Riegel Date: Sat, 18 Jun 2016 20:36:25 +0000 (-0700) Subject: add commit_msg to struct mx_ops X-Git-Tag: neomutt-20160822~104 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6880a9b82edcfc802db12c659e70eade6dd22048;p=neomutt add commit_msg to struct mx_ops --- diff --git a/imap/imap.c b/imap/imap.c index ef9c46855..009c222c6 100644 --- a/imap/imap.c +++ b/imap/imap.c @@ -2076,6 +2076,7 @@ struct mx_ops mx_imap_ops = { .close = imap_close_mailbox, .open_msg = imap_fetch_message, .close_msg = imap_close_message, + .commit_msg = imap_commit_message, .open_new_msg = imap_open_new_message, .check = imap_check_mailbox_reopen, }; diff --git a/imap/imap.h b/imap/imap.h index 5dcb2d686..ff0a1ba01 100644 --- a/imap/imap.h +++ b/imap/imap.h @@ -58,7 +58,6 @@ int imap_mailbox_rename (const char* mailbox); /* message.c */ int imap_append_message (CONTEXT* ctx, MESSAGE* msg); int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete); -int imap_commit_message (CONTEXT *ctx, MESSAGE *msg); /* socket.c */ void imap_logout_all (void); diff --git a/imap/imap_private.h b/imap/imap_private.h index 8cd610adf..67fea27e4 100644 --- a/imap/imap_private.h +++ b/imap/imap_private.h @@ -270,6 +270,7 @@ int imap_cache_clean (IMAP_DATA* idata); int imap_fetch_message (CONTEXT *ctx, MESSAGE *msg, int msgno); int imap_close_message (CONTEXT *ctx, MESSAGE *msg); +int imap_commit_message (CONTEXT *ctx, MESSAGE *msg); /* util.c */ #ifdef USE_HCACHE diff --git a/mbox.c b/mbox.c index 8f43b109f..12d423641 100644 --- a/mbox.c +++ b/mbox.c @@ -461,7 +461,7 @@ static int mbox_close_message (CONTEXT *ctx, MESSAGE *msg) return 0; } -int mbox_commit_message (CONTEXT *ctx, MESSAGE *msg) +static int mbox_commit_message (CONTEXT *ctx, MESSAGE *msg) { int r = fputc ('\n', msg->fp); @@ -471,7 +471,7 @@ int mbox_commit_message (CONTEXT *ctx, MESSAGE *msg) return 0; } -int mmdf_commit_message (CONTEXT *ctx, MESSAGE *msg) +static int mmdf_commit_message (CONTEXT *ctx, MESSAGE *msg) { int r = fputs (MMDF_SEP, msg->fp); @@ -1310,6 +1310,7 @@ struct mx_ops mx_mbox_ops = { .close = mbox_close_mailbox, .open_msg = mbox_open_message, .close_msg = mbox_close_message, + .commit_msg = mbox_commit_message, .open_new_msg = mbox_open_new_message, .check = mbox_check_mailbox, }; @@ -1319,6 +1320,7 @@ struct mx_ops mx_mmdf_ops = { .close = mbox_close_mailbox, .open_msg = mbox_open_message, .close_msg = mbox_close_message, + .commit_msg = mmdf_commit_message, .open_new_msg = mbox_open_new_message, .check = mbox_check_mailbox, }; diff --git a/mh.c b/mh.c index 6038132fd..3898f259a 100644 --- a/mh.c +++ b/mh.c @@ -1539,7 +1539,7 @@ static int _maildir_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr) } } -int maildir_commit_message (CONTEXT * ctx, MESSAGE * msg) +static int maildir_commit_message (CONTEXT * ctx, MESSAGE * msg) { return _maildir_commit_message (ctx, msg, NULL); } @@ -1625,7 +1625,7 @@ static int _mh_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr, return 0; } -int mh_commit_message (CONTEXT * ctx, MESSAGE * msg) +static int mh_commit_message (CONTEXT * ctx, MESSAGE * msg) { return _mh_commit_message (ctx, msg, NULL, 1); } @@ -2456,6 +2456,7 @@ struct mx_ops mx_maildir_ops = { .close = mh_close_mailbox, .open_msg = maildir_open_message, .close_msg = mh_close_message, + .commit_msg = maildir_commit_message, .open_new_msg = maildir_open_new_message, .check = maildir_check_mailbox, }; @@ -2465,6 +2466,7 @@ struct mx_ops mx_mh_ops = { .close = mh_close_mailbox, .open_msg = mh_open_message, .close_msg = mh_close_message, + .commit_msg = mh_commit_message, .open_new_msg = mh_open_new_message, .check = mh_check_mailbox, }; diff --git a/mutt.h b/mutt.h index 8b2d9eae3..69abdd3b0 100644 --- a/mutt.h +++ b/mutt.h @@ -896,6 +896,7 @@ struct mx_ops int (*check) (struct _context *ctx, int *index_hint); int (*open_msg) (struct _context *, struct _message *, int msgno); int (*close_msg) (struct _context *, struct _message *); + int (*commit_msg) (struct _context *, struct _message *); int (*open_new_msg) (struct _message *, struct _context *, HEADER *); }; diff --git a/mx.c b/mx.c index 822cb701e..1b7497a81 100644 --- a/mx.c +++ b/mx.c @@ -1329,8 +1329,12 @@ MESSAGE *mx_open_message (CONTEXT *ctx, int msgno) int mx_commit_message (MESSAGE *msg, CONTEXT *ctx) { + struct mx_ops *ops = mx_get_ops (ctx->magic); int r = 0; + if (!ops || !ops->commit_msg) + return -1; + if (!(msg->write && ctx->append)) { dprint (1, (debugfile, "mx_commit_message(): msg->write = %d, ctx->append = %d\n", @@ -1338,40 +1342,7 @@ int mx_commit_message (MESSAGE *msg, CONTEXT *ctx) return -1; } - switch (ctx->magic) - { - case MUTT_MMDF: - { - r = mmdf_commit_message (ctx, msg); - break; - } - - case MUTT_MBOX: - { - r = mbox_commit_message (ctx, msg); - break; - } - -#ifdef USE_IMAP - case MUTT_IMAP: - { - r = imap_commit_message (ctx, msg); - break; - } -#endif - - case MUTT_MAILDIR: - { - r = maildir_commit_message (ctx, msg); - break; - } - - case MUTT_MH: - { - r = mh_commit_message (ctx, msg); - break; - } - } + r = ops->commit_msg (ctx, msg); if (r == 0 && (ctx->magic == MUTT_MBOX || ctx->magic == MUTT_MMDF) && (fflush (msg->fp) == EOF || fsync (fileno (msg->fp)) == -1)) diff --git a/mx.h b/mx.h index f9bbc7adb..ba9a78f9a 100644 --- a/mx.h +++ b/mx.h @@ -51,17 +51,12 @@ int mmdf_parse_mailbox (CONTEXT *); void mbox_unlock_mailbox (CONTEXT *); int mbox_check_empty (const char *); void mbox_reset_atime (CONTEXT *, struct stat *); -int mbox_commit_message (CONTEXT *ctx, MESSAGE *msg); -int mmdf_commit_message (CONTEXT *ctx, MESSAGE *msg); int mh_sync_mailbox (CONTEXT *, int *); int mh_check_empty (const char *); int maildir_check_empty (const char *); -int maildir_commit_message (CONTEXT *, MESSAGE *); -int mh_commit_message (CONTEXT *, MESSAGE *); - FILE *maildir_open_find_message (const char *, const char *); int mbox_strict_cmp_headers (const HEADER *, const HEADER *);