Re: [evolution-patches] fix for tim's laptop getting "imap response ends too soon"



committed to both branches

On Fri, 2005-03-18 at 19:25 -0500, Jeffrey Stedfast wrote:
> well, I don't know if it actually fixes it or not but this code looked
> sceptical, so... maybe.
> 
> can't repro on tims laptop anymore and I'm tired and I want to go
> home... so here's a possible fix
> 
> text/plain attachment (imap-too-soon.patch)
> ? 70425.patch
> ? imap-too-soon.patch
> Index: ChangeLog
> ===================================================================
> RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/ChangeLog,v
> retrieving revision 1.13
> diff -u -r1.13 ChangeLog
> --- ChangeLog	15 Mar 2005 01:48:04 -0000	1.13
> +++ ChangeLog	19 Mar 2005 00:25:40 -0000
> @@ -1,3 +1,9 @@
> +2005-03-18  Jeffrey Stedfast  <fejj novell com>
> +
> +	* camel-imap-command.c (imap_read_untagged): Continue reading data
> +	until we've read all the data (camel_stream_read() makes no
> +	guarantee that it will read n bytes in a single call).
> +
>  2005-03-10  Jeffrey Stedfast  <fejj novell com>
>  
>  	* camel-imap-folder.c (imap_sync_online): READ-ONLY doesn't mean
> Index: camel-imap-command.c
> ===================================================================
> RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-command.c,v
> retrieving revision 1.67
> diff -u -r1.67 camel-imap-command.c
> --- camel-imap-command.c	4 Feb 2005 03:09:22 -0000	1.67
> +++ camel-imap-command.c	19 Mar 2005 00:25:40 -0000
> @@ -413,7 +413,7 @@
>  static char *
>  imap_read_untagged (CamelImapStore *store, char *line, CamelException *ex)
>  {
> -	int fulllen, ldigits, nread, i, sexp = 0;
> +	int fulllen, ldigits, nread, n, i, sexp = 0;
>  	unsigned int length;
>  	GPtrArray *data;
>  	GString *str;
> @@ -456,18 +456,24 @@
>  		/* Read the literal */
>  		str = g_string_sized_new (length + 2);
>  		str->str[0] = '\n';
> -		nread = camel_stream_read (store->istream, str->str + 1, length);
> -		if (nread == -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);
> -			g_string_free (str, TRUE);
> -			goto lose;
> -		}
> +		nread = 0;
> +		
> +		do {
> +			if ((n = camel_stream_read (store->istream, str->str + nread + 1, length - nread)) == -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);
> +				g_string_free (str, TRUE);
> +				goto lose;
> +			}
> +			
> +			nread += n;
> +		} while (n > 0 && nread < length);
> +		
>  		if (nread < length) {
>  			camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
>  					     _("Server response ended too soon."));
-- 
Jeffrey Stedfast
Evolution Hacker - Novell, Inc.
fejj ximian com  - www.novell.com

Attachment: smime.p7s
Description: S/MIME cryptographic signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]