diff --git a/gobject/gvalue.h b/gobject/gvalue.h index 1c6d7377c..dc6e5ac3b 100644 --- a/gobject/gvalue.h +++ b/gobject/gvalue.h @@ -171,7 +171,8 @@ void g_value_register_transform_func (GType src_type, * * If passed to G_VALUE_COLLECT(), allocated data won't be copied * but used verbatim. This does not affect ref-counted types like - * objects. + * objects. This does not affect usage of g_value_copy(), the data will + * be copied if it is not ref-counted. */ #define G_VALUE_NOCOPY_CONTENTS (1 << 27) diff --git a/gobject/gvaluetypes.c b/gobject/gvaluetypes.c index 9eaba43ce..732ea2b08 100644 --- a/gobject/gvaluetypes.c +++ b/gobject/gvaluetypes.c @@ -264,7 +264,7 @@ static void value_copy_string (const GValue *src_value, GValue *dest_value) { - if (src_value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS) + if (src_value->data[1].v_uint & G_VALUE_INTERNED_STRING) { dest_value->data[0].v_pointer = src_value->data[0].v_pointer; dest_value->data[1].v_uint = src_value->data[1].v_uint; @@ -272,7 +272,7 @@ value_copy_string (const GValue *src_value, else { dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_pointer); - dest_value->data[1].v_uint = src_value->data[1].v_uint; + /* Don't copy over *any* flags, we're restarting from scratch */ } } diff --git a/gobject/tests/value.c b/gobject/tests/value.c index af918dde9..e21b23445 100644 --- a/gobject/tests/value.c +++ b/gobject/tests/value.c @@ -148,11 +148,11 @@ test_value_string (void) g_assert_cmpstr (str2, ==, static1); g_free (str2); - /* Copying a static string gvalue should *not* copy the contents */ + /* Copying a static string gvalue should *actually* copy the contents */ g_value_init (©, G_TYPE_STRING); g_value_copy (&value, ©); copystr = g_value_get_string (©); - g_assert_true (copystr == static1); + g_assert_true (copystr != static1); g_value_unset (©); /* Setting a new string should change the contents */