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 5b9fa6085ebfa9ddd4ebbe0601d43c9cb7287b69..843ac4aeeafa33404aec43311aa455c759294a94 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 5b9fa6085ebfa9ddd4ebbe0601d43c9cb7287b69..843ac4aeeafa33404aec43311aa455c759294a94 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 5b9fa6085ebfa9ddd4ebbe0601d43c9cb7287b69..843ac4aeeafa33404aec43311aa455c759294a94 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 5b9fa6085ebfa9ddd4ebbe0601d43c9cb7287b69..843ac4aeeafa33404aec43311aa455c759294a94 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 5b9fa6085ebfa9ddd4ebbe0601d43c9cb7287b69..843ac4aeeafa33404aec43311aa455c759294a94 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 5b9fa6085ebfa9ddd4ebbe0601d43c9cb7287b69..843ac4aeeafa33404aec43311aa455c759294a94 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 5b9fa6085ebfa9ddd4ebbe0601d43c9cb7287b69..843ac4aeeafa33404aec43311aa455c759294a94 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 5b9fa6085ebfa9ddd4ebbe0601d43c9cb7287b69..843ac4aeeafa33404aec43311aa455c759294a94 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 13dac564569006d5a654435c211ca683928e93e5..285e4fed67302ff7e8bffe80e2ca5b2635d40f93 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 4ebe6626a89a8035e19caeaf870ba1f696c90c9b..72ccbfba66dbb3f60d3486d1aab4f791148355a2 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 13dac564569006d5a654435c211ca683928e93e5..285e4fed67302ff7e8bffe80e2ca5b2635d40f93 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 4ebe6626a89a8035e19caeaf870ba1f696c90c9b..72ccbfba66dbb3f60d3486d1aab4f791148355a2 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 4f2ce7d1b2e16e84cfbe68c98c24b1dc7ff76038..ee3805040680e5d5d11e3c2936d3b6e6d1d44563 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 4f2ce7d1b2e16e84cfbe68c98c24b1dc7ff76038..ee3805040680e5d5d11e3c2936d3b6e6d1d44563 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