Quellcode durchsuchen

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

Michael Elkins vor 24 Jahren
Ursprung
Commit
bcd160efb2
2 geänderte Dateien mit 13 neuen und 10 gelöschten Zeilen
  1. 10 7
      imap.c
  2. 3 3
      sync.c

+ 10 - 7
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 */

+ 3 - 3
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, '/');