aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/imap/camel-imap-command.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2001-11-09 08:41:09 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2001-11-09 08:41:09 +0800
commit64c19759bfa6820bd67b47d659ea7241f2efbd9b (patch)
tree6658ac64f2592da0df4bdb49838d1e7b83bd3943 /camel/providers/imap/camel-imap-command.c
parent4e96a9415be10f8184d8b3b2e47f879f78faeac7 (diff)
downloadgsoc2013-evolution-64c19759bfa6820bd67b47d659ea7241f2efbd9b.tar.gz
gsoc2013-evolution-64c19759bfa6820bd67b47d659ea7241f2efbd9b.tar.zst
gsoc2013-evolution-64c19759bfa6820bd67b47d659ea7241f2efbd9b.zip
Now takes a command-length argument so we can 1) avoid duping the command
2001-11-06 Jeffrey Stedfast <fejj@ximian.com> * providers/imap/camel-imap-command.c (camel_imap_command_continuation): Now takes a command-length argument so we can 1) avoid duping the command string yet again, yay. 2) we now don't have to worry about embedded nul-chars screwing us over (we still need to avoid allowing them into the string but at least now it won't mess us up). * providers/imap/camel-imap-folder.c (do_append): Instead of appending a nul char to the end of the byte array and then passing that off as if it were a string to camel_imap_command_continuation, instead pass the byte-array length since that function now takes a length argument. Yay. Also encode any 8bit parts to avoid the possibility of sending embedded nul chars to the imap server. * providers/imap/camel-imap-store.c (try_auth): Updated to pass a command-length argument to camel_imap_command_continuation(). svn path=/trunk/; revision=14637
Diffstat (limited to 'camel/providers/imap/camel-imap-command.c')
-rw-r--r--camel/providers/imap/camel-imap-command.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/camel/providers/imap/camel-imap-command.c b/camel/providers/imap/camel-imap-command.c
index 5dd4206841..5639741a42 100644
--- a/camel/providers/imap/camel-imap-command.c
+++ b/camel/providers/imap/camel-imap-command.c
@@ -198,6 +198,7 @@ imap_command_start (CamelImapStore *store, CamelFolder *folder,
* camel_imap_command_continuation:
* @store: the IMAP store
* @cmd: buffer containing the response/request data
+ * @cmdlen: command length
* @ex: a CamelException
*
* This method is for sending continuing responses to the IMAP server
@@ -211,10 +212,24 @@ imap_command_start (CamelImapStore *store, CamelFolder *folder,
**/
CamelImapResponse *
camel_imap_command_continuation (CamelImapStore *store, const char *cmd,
- CamelException *ex)
+ size_t cmdlen, CamelException *ex)
{
- if (camel_remote_store_send_string (CAMEL_REMOTE_STORE (store), ex,
- "%s\r\n", cmd) < 0) {
+ CamelStream *stream;
+
+ if (!camel_remote_store_connected (CAMEL_REMOTE_STORE (store), ex))
+ return NULL;
+
+ stream = CAMEL_REMOTE_STORE (store)->ostream;
+
+ if (camel_stream_write (stream, cmd, cmdlen) == -1 ||
+ camel_stream_write (stream, "\r\n", 2) == -1) {
+ if (errno == EINTR)
+ camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
+ _("Operation cancelled"));
+ else
+ camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+ g_strerror (errno));
+ camel_service_disconnect (CAMEL_SERVICE (store), FALSE, NULL);
CAMEL_IMAP_STORE_UNLOCK (store, command_lock);
return NULL;
}