2005-06-14 [colin] 1.9.11cvs65
authorColin Leroy <colin@colino.net>
Tue, 14 Jun 2005 03:28:41 +0000 (03:28 +0000)
committerColin Leroy <colin@colino.net>
Tue, 14 Jun 2005 03:28:41 +0000 (03:28 +0000)
* src/imap.c
Various little fixes, mainly on error paths

ChangeLog-gtk2.claws
PATCHSETS
configure.ac
src/imap.c

index a3b466de2c71f54ae27002904154d093ed3b20fd..396c72fa31a58a0b88583851d6cfc9ac1e7d6cca 100644 (file)
@@ -1,3 +1,8 @@
+2005-06-14 [colin]     1.9.11cvs65
+
+       * src/imap.c
+               Various little fixes, mainly on error paths
+
 2005-06-13 [colin]     1.9.11cvs64
 
        * matcher.c
index ab5e4d289950ce41d7aa33ef01f7c9e49b999cbd..b0adf733dcd4fde78c53d454be35bffcde0315ea 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.179.2.29 -r 1.179.2.30 src/imap.c;  cvs diff -u -r 1.395.2.78 -r 1.395.2.79 src/summaryview.c;  cvs diff -u -r 1.213.2.30 -r 1.213.2.31 src/folder.c;  ) > 1.9.11cvs62.patchset
 ( cvs diff -u -r 1.213.2.31 -r 1.213.2.32 src/folder.c;  ) > 1.9.11cvs63.patchset
 ( cvs diff -u -r 1.213.2.32 -r 1.213.2.33 src/folder.c;  cvs diff -u -r 1.87.2.11 -r 1.87.2.12 src/folder.h;  cvs diff -u -r 1.3.2.4 -r 1.3.2.5 src/folderutils.c;  cvs diff -u -r 1.179.2.30 -r 1.179.2.31 src/imap.c;  cvs diff -u -r 1.75.2.6 -r 1.75.2.7 src/matcher.c;  cvs diff -u -r 1.150.2.27 -r 1.150.2.28 src/procmsg.c;  cvs diff -u -r 1.60.2.11 -r 1.60.2.12 src/procmsg.h;  cvs diff -u -r 1.395.2.79 -r 1.395.2.80 src/summaryview.c;  ) > 1.9.11cvs64.patchset
+( cvs diff -u -r 1.179.2.31 -r 1.179.2.32 src/imap.c;  ) > 1.9.11cvs65.patchset
index 34e88b8dcb3ba792d2096d0e493729f5fcdfa7dc..628858c8ed516e3a30ac2d1f9021f50819a5ab60 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=11
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=64
+EXTRA_VERSION=65
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 1e7ad81ba49ce1aef3062ec7bf8a659d7a68e263..b34ab4e18df04ed9ebf630782ab6bfc1119b116e 100644 (file)
@@ -964,16 +964,20 @@ static guint get_size_with_lfs(MsgInfo *info)
        FILE *fp = NULL;
        guint cnt = 0;
        gchar buf[4096];
+       
        if (info == NULL)
                return -1;
+       
        fp = procmsg_open_message(info);
        if (!fp)
                return -1;
+       
        while (fgets(buf, sizeof (buf), fp) != NULL) {
                cnt += strlen(buf);
                if (!strstr(buf, "\r") && strstr(buf, "\n"))
                        cnt++;
        }
+       
        fclose(fp);
        return cnt;
 }
@@ -998,6 +1002,9 @@ static gchar *imap_fetch_msg_full(Folder *folder, FolderItem *item, gint uid,
        g_free(path);
 
        if (is_file_exist(filename)) {
+               /* see whether the local file represents the whole message
+                * or not. As the IMAP server reports size with \r chars,
+                * we have to update the local file (UNIX \n only) size */
                MsgInfo *msginfo = imap_parse_msg(filename, item);
                MsgInfo *cached = msgcache_get_msg(item->cache,uid);
                guint have_size = get_size_with_lfs(msginfo);
@@ -2019,7 +2026,7 @@ static void *imap_get_uncached_messages_thread(void *data)
        gchar *tmp;
        GSList *newlist = NULL;
        GSList *llast = NULL;
-       GString *str;
+       GString *str = NULL;
        MsgInfo *msginfo;
        GSList *seq_list, *cur;
        IMAPSet imapset;
@@ -2046,6 +2053,7 @@ static void *imap_get_uncached_messages_thread(void *data)
                        if ((tmp =sock_getline(SESSION(session)->sock)) == NULL) {
                                log_warning(_("error occurred while getting envelope.\n"));
                                g_string_free(str, TRUE);
+                               str = NULL;
                                break;
                        }
                        strretchomp(tmp);
@@ -2084,8 +2092,8 @@ static void *imap_get_uncached_messages_thread(void *data)
                                llast = llast->next;
                        }
                }
-
-               g_string_free(str, TRUE);
+               if (str)
+                       g_string_free(str, TRUE);
        }
        imap_seq_set_free(seq_list);
        
@@ -2538,8 +2546,10 @@ static gchar *imap_get_header(SockInfo *sock, gchar *cur_pos, gchar **headers,
        cur_pos = str->str;
 
        do {
-               if ((nextline = sock_getline(sock)) == NULL)
+               if ((nextline = sock_getline(sock)) == NULL) {
+                       *headers = NULL;
                        return cur_pos;
+               }
                block_len += strlen(nextline);
                g_string_append(str, nextline);
                cur_pos = str->str;
@@ -2995,7 +3005,7 @@ static gint imap_cmd_login(IMAPSession *session,
                return IMAP_ERROR;
        }
        g_free(ans);
-       imap_gen_recv_with_block(session, &ans, TRUE);
+       ok = imap_gen_recv_with_block(session, &ans, TRUE);
        if (ok != IMAP_SUCCESS || ans[0] != '+' || ans[1] != ' ') {
                g_free(ans);
                return IMAP_ERROR;