diff options
author | Dan Winship <danw@src.gnome.org> | 2000-12-19 03:17:17 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2000-12-19 03:17:17 +0800 |
commit | bebb2583a8fc396f8e894f38471428c405164d37 (patch) | |
tree | 7cb797bf3ae561ce1b2095cb466f76cc765dd222 /camel/providers/imap/camel-imap-utils.c | |
parent | 984596da67125fdcbcfdc1bc1c4948adc66e2f54 (diff) | |
download | gsoc2013-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.c | 35 |
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; +} |