1
upstream test patch to fix the atime issue
2
(See #533439 and upstream #3271, #1372)
8
/* if mailbox has at least 1 new message, sets mtime > atime of mailbox
9
* so buffy check reports new mail */
10
-static void reset_atime (CONTEXT *ctx)
11
+void mbox_reset_atime (CONTEXT *ctx, struct stat *st)
13
struct utimbuf utimebuf;
15
- time_t now = time (NULL);
19
- for (i = 0; i < ctx->msgcount; i++)
22
- if (!ctx->hdrs[i]->deleted && !ctx->hdrs[i]->read && !ctx->hdrs[i]->old)
24
- utimebuf.actime = now - 1;
25
- utimebuf.modtime = now;
26
- utime (ctx->path, &utimebuf);
27
+ if (stat (ctx->path, &_st) < 0)
33
+ utimebuf.actime = st->st_atime;
34
+ utimebuf.modtime = st->st_mtime;
36
+ for (i = 0; !found && i < ctx->msgcount; i++)
37
+ if (!ctx->hdrs[i]->deleted && !ctx->hdrs[i]->read && !ctx->hdrs[i]->old)
40
+ if (found && utimebuf.actime >= utimebuf.modtime)
41
+ utimebuf.actime = utimebuf.modtime - 1;
43
+ utime (ctx->path, &utimebuf);
48
int need_sort = 0; /* flag to resort mailbox if new mail arrives */
49
int first = -1; /* first message to be written */
50
LOFF_T offset; /* location in mailbox to write changed messages */
51
+ struct stat statbuf;
52
struct m_update_t *newOffset = NULL;
53
struct m_update_t *oldOffset = NULL;
59
+ /* Save the state of this folder. */
60
+ if (stat (ctx->path, &statbuf) == -1)
62
+ mutt_perror (ctx->path);
68
if ((fp = fopen (tempfile, "r")) == NULL)
70
mutt_unblock_signals ();
75
+ /* Restore the previous access/modification times */
76
+ mbox_reset_atime (ctx, &statbuf);
78
/* reopen the mailbox in read-only mode */
79
if ((ctx->fp = fopen (ctx->path, "r")) == NULL)
81
@@ -1002,11 +1023,6 @@
82
unlink (tempfile); /* remove partial copy of the mailbox */
83
mutt_unblock_signals ();
85
- /* if mailbox has new mail, mangle atime+mtime to make buffy check
86
- * report new mail for it */
87
- if (!option (OPTCHECKMBOXSIZE))
90
return (0); /* signal success */
92
bail: /* Come here in case of disaster */
98
mutt_message _("Mailbox is unchanged.");
99
+ if (ctx->magic == M_MBOX || ctx->magic == M_MMDF)
100
+ mbox_reset_atime (ctx, NULL);
101
mx_fastclose_mailbox (ctx);
107
int mmdf_parse_mailbox (CONTEXT *);
108
void mbox_unlock_mailbox (CONTEXT *);
109
int mbox_check_empty (const char *);
110
+void mbox_reset_atime (CONTEXT *, struct stat *);
112
int mh_read_dir (CONTEXT *, const char *);
113
int mh_sync_mailbox (CONTEXT *, int *);