X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gobject%2Fgvaluetypes.c;h=4b234a3f71741c589ae02432942c0d26ded6a2ce;hb=2e5bd8cf47f9e1559ccc44823a2f321b8ff8c1ea;hp=8f182f2147608b6f0ef1c07ab8686131e0cbf8b8;hpb=2d4e48b73c3efe74c3818616de6fcc332f2e640a;p=platform%2Fupstream%2Fglib.git diff --git a/gobject/gvaluetypes.c b/gobject/gvaluetypes.c index 8f182f2..4b234a3 100644 --- a/gobject/gvaluetypes.c +++ b/gobject/gvaluetypes.c @@ -13,9 +13,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. + * Public License along with this library; if not, see . */ /* @@ -28,12 +26,12 @@ #include /* qsort() */ #include "gvaluetypes.h" +#include "gtype-private.h" #include "gvaluecollector.h" #include "gobject.h" #include "gparam.h" #include "gboxed.h" #include "genums.h" -#include "gobjectalias.h" /* --- value functions --- */ @@ -59,7 +57,7 @@ value_lcopy_char (const GValue *value, gint8 *int8_p = collect_values[0].v_pointer; if (!int8_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); *int8_p = value->data[0].v_int; @@ -75,7 +73,7 @@ value_lcopy_boolean (const GValue *value, gboolean *bool_p = collect_values[0].v_pointer; if (!bool_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); *bool_p = value->data[0].v_int; @@ -102,7 +100,7 @@ value_lcopy_int (const GValue *value, gint *int_p = collect_values[0].v_pointer; if (!int_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); *int_p = value->data[0].v_int; @@ -129,7 +127,7 @@ value_lcopy_long (const GValue *value, glong *long_p = collect_values[0].v_pointer; if (!long_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); *long_p = value->data[0].v_long; @@ -169,7 +167,7 @@ value_lcopy_int64 (const GValue *value, gint64 *int64_p = collect_values[0].v_pointer; if (!int64_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); *int64_p = value->data[0].v_int64; @@ -209,7 +207,7 @@ value_lcopy_float (const GValue *value, gfloat *float_p = collect_values[0].v_pointer; if (!float_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); *float_p = value->data[0].v_float; @@ -249,7 +247,7 @@ value_lcopy_double (const GValue *value, gdouble *double_p = collect_values[0].v_pointer; if (!double_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); *double_p = value->data[0].v_double; @@ -304,7 +302,7 @@ value_lcopy_string (const GValue *value, gchar **string_p = collect_values[0].v_pointer; if (!string_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); if (!value->data[0].v_pointer) *string_p = NULL; @@ -355,7 +353,7 @@ value_lcopy_pointer (const GValue *value, gpointer *pointer_p = collect_values[0].v_pointer; if (!pointer_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); *pointer_p = value->data[0].v_pointer; @@ -408,7 +406,7 @@ value_lcopy_variant (const GValue *value, GVariant **variant_p = collect_values[0].v_pointer; if (!variant_p) - return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value)); if (!value->data[0].v_pointer) *variant_p = NULL; @@ -422,7 +420,7 @@ value_lcopy_variant (const GValue *value, /* --- type initialization --- */ void -g_value_types_init (void) +_g_value_types_init (void) { GTypeInfo info = { 0, /* class_size */ @@ -636,6 +634,7 @@ g_value_types_init (void) * @v_char: character value to be set * * Set the contents of a %G_TYPE_CHAR #GValue to @v_char. + * Deprecated: 2.32: This function's input type is broken, see g_value_set_schar() */ void g_value_set_char (GValue *value, @@ -650,9 +649,13 @@ g_value_set_char (GValue *value, * g_value_get_char: * @value: a valid #GValue of type %G_TYPE_CHAR * - * Get the contents of a %G_TYPE_CHAR #GValue. + * Do not use this function; it is broken on platforms where the %char + * type is unsigned, such as ARM and PowerPC. See g_value_get_schar(). + * + * Get the contents of a %G_TYPE_CHAR #GValue. * * Returns: character contents of @value + * Deprecated: 2.32: This function's return type is broken, see g_value_get_schar() */ gchar g_value_get_char (const GValue *value) @@ -663,6 +666,41 @@ g_value_get_char (const GValue *value) } /** + * g_value_set_schar: + * @value: a valid #GValue of type %G_TYPE_CHAR + * @v_char: signed 8 bit integer to be set + * + * Set the contents of a %G_TYPE_CHAR #GValue to @v_char. + * + * Since: 2.32 + */ +void +g_value_set_schar (GValue *value, + gint8 v_char) +{ + g_return_if_fail (G_VALUE_HOLDS_CHAR (value)); + + value->data[0].v_int = v_char; +} + +/** + * g_value_get_schar: + * @value: a valid #GValue of type %G_TYPE_CHAR + * + * Get the contents of a %G_TYPE_CHAR #GValue. + * + * Returns: signed 8 bit integer contents of @value + * Since: 2.32 + */ +gint8 +g_value_get_schar (const GValue *value) +{ + g_return_val_if_fail (G_VALUE_HOLDS_CHAR (value), 0); + + return value->data[0].v_int; +} + +/** * g_value_set_uchar: * @value: a valid #GValue of type %G_TYPE_UCHAR * @v_uchar: unsigned character value to be set @@ -985,7 +1023,7 @@ g_value_get_double (const GValue *value) /** * g_value_set_string: * @value: a valid #GValue of type %G_TYPE_STRING - * @v_string: caller-owned string to be duplicated for the #GValue + * @v_string: (allow-none): caller-owned string to be duplicated for the #GValue * * Set the contents of a %G_TYPE_STRING #GValue to @v_string. */ @@ -1010,7 +1048,7 @@ g_value_set_string (GValue *value, /** * g_value_set_static_string: * @value: a valid #GValue of type %G_TYPE_STRING - * @v_string: static string to be set + * @v_string: (allow-none): static string to be set * * Set the contents of a %G_TYPE_STRING #GValue to @v_string. * The string is assumed to be static, and is thus not duplicated @@ -1031,7 +1069,7 @@ g_value_set_static_string (GValue *value, /** * g_value_set_string_take_ownership: * @value: a valid #GValue of type %G_TYPE_STRING - * @v_string: duplicated unowned string to be set + * @v_string: (allow-none): duplicated unowned string to be set * * This is an internal function introduced mainly for C marshallers. * @@ -1047,7 +1085,7 @@ g_value_set_string_take_ownership (GValue *value, /** * g_value_take_string: * @value: a valid #GValue of type %G_TYPE_STRING - * @v_string: string to take ownership of + * @v_string: (allow-none): string to take ownership of * * Sets the contents of a %G_TYPE_STRING #GValue to @v_string. * @@ -1074,7 +1112,7 @@ g_value_take_string (GValue *value, * * Returns: string content of @value */ -G_CONST_RETURN gchar* +const gchar* g_value_get_string (const GValue *value) { g_return_val_if_fail (G_VALUE_HOLDS_STRING (value), NULL); @@ -1120,7 +1158,7 @@ g_value_set_pointer (GValue *value, * * Get the contents of a pointer #GValue. * - * Returns: pointer contents of @value + * Returns: (transfer none): pointer contents of @value */ gpointer g_value_get_pointer (const GValue *value) @@ -1130,15 +1168,7 @@ g_value_get_pointer (const GValue *value) return value->data[0].v_pointer; } -GType -g_gtype_get_type (void) -{ - static const GTypeInfo type_info = { 0, }; - static GType type; - if (!type) - type = g_type_register_static (G_TYPE_POINTER, g_intern_static_string ("GType"), &type_info, 0); - return type; -} +G_DEFINE_POINTER_TYPE (GType, g_gtype) /** * g_value_set_gtype: @@ -1155,7 +1185,7 @@ g_value_set_gtype (GValue *value, { g_return_if_fail (G_VALUE_HOLDS_GTYPE (value)); - value->data[0].v_long = v_gtype; + value->data[0].v_pointer = GSIZE_TO_POINTER (v_gtype); } @@ -1174,13 +1204,13 @@ g_value_get_gtype (const GValue *value) { g_return_val_if_fail (G_VALUE_HOLDS_GTYPE (value), 0); - return value->data[0].v_long; + return GPOINTER_TO_SIZE (value->data[0].v_pointer); } /** * g_value_set_variant: * @value: a valid #GValue of type %G_TYPE_VARIANT - * @variant: a #GVariant, or %NULL + * @variant: (allow-none): a #GVariant, or %NULL * * Set the contents of a variant #GValue to @variant. * If the variant is floating, it is consumed. @@ -1209,17 +1239,15 @@ g_value_set_variant (GValue *value, /** * g_value_take_variant: * @value: a valid #GValue of type %G_TYPE_VARIANT - * @variant: a #GVariant, or %NULL + * @variant: (allow-none): a #GVariant, or %NULL * * Set the contents of a variant #GValue to @variant, and takes over * the ownership of the caller's reference to @variant; * the caller doesn't have to unref it any more (i.e. the reference * count of the variant is not increased). - * - * It is a programmer error to pass a floating variant to this function. - * In particular this means that callbacks in closures, and signal handlers - * for signals of return type %G_TYPE_VARIANT, must never return floating - * variants. + * + * If @variant was floating then its floating reference is converted to + * a hard reference. * * If you want the #GValue to hold its own reference to @variant, use * g_value_set_variant() instead. @@ -1235,11 +1263,13 @@ g_value_take_variant (GValue *value, GVariant *old_variant; g_return_if_fail (G_VALUE_HOLDS_VARIANT (value)); - g_return_if_fail (variant == NULL || !g_variant_is_floating (variant)); old_variant = value->data[0].v_pointer; - value->data[0].v_pointer = variant; + if (variant) + value->data[0].v_pointer = g_variant_take_ref (variant); + else + value->data[0].v_pointer = NULL; if (old_variant) g_variant_unref (old_variant); @@ -1323,7 +1353,7 @@ g_strdup_value_contents (const GValue *value) } else if (g_value_type_transformable (G_VALUE_TYPE (value), G_TYPE_STRING)) { - GValue tmp_value = { 0, }; + GValue tmp_value = G_VALUE_INIT; gchar *s; g_value_init (&tmp_value, G_TYPE_STRING); @@ -1348,6 +1378,25 @@ g_strdup_value_contents (const GValue *value) contents = g_strdup_printf ("((%s*) %p)", G_OBJECT_TYPE_NAME (p), p); else if (G_VALUE_HOLDS_PARAM (value)) contents = g_strdup_printf ("((%s*) %p)", G_PARAM_SPEC_TYPE_NAME (p), p); + else if (G_VALUE_HOLDS (value, G_TYPE_STRV)) + { + GStrv strv = g_value_get_boxed (value); + GString *tmp = g_string_new ("["); + + while (*strv != NULL) + { + gchar *escaped = g_strescape (*strv, NULL); + + g_string_append_printf (tmp, "\"%s\"", escaped); + g_free (escaped); + + if (*++strv != NULL) + g_string_append (tmp, ", "); + } + + g_string_append (tmp, "]"); + contents = g_string_free (tmp, FALSE); + } else if (G_VALUE_HOLDS_BOXED (value)) contents = g_strdup_printf ("((%s*) %p)", g_type_name (G_VALUE_TYPE (value)), p); else if (G_VALUE_HOLDS_POINTER (value)) @@ -1373,7 +1422,7 @@ g_strdup_value_contents (const GValue *value) GType g_pointer_type_register_static (const gchar *name) { - static const GTypeInfo type_info = { + const GTypeInfo type_info = { 0, /* class_size */ NULL, /* base_init */ NULL, /* base_finalize */ @@ -1394,6 +1443,3 @@ g_pointer_type_register_static (const gchar *name) return type; } - -#define __G_VALUETYPES_C__ -#include "gobjectaliasdef.c"