Return the data left behind. Return the data left behind.
authorDarin Adler <darin@src.gnome.org>
Thu, 17 Aug 2000 21:37:18 +0000 (21:37 +0000)
committerDarin Adler <darin@src.gnome.org>
Thu, 17 Aug 2000 21:37:18 +0000 (21:37 +0000)
    * 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.

14 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
garray.c
glib.h
glib/garray.c
glib/glib.h
glib/gstring.c
gstring.c

index 5b9fa60..843ac4a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * giowin32.c: Some indentation and spacing fixes. Add some more
index 5b9fa60..843ac4a 100644 (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>
 
        * giowin32.c: Some indentation and spacing fixes. Add some more
index 5b9fa60..843ac4a 100644 (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>
 
        * giowin32.c: Some indentation and spacing fixes. Add some more
index 5b9fa60..843ac4a 100644 (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>
 
        * giowin32.c: Some indentation and spacing fixes. Add some more
index 5b9fa60..843ac4a 100644 (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>
 
        * giowin32.c: Some indentation and spacing fixes. Add some more
index 5b9fa60..843ac4a 100644 (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>
 
        * giowin32.c: Some indentation and spacing fixes. Add some more
index 5b9fa60..843ac4a 100644 (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>
 
        * giowin32.c: Some indentation and spacing fixes. Add some more
index 5b9fa60..843ac4a 100644 (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>
 
        * giowin32.c: Some indentation and spacing fixes. Add some more
index 13dac56..285e4fe 100644 (file)
--- a/garray.c
+++ b/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,
diff --git a/glib.h b/glib.h
index 4ebe662..72ccbfb 100644 (file)
--- a/glib.h
+++ b/glib.h
@@ -1925,7 +1925,7 @@ gchar*          g_string_chunk_insert_const  (GStringChunk *chunk,
  */
 GString*     g_string_new              (const gchar     *init);
 GString*     g_string_sized_new         (guint           dfl_size);
-void        g_string_free              (GString         *string,
+gchar*      g_string_free              (GString         *string,
                                         gboolean         free_segment);
 gboolean     g_string_equal             (const GString  *v,
                                         const GString   *v2);
@@ -1988,7 +1988,7 @@ GArray* g_array_sized_new         (gboolean           zero_terminated,
                                   gboolean         clear,
                                   guint            element_size,
                                   guint            reserved_size);
-void   g_array_free              (GArray          *array,
+gchar*  g_array_free             (GArray          *array,
                                   gboolean         free_segment);
 GArray* g_array_append_vals       (GArray         *array,
                                   gconstpointer    data,
@@ -2015,7 +2015,7 @@ GArray* g_array_remove_index_fast (GArray    *array,
 #define            g_ptr_array_index(array,index) (array->pdata)[index]
 GPtrArray*  g_ptr_array_new               (void);
 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);
 void       g_ptr_array_set_size           (GPtrArray   *array,
                                            gint         length);
@@ -2036,7 +2036,7 @@ void          g_ptr_array_add                (GPtrArray   *array,
 
 GByteArray* g_byte_array_new              (void);
 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);
 GByteArray* g_byte_array_append                   (GByteArray   *array,
                                            const guint8 *data,
index 13dac56..285e4fe 100644 (file)
@@ -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,
index 4ebe662..72ccbfb 100644 (file)
@@ -1925,7 +1925,7 @@ gchar*          g_string_chunk_insert_const  (GStringChunk *chunk,
  */
 GString*     g_string_new              (const gchar     *init);
 GString*     g_string_sized_new         (guint           dfl_size);
-void        g_string_free              (GString         *string,
+gchar*      g_string_free              (GString         *string,
                                         gboolean         free_segment);
 gboolean     g_string_equal             (const GString  *v,
                                         const GString   *v2);
@@ -1988,7 +1988,7 @@ GArray* g_array_sized_new         (gboolean           zero_terminated,
                                   gboolean         clear,
                                   guint            element_size,
                                   guint            reserved_size);
-void   g_array_free              (GArray          *array,
+gchar*  g_array_free             (GArray          *array,
                                   gboolean         free_segment);
 GArray* g_array_append_vals       (GArray         *array,
                                   gconstpointer    data,
@@ -2015,7 +2015,7 @@ GArray* g_array_remove_index_fast (GArray    *array,
 #define            g_ptr_array_index(array,index) (array->pdata)[index]
 GPtrArray*  g_ptr_array_new               (void);
 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);
 void       g_ptr_array_set_size           (GPtrArray   *array,
                                            gint         length);
@@ -2036,7 +2036,7 @@ void          g_ptr_array_add                (GPtrArray   *array,
 
 GByteArray* g_byte_array_new              (void);
 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);
 GByteArray* g_byte_array_append                   (GByteArray   *array,
                                            const guint8 *data,
index 4f2ce7d..ee38050 100644 (file)
@@ -251,18 +251,27 @@ g_string_new (const gchar *init)
   return string;
 }
 
-void
+gchar*
 g_string_free (GString *string,
               gboolean free_segment)
 {
+  gchar *segment;
+
   g_return_if_fail (string != NULL);
 
   if (free_segment)
-    g_free (string->str);
+    {
+      g_free (string->str);
+      segment = NULL;
+    }
+  else
+    segment = string->str;
 
   G_LOCK (string_mem_chunk);
   g_mem_chunk_free (string_mem_chunk, string);
   G_UNLOCK (string_mem_chunk);
+
+  return segment;
 }
 
 gboolean
index 4f2ce7d..ee38050 100644 (file)
--- a/gstring.c
+++ b/gstring.c
@@ -251,18 +251,27 @@ g_string_new (const gchar *init)
   return string;
 }
 
-void
+gchar*
 g_string_free (GString *string,
               gboolean free_segment)
 {
+  gchar *segment;
+
   g_return_if_fail (string != NULL);
 
   if (free_segment)
-    g_free (string->str);
+    {
+      g_free (string->str);
+      segment = NULL;
+    }
+  else
+    segment = string->str;
 
   G_LOCK (string_mem_chunk);
   g_mem_chunk_free (string_mem_chunk, string);
   G_UNLOCK (string_mem_chunk);
+
+  return segment;
 }
 
 gboolean