2006-08-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / eglib / src / garray.c
index 2fc6cbba7c7ff5eecabba821ae45b6c392d456d9..bdaaaf8920bcb2d3bb36917924bab7721e8cae1e 100644 (file)
@@ -47,14 +47,16 @@ static void
 ensure_capacity (GArrayPriv *priv,
                 int capacity)
 {
+       int new_capacity = MAX (priv->capacity, INITIAL_CAPACITY);
+
        if (capacity < priv->capacity)
                return;
 
-       if (priv->array.data == NULL)
-               priv->array.data = (gchar*)g_malloc (element_length (priv, capacity));
-       else
-               priv->array.data = (gchar*)g_realloc (priv->array.data,
-                                                     element_length (priv, capacity));
+       while (new_capacity < capacity) {
+               new_capacity <<= 1;
+       }
+       capacity = new_capacity;
+       priv->array.data = (gchar*)g_realloc (priv->array.data, element_length (priv, capacity));
 
        if (priv->clear_) {
                memset (element_offset (priv, priv->capacity),