[glib] gvalue: Add g_value_clear method



commit 1233962b54de68bfdf06cfde244693ab7fd3558a
Author: Nicolas Dufresne <nicolas dufresne collabora com>
Date:   Mon Sep 28 19:41:28 2015 -0400

    gvalue: Add g_value_clear method
    
    This method is similar to g_value_unset() but will accept
    an uninitialized (zero-filled) GValue structure.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=755766

 docs/reference/gobject/gobject-sections.txt |    1 +
 gobject/gvalue.c                            |   20 ++++++++++++++++++++
 gobject/gvalue.h                            |    2 ++
 3 files changed, 23 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/gobject/gobject-sections.txt b/docs/reference/gobject/gobject-sections.txt
index 0f14f93..ce72fca 100644
--- a/docs/reference/gobject/gobject-sections.txt
+++ b/docs/reference/gobject/gobject-sections.txt
@@ -450,6 +450,7 @@ g_value_init
 g_value_copy
 g_value_reset
 g_value_unset
+g_value_clear
 g_value_init_from_instance
 g_value_set_instance
 g_value_fits_pointer
diff --git a/gobject/gvalue.c b/gobject/gvalue.c
index 5277b77..c91584e 100644
--- a/gobject/gvalue.c
+++ b/gobject/gvalue.c
@@ -274,6 +274,26 @@ g_value_unset (GValue *value)
 }
 
 /**
+ * g_value_clear:
+ * @value: An #GValue structure.
+ *
+ * Clears the current value in @value and "unsets" the type,
+ * this releases all resources associated with this GValue.
+ * Unlike g_value_unset() this method will accept uninitialized
+ * (zero-filled) #GValue structure as @value.
+ *
+ * Since 2.48
+ */
+void
+g_value_clear (GValue *value)
+{
+  if (value && value->g_type == 0)
+    return;
+
+  g_value_unset (value);
+}
+
+/**
  * g_value_fits_pointer:
  * @value: An initialized #GValue structure.
  *
diff --git a/gobject/gvalue.h b/gobject/gvalue.h
index fd924f6..12b7975 100644
--- a/gobject/gvalue.h
+++ b/gobject/gvalue.h
@@ -134,6 +134,8 @@ GLIB_AVAILABLE_IN_ALL
 GValue*         g_value_reset          (GValue       *value);
 GLIB_AVAILABLE_IN_ALL
 void            g_value_unset          (GValue       *value);
+GLIB_AVAILABLE_IN_2_48
+void            g_value_clear          (GValue       *value);
 GLIB_AVAILABLE_IN_ALL
 void           g_value_set_instance    (GValue       *value,
                                         gpointer      instance);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]