[glib] Add G_VALUE_INIT
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Add G_VALUE_INIT
- Date: Sat, 13 Aug 2011 22:19:55 +0000 (UTC)
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[])
* {
- * /* GValues must start zero-filled */
- * GValue a = {0};
- * GValue b = {0};
+ * /* GValues must be initialized */
+ * 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]