diff options
Diffstat (limited to 'camel/providers/imap/camel-imap-command.c')
-rw-r--r-- | camel/providers/imap/camel-imap-command.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/camel/providers/imap/camel-imap-command.c b/camel/providers/imap/camel-imap-command.c index 428ecf565d..4c84b47fbb 100644 --- a/camel/providers/imap/camel-imap-command.c +++ b/camel/providers/imap/camel-imap-command.c @@ -98,7 +98,7 @@ camel_imap_command (CamelImapStore *store, CamelFolder *folder, } store->current_folder = folder; camel_object_ref (CAMEL_OBJECT (folder)); - cmd = imap_command_strdup_printf (store, "SELECT %S", + cmd = imap_command_strdup_printf (store, "SELECT %F", folder->full_name); } @@ -127,11 +127,15 @@ camel_imap_command (CamelImapStore *store, CamelFolder *folder, * @fmt can include the following %-escapes ONLY: * %s, %d, %%: as with printf * %S: an IMAP "string" (quoted string or literal) + * %F: an IMAP folder name * * %S strings will be passed as literals if the server supports LITERAL+ * and quoted strings otherwise. (%S does not support strings that * contain newlines.) * + * %F will have the imap store's namespace prepended and then be processed + * like %S. + * * On success, the store's command_lock will be locked. It will be * freed when %CAMEL_IMAP_RESPONSE_TAGGED or %CAMEL_IMAP_RESPONSE_ERROR * is returned from camel_imap_command_response(). (The lock is @@ -621,7 +625,6 @@ camel_imap_response_extract_continuation (CamelImapStore *store, return NULL; } - static char * imap_command_strdup_vprintf (CamelImapStore *store, const char *fmt, va_list ap) @@ -629,7 +632,7 @@ imap_command_strdup_vprintf (CamelImapStore *store, const char *fmt, GPtrArray *args; const char *p, *start; char *out, *op, *string; - int num, len, i; + int num, len, i, arglen; args = g_ptr_array_new (); @@ -657,12 +660,16 @@ imap_command_strdup_vprintf (CamelImapStore *store, const char *fmt, break; case 'S': + case 'F': string = va_arg (ap, char *); + arglen = strlen (string); + if (*p == 'F') + arglen += strlen (store->namespace) + 1; g_ptr_array_add (args, string); if (store->capabilities & IMAP_CAPABILITY_LITERALPLUS) - len += strlen (string) + 15; + len += arglen + 15; else - len += strlen (string) * 2; + len += arglen * 2; start = p + 1; break; @@ -704,7 +711,10 @@ imap_command_strdup_vprintf (CamelImapStore *store, const char *fmt, break; case 'S': + case 'F': string = args->pdata[i++]; + if (*p == 'F') + string = imap_namespace_concat (store, string); if (store->capabilities & IMAP_CAPABILITY_LITERALPLUS) { op += sprintf (op, "{%d+}\r\n%s", strlen (string), string); @@ -713,6 +723,8 @@ imap_command_strdup_vprintf (CamelImapStore *store, const char *fmt, op += sprintf (op, "%s", quoted); g_free (quoted); } + if (*p == 'F') + g_free (string); break; default: |