cleanup
[platform/upstream/glib.git] / gio / gmemoryoutputstream.c
index a986079..a89701d 100644 (file)
@@ -368,18 +368,18 @@ g_memory_output_stream_init (GMemoryOutputStream *stream)
  * allocation for itself).
  *
  * |[<!-- language="C" -->
- * /&ast; a stream that can grow &ast;/
+ * // a stream that can grow
  * stream = g_memory_output_stream_new (NULL, 0, realloc, free);
  *
- * /&ast; another stream that can grow &ast;/
+ * // another stream that can grow
  * stream2 = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
  *
- * /&ast; a fixed-size stream &ast;/
+ * // a fixed-size stream
  * data = malloc (200);
  * stream3 = g_memory_output_stream_new (data, 200, NULL, free);
  * ]|
  *
- * Return value: A newly created #GMemoryOutputStream object.
+ * Returns: A newly created #GMemoryOutputStream object.
  **/
 GOutputStream *
 g_memory_output_stream_new (gpointer       data,
@@ -594,12 +594,12 @@ array_resize (GMemoryOutputStream  *ostream,
   return TRUE;
 }
 
-static gint
-g_nearest_pow (gint num)
+static gsize
+g_nearest_pow (gsize num)
 {
-  gint n = 1;
+  gsize n = 1;
 
-  while (n < num)
+  while (n < num && n > 0)
     n <<= 1;
 
   return n;
@@ -639,12 +639,10 @@ g_memory_output_stream_write (GOutputStream  *stream,
        * much memory.
        */
       new_size = g_nearest_pow (priv->pos + count);
-      /* Check for overflow again. We have only checked if
-         pos + count > G_MAXSIZE, but it only catches the case of writing
-         more than 4GiB total on a 32-bit system. There's still the problem
-         of g_nearest_pow overflowing above 0x7fffffff, so we're
-         effectively limited to 2GiB. */
-      if (new_size < priv->len)
+      /* Check for overflow again. We have checked if
+         pos + count > G_MAXSIZE, but now check if g_nearest_pow () has
+         overflowed */
+      if (new_size == 0)
         goto overflow;
 
       new_size = MAX (new_size, MIN_ARRAY_SIZE);