summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2017-05-02 04:07:21 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2017-05-02 04:07:21 +0200
commitcd694c60169796b96f689546ca5a0e019cb7048b (patch)
tree178a2e9da600cbeb78e1d050972b6c4064cf9f53 /sys/src
parent20ba8815bc00bcf3548547e78d5d2a2e08de8cfd (diff)
upas/fs: handle partial fetches (imap server returning less messages than available)
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/cmd/upas/fs/imap.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/src/cmd/upas/fs/imap.c b/sys/src/cmd/upas/fs/imap.c
index 5deffab6f..fe9aea59f 100644
--- a/sys/src/cmd/upas/fs/imap.c
+++ b/sys/src/cmd/upas/fs/imap.c
@@ -918,15 +918,15 @@ imap4read(Imap *imap, Mailbox *mb, int doplumb, int *new)
imap->nuid = 0;
imap->muid = imap->nmsg;
imap->f = erealloc(imap->f, imap->nmsg*sizeof imap->f[0]);
- f = imap->f;
- n = imap->nmsg;
-
if(imap->nmsg > 0){
imap4cmd(imap, "uid fetch 1:* (uid rfc822.size internaldate)");
if(!isokay(s = imap4resp(imap)))
return s;
}
+ f = imap->f;
+ n = imap->nuid;
+ if(n < imap->nmsg) idprint(imap, "partial sync %d < %d\n", n, imap->nmsg);
qsort(f, n, sizeof f[0], (int(*)(void*, void*))fetchicmp);
nnew = ndel = 0;
ll = &mb->root->part;
@@ -943,7 +943,7 @@ imap4read(Imap *imap, Mailbox *mb, int doplumb, int *new)
if(c < 0){
/* new message */
idprint(imap, "new: %U (%U)\n", f[i].uid, m? m->imapuid: 0);
- if(f[i].sizes > Maxmsg){
+ if(f[i].sizes == 0 || f[i].sizes > Maxmsg){
idprint(imap, "skipping bad size: %lud\n", f[i].sizes);
i++;
continue;