isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit bcd160efb2b279e21d0e1046c380e49a9b4cd677
parent b3d09b17238584eb3ec8819ad2ce7b6452905b46
Author: Michael Elkins <me@mutt.org>
Date:   Thu, 21 Dec 2000 19:11:02 +0000

can't assume flag order when fetching a message.  just search for the
first `{' to find the message size.

Diffstat:
Mimap.c | 17++++++++++-------
Msync.c | 6+++---
2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/imap.c b/imap.c @@ -575,7 +575,7 @@ imap_fetch_message (imap_t * imap, unsigned int uid, int fd) size_t n; char buf[1024]; - send_server (imap->sock, "UID FETCH %d RFC822.PEEK", uid); + send_server (imap->sock, "UID FETCH %d (RFC822.PEEK)", uid); for (;;) { @@ -594,9 +594,10 @@ imap_fetch_message (imap_t * imap, unsigned int uid, int fd) next_arg (&cmd); /* * */ next_arg (&cmd); /* <msgno> */ next_arg (&cmd); /* FETCH */ - next_arg (&cmd); /* (RFC822 */ - arg = next_arg (&cmd); - if (*arg != '{') + + while ((arg = next_arg (&cmd)) && *arg != '{') + ; + if (!arg) { puts ("parse error getting size"); return -1; @@ -662,11 +663,13 @@ imap_fetch_message (imap_t * imap, unsigned int uid, int fd) puts ("wrong tag"); return -1; } - break; + arg = next_arg (&cmd); + if (!strcmp ("OK", arg)) + return 0; + return -1; } } - - return 0; + /* not reached */ } /* add flags to existing flags */ diff --git a/sync.c b/sync.c @@ -150,9 +150,9 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags) ret = imap_fetch_message (imap, cur->uid, fd); - close (fd); - - if (!ret) + if (close (fd)) + perror ("close"); + else if (!ret) { p = strrchr (path, '/');