aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Andree <matthias.andree@gmx.de>2006-05-15 16:11:06 +0000
committerMatthias Andree <matthias.andree@gmx.de>2006-05-15 16:11:06 +0000
commitbb1a6cc615ab21a113ba7ebe273cadcb30fcb3be (patch)
treec64a5d75ea55d41bd62472768c83659ecc517ac4
parentc2156b017a3106c09c17f5134d5ef3a9561bf424 (diff)
downloadfetchmail-bb1a6cc615ab21a113ba7ebe273cadcb30fcb3be.tar.gz
fetchmail-bb1a6cc615ab21a113ba7ebe273cadcb30fcb3be.tar.bz2
fetchmail-bb1a6cc615ab21a113ba7ebe273cadcb30fcb3be.zip
Make IMAP4 IDLE work on servers that do not update RECENT counts. Reported by Lars Tewes.
svn path=/branches/BRANCH_6-3/; revision=4842
-rw-r--r--NEWS2
-rw-r--r--imap.c8
2 files changed, 7 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 65ecf1d3..a5c07bb9 100644
--- a/NEWS
+++ b/NEWS
@@ -74,6 +74,8 @@ fetchmail 6.3.5 (not yet released):
* Provide INET6 to KAME/getnameinfo.c (only useful on IPv6-enabled systems that
lack getnameinfo, and there only visible in some Received: headers).
Found by Dan Fandrich.
+* Make IMAP4 IDLE work on servers that do not update RECENT counts.
+ Reported by Lars Tewes.
# CHANGES:
* Rename all fetchmail-internal lock_* functions to fm_lock_*. Obsoletes
diff --git a/imap.c b/imap.c
index 93b9729a..b7db68ff 100644
--- a/imap.c
+++ b/imap.c
@@ -679,7 +679,7 @@ static int imap_getrange(int sock,
int *countp, int *newp, int *bytes)
/* get range of messages to be fetched */
{
- int ok;
+ int ok, oldcount;
char buf[MSGBUFSIZE+1], *cp;
/* find out how many messages are waiting */
@@ -696,7 +696,9 @@ static int imap_getrange(int sock,
*
* this is a while loop because imap_idle() might return on other
* mailbox changes also */
- while (recentcount == 0 && do_idle) {
+ oldcount = count;
+ while (count <= oldcount && recentcount == 0 && do_idle) {
+ oldcount = count;
smtp_close(ctl, 1);
ok = imap_idle(sock);
if (ok)
@@ -706,7 +708,7 @@ static int imap_getrange(int sock,
}
}
/* if recentcount is 0, return no mail */
- if (recentcount == 0)
+ if (recentcount == 0 && count <= oldcount)
count = 0;
if (outlevel >= O_DEBUG)
report(stdout, ngettext("%d message waiting after re-poll\n",