Hi, the attached patch is supposed to set atime=mtime-1 for mbox and mmdf folders if they contain new mail upon sync as we do for other folder types. This only works if $check_mbox_size is unset.
See also ticket #1362. I think the patch is okay. But I don't know why the old code does restore atime+mtime for the folder (and so I removed the update). Anyone? Rocco diff --git a/mbox.c b/mbox.c --- a/mbox.c +++ b/mbox.c @@ -679,6 +679,26 @@ int mbox_check_mailbox (CONTEXT *ctx, in return (-1); } +/* if mailbox has at least 1 new message, sets mtime > atime of mailbox + * so buffy check reports new mail */ +static void reset_atime (CONTEXT *ctx) +{ + struct utimbuf utimebuf; + int i; + time_t now; + + for (i = 0; i < ctx->msgcount; i++) + { + if (!ctx->hdrs[i]->deleted && !ctx->hdrs[i]->read && !ctx->hdrs[i]->old) + { + utimebuf.actime = now - 1; + utimebuf.modtime = now; + utime (ctx->path, &utimebuf); + return; + } + } +} + /* return values: * 0 success * -1 failure @@ -692,8 +712,6 @@ int mbox_sync_mailbox (CONTEXT *ctx, int int need_sort = 0; /* flag to resort mailbox if new mail arrives */ int first = -1; /* first message to be written */ LOFF_T offset; /* location in mailbox to write changed messages */ - struct stat statbuf; - struct utimbuf utimebuf; struct m_update_t *newOffset = NULL; struct m_update_t *oldOffset = NULL; FILE *fp = NULL; @@ -885,15 +903,6 @@ int mbox_sync_mailbox (CONTEXT *ctx, int } fp = NULL; - /* Save the state of this folder. */ - if (stat (ctx->path, &statbuf) == -1) - { - mutt_perror (ctx->path); - mutt_sleep (5); - unlink (tempfile); - goto bail; - } - if ((fp = fopen (tempfile, "r")) == NULL) { mutt_unblock_signals (); @@ -962,11 +971,6 @@ int mbox_sync_mailbox (CONTEXT *ctx, int return (-1); } - /* Restore the previous access/modification times */ - utimebuf.actime = statbuf.st_atime; - utimebuf.modtime = statbuf.st_mtime; - utime (ctx->path, &utimebuf); - /* reopen the mailbox in read-only mode */ if ((ctx->fp = fopen (ctx->path, "r")) == NULL) { @@ -993,6 +997,11 @@ int mbox_sync_mailbox (CONTEXT *ctx, int unlink (tempfile); /* remove partial copy of the mailbox */ mutt_unblock_signals (); + /* if mailbox has new mail, mangle atime+mtime to make buffy check + * report new mail for it */ + if (!option (OPTCHECKMBOXSIZE)) + reset_atime (ctx); + return (0); /* signal success */ bail: /* Come here in case of disaster */