summaryrefslogtreecommitdiff
path: root/glib/garray.c
diff options
context:
space:
mode:
authorDarin Adler <darin@src.gnome.org>2000-08-17 21:37:18 +0000
committerDarin Adler <darin@src.gnome.org>2000-08-17 21:37:18 +0000
commit4010a5acb2be1747e60a0e844a508dbf0f55a149 (patch)
tree54a40b6b92f6f06b1291c0bf2cc41f66044a2795 /glib/garray.c
parentf17ed7ee26e447fe6d32201d3bb9c5801dbf4d30 (diff)
downloadglib-4010a5acb2be1747e60a0e844a508dbf0f55a149.tar.gz
Return the data left behind. Return the data left behind.
* glib.h: * garray.c: (g_array_free), (g_ptr_array_free), (g_byte_array_free): Return the data left behind. * gstring.c: (g_string_free): Return the data left behind. Changed the free calls that leave data behind so they return a pointer to the left-behind data, NULL if told not to leave anything behind. This makes these calls easier to use correctly, without any incompatible API change for callers that don't know about the return value. Of course, it would be even clearer if the free calls weren't dual-purpose in the first place.
Diffstat (limited to 'glib/garray.c')
-rw-r--r--glib/garray.c34
1 files changed, 27 insertions, 7 deletions
diff --git a/glib/garray.c b/glib/garray.c
index 13dac5645..285e4fed6 100644
--- a/glib/garray.c
+++ b/glib/garray.c
@@ -102,16 +102,27 @@ GArray* g_array_sized_new (gboolean zero_terminated,
return (GArray*) array;
}
-void
+gchar*
g_array_free (GArray *array,
gboolean free_segment)
{
+ gchar* segment;
+
+ g_return_val_if_fail (array, NULL);
+
if (free_segment)
- g_free (array->data);
+ {
+ g_free (array->data);
+ segment = NULL;
+ }
+ else
+ segment = array->data;
G_LOCK (array_mem_chunk);
g_mem_chunk_free (array_mem_chunk, array);
G_UNLOCK (array_mem_chunk);
+
+ return segment;
}
GArray*
@@ -335,18 +346,27 @@ g_ptr_array_sized_new (guint reserved_size)
return (GPtrArray*) array;
}
-void
+gpointer*
g_ptr_array_free (GPtrArray *array,
gboolean free_segment)
{
- g_return_if_fail (array);
+ gpointer* segment;
+
+ g_return_val_if_fail (array, NULL);
if (free_segment)
- g_free (array->pdata);
+ {
+ g_free (array->pdata);
+ segment = NULL;
+ }
+ else
+ segment = array->pdata;
G_LOCK (ptr_array_mem_chunk);
g_mem_chunk_free (ptr_array_mem_chunk, array);
G_UNLOCK (ptr_array_mem_chunk);
+
+ return segment;
}
static void
@@ -520,10 +540,10 @@ GByteArray* g_byte_array_sized_new (guint reserved_size)
return (GByteArray*) g_array_sized_new (FALSE, FALSE, 1, reserved_size);
}
-void g_byte_array_free (GByteArray *array,
+guint8* g_byte_array_free (GByteArray *array,
gboolean free_segment)
{
- g_array_free ((GArray*) array, free_segment);
+ return (guint8*) g_array_free ((GArray*) array, free_segment);
}
GByteArray* g_byte_array_append (GByteArray *array,