glib r7916 - in trunk/gio: . tests
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: glib r7916 - in trunk/gio: . tests
- Date: Thu, 26 Feb 2009 15:41:29 +0000 (UTC)
Author: alexl
Date: Thu Feb 26 15:41:29 2009
New Revision: 7916
URL: http://svn.gnome.org/viewvc/glib?rev=7916&view=rev
Log:
2009-02-26 Alexander Larsson <alexl redhat com>
Bug 540461 â g_memory_output_stream_get_data_size() doesn't behave as document
* gmemoryoutputstream.c:
Track actual valid size, even if we later seek back.
* tests/memory-output-stream.c:
Add testcase
Modified:
trunk/gio/ChangeLog
trunk/gio/gmemoryoutputstream.c
trunk/gio/tests/memory-output-stream.c
Modified: trunk/gio/gmemoryoutputstream.c
==============================================================================
--- trunk/gio/gmemoryoutputstream.c (original)
+++ trunk/gio/gmemoryoutputstream.c Thu Feb 26 15:41:29 2009
@@ -48,6 +48,7 @@
gpointer data;
gsize len;
+ gsize valid_len; /* The part of data that has been written to */
goffset pos;
@@ -205,6 +206,7 @@
priv->destroy = destroy;
priv->pos = 0;
+ priv->valid_len = 0;
return stream;
}
@@ -271,7 +273,7 @@
{
g_return_val_if_fail (G_IS_MEMORY_OUTPUT_STREAM (ostream), 0);
- return ostream->priv->pos;
+ return ostream->priv->valid_len;
}
@@ -346,6 +348,9 @@
priv->data = data;
priv->len = size;
+ if (priv->len < priv->valid_len)
+ priv->valid_len = priv->len;
+
return TRUE;
}
@@ -396,6 +401,9 @@
dest = (guint8 *)priv->data + priv->pos;
memcpy (dest, buffer, count);
priv->pos += count;
+
+ if (priv->pos > priv->valid_len)
+ priv->valid_len = priv->pos;
return count;
}
Modified: trunk/gio/tests/memory-output-stream.c
==============================================================================
--- trunk/gio/tests/memory-output-stream.c (original)
+++ trunk/gio/tests/memory-output-stream.c Thu Feb 26 15:41:29 2009
@@ -72,6 +72,15 @@
pos = g_seekable_tell (G_SEEKABLE (mo));
g_assert_cmpint (pos, ==, 1);
+ g_test_bug ("540461");
+
+ g_seekable_seek (G_SEEKABLE (mo), 0, G_SEEK_SET, NULL, NULL);
+ pos = g_seekable_tell (G_SEEKABLE (mo));
+ g_assert_cmpint (pos, ==, 0);
+
+ pos = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (mo));
+ g_assert_cmpint (pos, ==, 1);
+
g_object_unref (o);
g_object_unref (mo);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]