glib r7916 - in trunk/gio: . tests



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]