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.
This commit is contained in:
Darin Adler 2000-08-17 21:37:18 +00:00
parent f17ed7ee26
commit 4010a5acb2
14 changed files with 204 additions and 26 deletions

View File

@ -1,3 +1,18 @@
2000-08-17 Darin Adler <darin@eazel.com>
* 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.
2000-08-12 Tor Lillqvist <tml@iki.fi> 2000-08-12 Tor Lillqvist <tml@iki.fi>
* giowin32.c: Some indentation and spacing fixes. Add some more * giowin32.c: Some indentation and spacing fixes. Add some more

View File

@ -1,3 +1,18 @@
2000-08-17 Darin Adler <darin@eazel.com>
* 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.
2000-08-12 Tor Lillqvist <tml@iki.fi> 2000-08-12 Tor Lillqvist <tml@iki.fi>
* giowin32.c: Some indentation and spacing fixes. Add some more * giowin32.c: Some indentation and spacing fixes. Add some more

View File

@ -1,3 +1,18 @@
2000-08-17 Darin Adler <darin@eazel.com>
* 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.
2000-08-12 Tor Lillqvist <tml@iki.fi> 2000-08-12 Tor Lillqvist <tml@iki.fi>
* giowin32.c: Some indentation and spacing fixes. Add some more * giowin32.c: Some indentation and spacing fixes. Add some more

View File

@ -1,3 +1,18 @@
2000-08-17 Darin Adler <darin@eazel.com>
* 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.
2000-08-12 Tor Lillqvist <tml@iki.fi> 2000-08-12 Tor Lillqvist <tml@iki.fi>
* giowin32.c: Some indentation and spacing fixes. Add some more * giowin32.c: Some indentation and spacing fixes. Add some more

View File

@ -1,3 +1,18 @@
2000-08-17 Darin Adler <darin@eazel.com>
* 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.
2000-08-12 Tor Lillqvist <tml@iki.fi> 2000-08-12 Tor Lillqvist <tml@iki.fi>
* giowin32.c: Some indentation and spacing fixes. Add some more * giowin32.c: Some indentation and spacing fixes. Add some more

View File

@ -1,3 +1,18 @@
2000-08-17 Darin Adler <darin@eazel.com>
* 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.
2000-08-12 Tor Lillqvist <tml@iki.fi> 2000-08-12 Tor Lillqvist <tml@iki.fi>
* giowin32.c: Some indentation and spacing fixes. Add some more * giowin32.c: Some indentation and spacing fixes. Add some more

View File

@ -1,3 +1,18 @@
2000-08-17 Darin Adler <darin@eazel.com>
* 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.
2000-08-12 Tor Lillqvist <tml@iki.fi> 2000-08-12 Tor Lillqvist <tml@iki.fi>
* giowin32.c: Some indentation and spacing fixes. Add some more * giowin32.c: Some indentation and spacing fixes. Add some more

View File

@ -1,3 +1,18 @@
2000-08-17 Darin Adler <darin@eazel.com>
* 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.
2000-08-12 Tor Lillqvist <tml@iki.fi> 2000-08-12 Tor Lillqvist <tml@iki.fi>
* giowin32.c: Some indentation and spacing fixes. Add some more * giowin32.c: Some indentation and spacing fixes. Add some more

View File

