Add a function for clearing a GStringChunk. (#364608, Matt Barnes)
authorMatthias Clasen <mclasen@redhat.com>
Fri, 15 Dec 2006 22:57:15 +0000 (22:57 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Fri, 15 Dec 2006 22:57:15 +0000 (22:57 +0000)
2006-12-15  Matthias Clasen  <mclasen@redhat.com>

        * glib/glib.symbols:
        * glib/gstring.[hc] (g_string_chunk_clear): Add a function
        for clearing a GStringChunk. (#364608, Matt Barnes)

ChangeLog
glib/glib.symbols
glib/gstring.c
glib/gstring.h

index 9ee73af55b15fcd27626356f657c215adab5ec84..0527834145a5092fac53dddc7aea10c00e5948fe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2006-12-15  Matthias Clasen  <mclasen@redhat.com>
 
+       * glib/glib.symbols:
+       * glib/gstring.[hc] (g_string_chunk_clear): Add a function
+       for clearing a GStringChunk. (#364608, Matt Barnes)
+
        * glib/guniprop.c (interval_compare): Avoid a compiler
        warning.
 
index efdd4d6e971ae96f8ba3455644d2ebde053da600..f60d961dee49d8e97c8e7743d0d87b2ea799cde0 100644 (file)
@@ -1078,6 +1078,7 @@ g_string_ascii_down
 g_string_ascii_up
 g_string_assign
 g_string_chunk_free
+g_string_chunk_clear
 g_string_chunk_insert
 g_string_chunk_insert_const
 g_string_chunk_insert_len
index 621c61d1bc40dc48bc32d0632f4ee0cd185b7eef..2a49c2d71c72343a85e8e6a58ac0f7504d41837c 100644 (file)
@@ -162,6 +162,39 @@ g_string_chunk_free (GStringChunk *chunk)
   g_free (chunk);
 }
 
+/**
+ * g_string_chunk_clear:
+ * @chunk: a #GStringChunk
+ *
+ * Frees all strings contained within the #GStringChunk.
+ * After calling g_string_chunk_clear() it is not safe to
+ * access any of the strings which were contained within it.
+ *
+ * Since: 2.14
+ */
+void
+g_string_chunk_clear (GStringChunk *chunk)
+{
+  GSList *tmp_list;
+
+  g_return_if_fail (chunk != NULL);
+
+  if (chunk->storage_list)
+    {
+      for (tmp_list = chunk->storage_list; tmp_list; tmp_list = tmp_list->next)
+        g_free (tmp_list->data);
+
+      g_slist_free (chunk->storage_list);
+
+      chunk->storage_list       = NULL;
+      chunk->storage_next       = chunk->default_size;
+      chunk->this_size          = chunk->default_size;
+    }
+
+  if (chunk->const_table)
+      g_hash_table_remove_all (chunk->const_table);
+}
+
 gchar*
 g_string_chunk_insert (GStringChunk *chunk,
                       const gchar  *string)
index ea67dc9108ffe85baae4978313d9f7ebc3038056..7c6a713b0b7328f90c4b0844d6d5805a6118338b 100644 (file)
@@ -47,6 +47,7 @@ struct _GString
  */
 GStringChunk* g_string_chunk_new          (gsize size);  
 void         g_string_chunk_free          (GStringChunk *chunk);
+void         g_string_chunk_clear         (GStringChunk *chunk);
 gchar*       g_string_chunk_insert        (GStringChunk *chunk,
                                            const gchar  *string);
 gchar*       g_string_chunk_insert_len    (GStringChunk *chunk,