Re: A stupid question about libtinymail
- From: Philip Van Hoof <spam pvanhoof be>
- To: Milko Krachounov <milko 3mhz net>
- Cc: tinymail-devel-list gnome org
- Subject: Re: A stupid question about libtinymail
- Date: Tue, 11 Dec 2007 19:56:31 +0100
Committed, thanks for your contribution Milko!
On Tue, 2007-12-11 at 19:18 +0200, Milko Krachounov wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> OK, I've discovered two more things and wrote a patch.
>
> It seems that while incorrect, the old code worked just fine (to some
> extent), due to the fact that gtk_text_buffer_get_text generously
> returned the whole string up to the end, because of the negative offset.
> :) Which caused me some a headache, while trying to figure out why both
> with and without my correction, it gave the same incorrect result. :)
>
> It turned out that there is another problem. As byte and character
> offsets do not match, it skipped characters when the text contained
> non-latin UTF-8 characters.
>
> I include a patch here. I did work on my tests, but I can't guarantee
> its absolute correctness. :) It's a bit inefficient, but it works, and
> so far I prefer this, to a memory stream with a copy of the whole text
> inside it.
>
> Patch SHA1 sum:
> 48e176b0f660dadf0a438a8283dc613269649041
> gtk-text-buffer-stream-read-fix.patch
>
> P.S. It is against 0.0.5, but it should apply to the latest version just
> fine, as it seems that there are no changes in the repository.
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.7 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iD8DBQFHXsZhZ2zN07dXrWoRAt/YAJ9fJK3flh4wIv2u6LvKwtJGm48zKwCfbGJI
> Jloo9C88pzkpbFapTCFpd1E=
> =p0sQ
> -----END PGP SIGNATURE-----
> plain text document attachment (gtk-text-buffer-stream-read-fix.patch)
> --- libtinymail-0.0.5-old/libtinymailui-gtk/tny-gtk-text-buffer-stream.c 2007-12-10 15:48:54.000000000 +0200
> +++ libtinymail-0.0.5/libtinymailui-gtk/tny-gtk-text-buffer-stream.c 2007-12-11 18:33:37.000000000 +0200
> @@ -94,28 +94,23 @@
> tny_gtk_text_buffer_stream_read_default (TnyStream *self, char *buffer, gsize n)
> {
> TnyGtkTextBufferStreamPriv *priv = TNY_GTK_TEXT_BUFFER_STREAM_GET_PRIVATE (self);
> - GtkTextIter dest, end;
> + GtkTextIter chunk_end;
> gchar *buf;
> - gint cur_offset, end_offset, rlength;
> - gtk_text_buffer_get_end_iter (priv->buffer, &end);
> + const gchar *valid_end;
> + gint cur_offset;
>
> cur_offset = gtk_text_iter_get_offset (&(priv->cur));
> - end_offset = gtk_text_iter_get_offset (&end);
> -
> - if (cur_offset + (gint)n > end_offset)
> - rlength = end_offset - cur_offset;
> - else rlength = (gint)n;
>
> - gtk_text_buffer_get_start_iter (priv->buffer, &dest);
> - gtk_text_iter_set_offset (&dest, rlength);
> + gtk_text_buffer_get_iter_at_offset(priv->buffer, &chunk_end, (gint)n + cur_offset);
>
> -
> - buf = gtk_text_buffer_get_text (priv->buffer, &(priv->cur), &dest, TRUE);
> - strncpy (buffer, buf, rlength);
> + buf = gtk_text_buffer_get_text (priv->buffer, &(priv->cur), &chunk_end, TRUE);
> + strncpy (buffer, buf, n);
> g_free (buf);
> - gtk_text_iter_set_offset (&(priv->cur), cur_offset + rlength);
>
> - return (gssize) rlength;
> + g_utf8_validate(buffer, n, &valid_end);
> + gtk_text_iter_set_offset (&(priv->cur), cur_offset + g_utf8_strlen(buffer, valid_end - buffer));
> +
> + return (gssize) (valid_end - buffer);
> }
>
> static gssize
> _______________________________________________
> tinymail-devel-list mailing list
> tinymail-devel-list gnome org
> http://mail.gnome.org/mailman/listinfo/tinymail-devel-list
--
Philip Van Hoof, freelance software developer
home: me at pvanhoof dot be
gnome: pvanhoof at gnome dot org
http://pvanhoof.be/blog
http://codeminded.be
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]