aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/imap/camel-imap-utils.c
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2000-12-19 03:17:17 +0800
committerDan Winship <danw@src.gnome.org>2000-12-19 03:17:17 +0800
commitbebb2583a8fc396f8e894f38471428c405164d37 (patch)
tree7cb797bf3ae561ce1b2095cb466f76cc765dd222 /camel/providers/imap/camel-imap-utils.c
parent984596da67125fdcbcfdc1bc1c4948adc66e2f54 (diff)
downloadgsoc2013-evolution-bebb2583a8fc396f8e894f38471428c405164d37.tar.gz
gsoc2013-evolution-bebb2583a8fc396f8e894f38471428c405164d37.tar.zst
gsoc2013-evolution-bebb2583a8fc396f8e894f38471428c405164d37.zip
Change the semantics of fmt: Now %S (capital S) means an IMAP "string",
* providers/imap/camel-imap-command.c (camel_imap_command): Change the semantics of fmt: Now %S (capital S) means an IMAP "string", (which can be sent as either a quoted string or a literal). If the server supports LITERAL+, these will be sent as extended literals (which don't require any special escaping). Otherwise they'll be sent as quoted strings (and it now properly deals with " or \ in the string). (imap_command_strdup_vprintf): Utility routine that does the real work for the functionality mentioned above. * providers/imap/camel-imap-utils.c (imap_quote_string): Turns a string into a proper IMAP "quoted string". * providers/imap/camel-imap-store.c: * providers/imap/camel-imap-folder.c: Use %S instead of "%s" where appropriate. svn path=/trunk/; revision=7070
Diffstat (limited to 'camel/providers/imap/camel-imap-utils.c')
-rw-r--r--camel/providers/imap/camel-imap-utils.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/camel/providers/imap/camel-imap-utils.c b/camel/providers/imap/camel-imap-utils.c
index 0b947e07da..05c9d01d5e 100644
--- a/camel/providers/imap/camel-imap-utils.c
+++ b/camel/providers/imap/camel-imap-utils.c
@@ -687,3 +687,38 @@ imap_parse_astring (char **str_p, int *len)
*str_p += *len;
return p;
}
+
+/**
+ * imap_quote_string:
+ * @str: the string to quote, which must not contain CR or LF
+ *
+ * Return value: an IMAP "quoted" corresponding to the string, which
+ * the caller must free.
+ **/
+char *
+imap_quote_string (const char *str)
+{
+ const char *p;
+ char *quoted, *q;
+ int len;
+
+ len = strlen (str);
+ p = str;
+ while ((p = strpbrk (p, "\"\\"))) {
+ len++;
+ p++;
+ }
+
+ quoted = q = g_malloc (len + 3);
+ *q++ = '"';
+ while ((p = strpbrk (str, "\"\\"))) {
+ memcpy (q, str, p - str);
+ q += p - str;
+ *q++ = '\\';
+ *q++ = *p++;
+ str = p;
+ }
+ sprintf (q, "%s\"", str);
+
+ return quoted;
+}