[glib] Add G_VALUE_INIT



commit d2ca14c270a8a0c01d8a897fad4ea2a9c2e31105
Author: Marc-Andrà Lureau <marcandre lureau redhat com>
Date:   Sun Jul 17 21:18:04 2011 +0200

    Add G_VALUE_INIT
    
    The implementation of GValue is not public or documented.  When
    allocated on the stack, initializing a GValue is usually done as
    documented with:
    
    GValue value = { 0, };
    
    There is lot code around (including WebKit) that added all the missing
    fields, resulting in this ugly and non-obvious:
    
    GValue value = { 0, { { 0 } } };
    
    However, this doesn't play nice with -Wmissing-field-initializers for
    example. Thus, G_VALUE_INIT.
    
    http://bugzilla.gnome.org/show_bug.cgi?id=654793
    http://bugzilla.gnome.org/show_bug.cgi?id=577231

 docs/reference/gobject/gobject-sections.txt |    1 +
 gobject/gvalue.c                            |    6 +++---
 gobject/gvalue.h                            |   16 ++++++++++++++++
 3 files changed, 20 insertions(+), 3 deletions(-)
---
diff --git a/docs/reference/gobject/gobject-sections.txt b/docs/reference/gobject/gobject-sections.txt
index fefe1b7..0b1483a 100644
--- a/docs/reference/gobject/gobject-sections.txt
+++ b/docs/reference/gobject/gobject-sections.txt
@@ -376,6 +376,7 @@ g_variant_type_get_gtype
 <SECTION>
 <TITLE>Generic values</TITLE>
 <FILE>generic_values</FILE>
+G_VALUE_INIT
 G_VALUE_HOLDS
 G_VALUE_TYPE
 G_VALUE_TYPE_NAME
diff --git a/gobject/gvalue.c b/gobject/gvalue.c
index 7757474..bca9aa5 100644
--- a/gobject/gvalue.c
+++ b/gobject/gvalue.c
@@ -73,9 +73,9 @@
  * main (int   argc,
  *       char *argv[])
  * {
- *   /&ast; GValues must start zero-filled &ast;/
- *   GValue a = {0};
- *   GValue b = {0};
+ *   /&ast; GValues must be initialized &ast;/
+ *   GValue a = G_VALUE_INIT;
+ *   GValue b = G_VALUE_INIT;
  *   const gchar *message;
  *
  *   g_type_init ();
diff --git a/gobject/gvalue.h b/gobject/gvalue.h
index 60c1919..e1f6980 100644
--- a/gobject/gvalue.h
+++ b/gobject/gvalue.h
@@ -161,6 +161,22 @@ void	g_value_register_transform_func	(GType		 src_type,
  */
 #define G_VALUE_NOCOPY_CONTENTS (1 << 27)
 
+/**
+ * G_VALUE_INIT:
+ *
+ * A #GValue must be initialized before it can be used.
+ * This macro can be used as initializer instead of an explicit
+ * <literal>{ 0 }</literal> when declaring a variable,
+ * but it cannot be assigned to a variable.
+ *
+ * |[
+ *   GValue value = G_VALUE_INIT;
+ * ]|
+ *
+ * Since: 2.30
+ */
+#define G_VALUE_INIT  { 0, { { 0 } } }
+
 
 G_END_DECLS
 



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