diff options
author | Jeffrey Stedfast <fejj@helixcode.com> | 2000-07-28 07:11:11 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2000-07-28 07:11:11 +0800 |
commit | 2c5a9bc2278c0922807316a0a63d84cd0333f545 (patch) | |
tree | e5a46c5e39fb278a3cb2b49eb00fc0f55e8ad8ce /camel/providers/imap/camel-imap-store.c | |
parent | 1bf9e439824ee6a2aa721aa05859200da89cbc9b (diff) | |
download | gsoc2013-evolution-2c5a9bc2278c0922807316a0a63d84cd0333f545.tar gsoc2013-evolution-2c5a9bc2278c0922807316a0a63d84cd0333f545.tar.gz gsoc2013-evolution-2c5a9bc2278c0922807316a0a63d84cd0333f545.tar.bz2 gsoc2013-evolution-2c5a9bc2278c0922807316a0a63d84cd0333f545.tar.lz gsoc2013-evolution-2c5a9bc2278c0922807316a0a63d84cd0333f545.tar.xz gsoc2013-evolution-2c5a9bc2278c0922807316a0a63d84cd0333f545.tar.zst gsoc2013-evolution-2c5a9bc2278c0922807316a0a63d84cd0333f545.zip |
Added camel-imap-utils.[c,h]
2000-07-27 Jeffrey Stedfast <fejj@helixcode.com>
* providers/imap/Makefile.am: Added camel-imap-utils.[c,h]
* providers/imap/camel-imap-utils.[c,h]: Utilities for parsing
server responses for use in both camel-imap-store.c and
camel-imap-folder.c
* providers/imap/camel-imap-folder.c (imap_get_summary_internal):
Free all the pointers in the headers array.
(imap_get_subfolder_names_internal): Updated to use
imap_parse_list_response
(imap_parse_subfolder_list): Removed in favor of
imap_parse_list_response
* providers/imap/camel-imap-store.c (camel_imap_command_extended):
Free all the pointers in the data array.
(imap_connect): Updated to use imap_parse_list_response and fixed
a leak
(folder_is_selectable): Updated.
svn path=/trunk/; revision=4400
Diffstat (limited to 'camel/providers/imap/camel-imap-store.c')
-rw-r--r-- | camel/providers/imap/camel-imap-store.c | 70 |
1 files changed, 21 insertions, 49 deletions
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c index a729d1923a..29baae5b48 100644 --- a/camel/providers/imap/camel-imap-store.c +++ b/camel/providers/imap/camel-imap-store.c @@ -39,6 +39,7 @@ #include "camel-imap-store.h" #include "camel-imap-folder.h" +#include "camel-imap-utils.h" #include "camel-folder.h" #include "camel-exception.h" #include "camel-session.h" @@ -230,41 +231,6 @@ get_name (CamelService *service, gboolean brief) } static gboolean -parse_list_response (gchar *buf, gchar **flags, gchar **sep) -{ - gchar *ptr, *eptr; - - *flags = NULL; - *sep = NULL; - - if (strncasecmp (buf, "* LIST", 6)) - return FALSE; - - ptr = strstr (buf + 6, "("); - if (!ptr) - return FALSE; - - ptr++; - eptr = strstr (ptr, ")"); - if (!eptr) - return FALSE; - *flags = g_strndup (ptr, (gint)(eptr - ptr)); - - ptr = strstr (eptr, "\""); - if (!ptr) - return FALSE; - - ptr++; - eptr = strstr (ptr, "\""); - if (!eptr) - return FALSE; - - *sep = g_strndup (ptr, (gint)(eptr - ptr)); - - return TRUE; -} - -static gboolean imap_connect (CamelService *service, CamelException *ex) { CamelImapStore *store = CAMEL_IMAP_STORE (service); @@ -408,20 +374,22 @@ imap_connect (CamelService *service, CamelException *ex) status != CAMEL_IMAP_FAIL && result ? result : "Unknown error"); } else { - if (!strncasecmp (result, "* LIST", 6)) { - char *flags, *sep; - - if (parse_list_response (result, &flags, &sep)) { - if (*sep) { - g_free (store->dir_sep); - store->dir_sep = g_strdup (sep); - } - - g_free (sep); + char *flags, *sep, *folder; + + if (imap_parse_list_response (result, "", &flags, &sep, &folder)) { + if (*sep) { + g_free (store->dir_sep); + store->dir_sep = g_strdup (sep); } } + + g_free (flags); + g_free (sep); + g_free (folder); } + g_free (result); + /* Lets add a timeout so that we can hopefully prevent getting disconnected */ store->timeout_id = gtk_timeout_add (600000, imap_noop, store); @@ -563,7 +531,7 @@ imap_create (CamelFolder *folder, CamelException *ex) static gboolean folder_is_selectable (CamelStore *store, const char *folder_path) { - char *result, *flags, *sep; + char *result, *flags, *sep, *folder; int status; if (!strcmp (folder_path, "INBOX")) @@ -576,17 +544,19 @@ folder_is_selectable (CamelStore *store, const char *folder_path) return FALSE; } - if (parse_list_response (result, &flags, &sep)) { + if (imap_parse_list_response (result, "", &flags, &sep, &folder)) { gboolean retval; retval = !e_strstrcase (flags, "NoSelect"); g_free (flags); g_free (sep); + g_free (folder); return retval; } g_free (flags); g_free (sep); + g_free (folder); return FALSE; } @@ -824,6 +794,7 @@ camel_imap_command_extended (CamelImapStore *store, CamelFolder *folder, char ** gchar *cmdid, *cmdbuf, *respbuf; GPtrArray *data; va_list app; + int i; #if 0 /* First make sure we're connected... */ @@ -948,7 +919,6 @@ camel_imap_command_extended (CamelImapStore *store, CamelFolder *folder, char ** if (status == CAMEL_IMAP_OK) { char *p; - int i; *ret = g_malloc0 (len + 1); @@ -970,11 +940,13 @@ camel_imap_command_extended (CamelImapStore *store, CamelFolder *folder, char ** *ret = NULL; } + for (i = 0; i < data->len; i++) + g_free (data->pdata[i]); g_ptr_array_free (data, TRUE); if (folder && recent > 0) { CamelException *ex; - + ex = camel_exception_new (); camel_imap_folder_changed (folder, recent, ex); camel_exception_free (ex); |