@ -102,16 +102,27 @@ GArray* g_array_sized_new (gboolean zero_terminated,
return (GArray*) array; return (GArray*) array;
} }
void gchar*
g_array_free (GArray *array, g_array_free (GArray *array,
gboolean free_segment) gboolean free_segment)
{ {
gchar* segment;
g_return_val_if_fail (array, NULL);
if (free_segment) if (free_segment)
{
g_free (array->data); g_free (array->data);
segment = NULL;
}
else
segment = array->data;
G_LOCK (array_mem_chunk); G_LOCK (array_mem_chunk);
g_mem_chunk_free (array_mem_chunk, array); g_mem_chunk_free (array_mem_chunk, array);
G_UNLOCK (array_mem_chunk); G_UNLOCK (array_mem_chunk);
return segment;
} }
GArray* GArray*
@ -335,18 +346,27 @@ g_ptr_array_sized_new (guint reserved_size)
return (GPtrArray*) array; return (GPtrArray*) array;
} }
void gpointer*
g_ptr_array_free (GPtrArray *array, g_ptr_array_free (GPtrArray *array,
gboolean free_segment) gboolean free_segment)
{ {
g_return_if_fail (array); gpointer* segment;
g_return_val_if_fail (array, NULL);
if (free_segment) if (free_segment)
{
g_free (array->pdata); g_free (array->pdata);
segment = NULL;
}
else
segment = array->pdata;
G_LOCK (ptr_array_mem_chunk); G_LOCK (ptr_array_mem_chunk);
g_mem_chunk_free (ptr_array_mem_chunk, array); g_mem_chunk_free (ptr_array_mem_chunk, array);
G_UNLOCK (ptr_array_mem_chunk); G_UNLOCK (ptr_array_mem_chunk);
return segment;
} }
static void 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); 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) 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, GByteArray* g_byte_array_append (GByteArray *array,

8
glib.h
View File

@ -1925,7 +1925,7 @@ gchar* g_string_chunk_insert_const (GStringChunk *chunk,
*/ */
GString* g_string_new (const gchar *init); GString* g_string_new (const gchar *init);
GString* g_string_sized_new (guint dfl_size); GString* g_string_sized_new (guint dfl_size);
void g_string_free (GString *string, gchar* g_string_free (GString *string,
gboolean free_segment); gboolean free_segment);
gboolean g_string_equal (const GString *v, gboolean g_string_equal (const GString *v,
const GString *v2); const GString *v2);
@ -1988,7 +1988,7 @@ GArray* g_array_sized_new (gboolean zero_terminated,
gboolean clear, gboolean clear,
guint element_size, guint element_size,
guint reserved_size); guint reserved_size);
void g_array_free (GArray *array, gchar* g_array_free (GArray *array,
gboolean free_segment); gboolean free_segment);
GArray* g_array_append_vals (GArray *array, GArray* g_array_append_vals (GArray *array,
gconstpointer data, gconstpointer data,
@ -2015,7 +2015,7 @@ GArray* g_array_remove_index_fast (GArray *array,
#define g_ptr_array_index(array,index) (array->pdata)[index] #define g_ptr_array_index(array,index) (array->pdata)[index]
GPtrArray* g_ptr_array_new (void); GPtrArray* g_ptr_array_new (void);
GPtrArray* g_ptr_array_sized_new (guint reserved_size); GPtrArray* g_ptr_array_sized_new (guint reserved_size);
void g_ptr_array_free (GPtrArray *array, gpointer* g_ptr_array_free (GPtrArray *array,
gboolean free_seg); gboolean free_seg);
void g_ptr_array_set_size (GPtrArray *array, void g_ptr_array_set_size (GPtrArray *array,
gint length); gint length);
@ -2036,7 +2036,7 @@ void g_ptr_array_add (GPtrArray *array,
GByteArray* g_byte_array_new (void); GByteArray* g_byte_array_new (void);
GByteArray* g_byte_array_sized_new (guint reserved_size); GByteArray* g_byte_array_sized_new (guint reserved_size);
void g_byte_array_free (GByteArray *array, guint8* g_byte_array_free (GByteArray *array,
gboolean free_segment); gboolean free_segment);
GByteArray* g_byte_array_append (GByteArray *array, GByteArray* g_byte_array_append (GByteArray *array,
const guint8 *data, const guint8 *data,

View File

@ -102,16 +102,27 @@ GArray* g_array_sized_new (gboolean zero_terminated,
return (GArray*) array; return (GArray*) array;
} }
void gchar*
g_array_free (GArray *array, g_array_free (GArray *array,
gboolean free_segment) gboolean free_segment)
{ {
gchar* segment;
g_return_val_if_fail (array, NULL);
if (free_segment) if (free_segment)
{
g_free (array->data); g_free (array->data);
segment = NULL;
}
else
segment = array->data;
G_LOCK (array_mem_chunk); G_LOCK (array_mem_chunk);
g_mem_chunk_free (array_mem_chunk, array); g_mem_chunk_free (array_mem_chunk, array);
G_UNLOCK (array_mem_chunk); G_UNLOCK (array_mem_chunk);
return segment;
} }
GArray* GArray*
@ -335,18 +346,27 @@ g_ptr_array_sized_new (guint reserved_size)
return (GPtrArray*) array; return (GPtrArray*) array;
} }
void gpointer*
g_ptr_array_free (GPtrArray *array, g_ptr_array_free (GPtrArray *array,
gboolean free_segment) gboolean free_segment)
{ {
g_return_if_fail (array); gpointer* segment;
g_return_val_if_fail (array, NULL);
if (free_segment) if (free_segment)
{
g_free (array->pdata); g_free (array->pdata);
segment = NULL;
}
else
segment = array->pdata;
G_LOCK (ptr_array_mem_chunk); G_LOCK (ptr_array_mem_chunk);
g_mem_chunk_free (ptr_array_mem_chunk, array); g_mem_chunk_free (ptr_array_mem_chunk, array);
G_UNLOCK (ptr_array_mem_chunk); G_UNLOCK (ptr_array_mem_chunk);
return segment;
} }
static void 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); 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) 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, GByteArray* g_byte_array_append (GByteArray *array,

View File

@ -1925,7 +1925,7 @@ gchar* g_string_chunk_insert_const (GStringChunk *chunk,
*/ */
GString* g_string_new (const gchar *init); GString* g_string_new (const gchar *init);
GString* g_string_sized_new (guint dfl_size); GString* g_string_sized_new (guint dfl_size);
void g_string_free (GString *string, gchar* g_string_free (GString *string,
gboolean free_segment); gboolean free_segment);
gboolean g_string_equal (const GString *v, gboolean g_string_equal (const GString *v,
const GString *v2); const GString *v2);
@ -1988,7 +1988,7 @@ GArray* g_array_sized_new (gboolean zero_terminated,
gboolean clear, gboolean clear,
guint element_size, guint element_size,
guint reserved_size); guint reserved_size);
void g_array_free (GArray *array, gchar* g_array_free (GArray *array,
gboolean free_segment); gboolean free_segment);
GArray* g_array_append_vals (GArray *array, GArray* g_array_append_vals (GArray *array,
gconstpointer data, gconstpointer data,
@ -2015,7 +2015,7 @@ GArray* g_array_remove_index_fast (GArray *array,
#define g_ptr_array_index(array,index) (array->pdata)[index] #define g_ptr_array_index(array,index) (array->pdata)[index]
GPtrArray* g_ptr_array_new (void); GPtrArray* g_ptr_array_new (void);
GPtrArray* g_ptr_array_sized_new (guint reserved_size); GPtrArray* g_ptr_array_sized_new (guint reserved_size);
void g_ptr_array_free (GPtrArray *array, gpointer* g_ptr_array_free (GPtrArray *array,
gboolean free_seg); gboolean free_seg);
void g_ptr_array_set_size (GPtrArray *array, void g_ptr_array_set_size (GPtrArray *array,
gint length); gint length);
@ -2036,7 +2036,7 @@ void g_ptr_array_add (GPtrArray *array,
GByteArray* g_byte_array_new (void); GByteArray* g_byte_array_new (void);
GByteArray* g_byte_array_sized_new (guint reserved_size); GByteArray* g_byte_array_sized_new (guint reserved_size);
void g_byte_array_free (GByteArray *array, guint8* g_byte_array_free (GByteArray *array,
gboolean free_segment); gboolean free_segment);
GByteArray* g_byte_array_append (GByteArray *array, GByteArray* g_byte_array_append (GByteArray *array,
const guint8 *data, const guint8 *data,

View File

@ -251,18 +251,27 @@ g_string_new (const gchar *init)
return string; return string;
} }
void gchar*
g_string_free (GString *string, g_string_free (GString *string,
gboolean free_segment) gboolean free_segment)
{ {
gchar *segment;
g_return_if_fail (string != NULL); g_return_if_fail (string != NULL);
if (free_segment) if (free_segment)
{
g_free (string->str); g_free (string->str);
segment = NULL;
}
else
segment = string->str;
G_LOCK (string_mem_chunk); G_LOCK (string_mem_chunk);
g_mem_chunk_free (string_mem_chunk, string); g_mem_chunk_free (string_mem_chunk, string);
G_UNLOCK (string_mem_chunk); G_UNLOCK (string_mem_chunk);
return segment;
} }
gboolean gboolean

View File

@ -251,18 +251,27 @@ g_string_new (const gchar *init)
return string; return string;
} }
void gchar*
g_string_free (GString *string, g_string_free (GString *string,
gboolean free_segment) gboolean free_segment)
{ {
gchar *segment;
g_return_if_fail (string != NULL); g_return_if_fail (string != NULL);
if (free_segment) if (free_segment)
{
g_free (string->str); g_free (string->str);
segment = NULL;
}
else
segment = string->str;
G_LOCK (string_mem_chunk); G_LOCK (string_mem_chunk);
g_mem_chunk_free (string_mem_chunk, string); g_mem_chunk_free (string_mem_chunk, string);
G_UNLOCK (string_mem_chunk); G_UNLOCK (string_mem_chunk);
return segment;
} }
gboolean gboolean