can't assume flag order when fetching a message. just search for the

first `{' to find the message size.
This commit is contained in:
Michael Elkins 2000-12-21 19:11:02 +00:00
parent b3d09b1723
commit bcd160efb2
2 changed files with 13 additions and 10 deletions

17
imap.c
View File

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

6
sync.c
View File

@ -150,9 +150,9 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags)
ret = imap_fetch_message (imap, cur->uid, fd); ret = imap_fetch_message (imap, cur->uid, fd);
close (fd); if (close (fd))
perror ("close");
if (!ret) else if (!ret)
{ {
p = strrchr (path, '/'); p = strrchr (path, '/');