From 0a3afe448b7d53580bd6ae11397d34b54bff3c22 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 15 Dec 2006 22:57:15 +0000 Subject: [PATCH] Add a function for clearing a GStringChunk. (#364608, Matt Barnes) 2006-12-15 Matthias Clasen * glib/glib.symbols: * glib/gstring.[hc] (g_string_chunk_clear): Add a function for clearing a GStringChunk. (#364608, Matt Barnes) --- ChangeLog | 4 ++++ glib/glib.symbols | 1 + glib/gstring.c | 33 +++++++++++++++++++++++++++++++++ glib/gstring.h | 1 + 4 files changed, 39 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9ee73af..0527834 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2006-12-15 Matthias Clasen + * 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. diff --git a/glib/glib.symbols b/glib/glib.symbols index efdd4d6..f60d961 100644 --- a/glib/glib.symbols +++ b/glib/glib.symbols @@ -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 diff --git a/glib/gstring.c b/glib/gstring.c index 621c61d..2a49c2d 100644 --- a/glib/gstring.c +++ b/glib/gstring.c @@ -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) diff --git a/glib/gstring.h b/glib/gstring.h index ea67dc9..7c6a713 100644 --- a/glib/gstring.h +++ b/glib/gstring.h @@ -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, -- 2.7.4