if (g_variant_type_equal (expected_type, G_VARIANT_TYPE_BYTE))
{
if (G_VALUE_HOLDS_CHAR (value))
- return g_variant_new_byte (g_value_get_char (value));
+ return g_variant_new_byte (g_value_get_schar (value));
else
return g_variant_new_byte (g_value_get_uchar (value));
}
if (G_VALUE_HOLDS_UCHAR (value))
g_value_set_uchar (value, g_variant_get_byte (variant));
else if (G_VALUE_HOLDS_CHAR (value))
- g_value_set_char (value, (gchar) g_variant_get_byte (variant));
+ g_value_set_schar (value, (gint8)g_variant_get_byte (variant));
else
return FALSE;
return TRUE;
gboolean bool_prop;
gboolean anti_bool_prop;
- gchar byte_prop;
+ gint8 byte_prop;
gint int16_prop;
guint16 uint16_prop;
gint int_prop;
g_value_set_boolean (value, test_object->anti_bool_prop);
break;
case PROP_BYTE:
- g_value_set_char (value, test_object->byte_prop);
+ g_value_set_schar (value, test_object->byte_prop);
break;
case PROP_UINT16:
g_value_set_uint (value, test_object->uint16_prop);
test_object->anti_bool_prop = g_value_get_boolean (value);
break;
case PROP_BYTE:
- test_object->byte_prop = g_value_get_char (value);
+ test_object->byte_prop = g_value_get_schar (value);
break;
case PROP_INT16:
test_object->int16_prop = g_value_get_int (value);
g_value_set_string (gvalue, *(gchar**)value);
break;
case G_TYPE_CHAR:
- g_value_set_char (gvalue, *(gchar*)value);
+ g_value_set_schar (gvalue, *(gint8*)value);
break;
case G_TYPE_UCHAR:
g_value_set_uchar (gvalue, *(guchar*)value);
fputs ("\n", fout);
fputs ("#ifdef G_ENABLE_DEBUG\n", fout);
fputs ("#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)\n", fout);
- fputs ("#define g_marshal_value_peek_char(v) g_value_get_char (v)\n", fout);
+ fputs ("#define g_marshal_value_peek_char(v) g_value_get_schar (v)\n", fout);
fputs ("#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)\n", fout);
fputs ("#define g_marshal_value_peek_int(v) g_value_get_int (v)\n", fout);
fputs ("#define g_marshal_value_peek_uint(v) g_value_get_uint (v)\n", fout);
#ifdef G_ENABLE_DEBUG
#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_char (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
#define g_marshal_value_peek_int(v) g_value_get_int (v)
#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
g_value_set_long
g_value_set_pointer
g_value_set_static_string
+g_value_set_schar
g_value_set_string
g_value_set_string_take_ownership
g_value_set_uchar
g_value_get_int64
g_value_get_long
g_value_get_pointer
+g_value_get_schar
g_value_get_string
g_value_get_uchar
g_value_get_uint
* @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,
* 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)
}
/**
+ * 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
/* --- prototypes --- */
+#ifndef G_DISABLE_DEPRECATED
void g_value_set_char (GValue *value,
gchar v_char);
gchar g_value_get_char (const GValue *value);
+#endif
+void g_value_set_schar (GValue *value,
+ gint8 v_char);
+gint8 g_value_get_schar (const GValue *value);
void g_value_set_uchar (GValue *value,
guchar v_uchar);
guchar g_value_get_uchar (const GValue *value);
g_value_unset (&src); \
g_value_unset (&dest);
- CHECK_INT_CONVERSION(G_TYPE_CHAR, char, -124)
+ /* Keep a check for an integer in the range of 0-127 so we're
+ * still testing g_value_get_char(). See
+ * https://bugzilla.gnome.org/show_bug.cgi?id=659870
+ * for why it is broken.
+ */
CHECK_INT_CONVERSION(G_TYPE_CHAR, char, 124)
+
+ CHECK_INT_CONVERSION(G_TYPE_CHAR, schar, -124)
+ CHECK_INT_CONVERSION(G_TYPE_CHAR, schar, 124)
CHECK_INT_CONVERSION(G_TYPE_UCHAR, uchar, 0)
CHECK_INT_CONVERSION(G_TYPE_UCHAR, uchar, 255)
CHECK_INT_CONVERSION(G_TYPE_INT, int, -12345)
g_value_init (&src, G_TYPE_STRING);
g_value_init (&dest, G_TYPE_CHAR);
g_value_set_static_string (&src, "bla");
- g_value_set_char (&dest, 'c');
+ g_value_set_schar (&dest, 'c');
g_assert (!g_value_transform (&src, &dest));
- g_assert_cmpint (g_value_get_char (&dest), ==, 'c');
+ g_assert_cmpint (g_value_get_schar (&dest), ==, 'c');
g_value_unset (&src);
g_value_unset (&dest);
}
g_value_init (&xform, G_TYPE_CHAR);
g_value_transform (&orig, &xform);
g_assert (g_value_get_char (&xform) == 1);
+ g_assert (g_value_get_schar (&xform) == 1);
memset (&xform, 0, sizeof (GValue));
g_value_init (&xform, G_TYPE_UCHAR);
modified = g_param_value_validate (pspec, &value);
g_assert (modified && g_value_get_char (&value) == 40);
+ g_value_set_schar (&value, 0);
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (modified && g_value_get_schar (&value) == 20);
+
+ g_value_set_schar (&value, 20);
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (!modified && g_value_get_schar (&value) == 20);
+
+ g_value_set_schar (&value, 40);
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (!modified && g_value_get_schar (&value) == 40);
+
+ g_value_set_schar (&value, 60);
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (modified && g_value_get_schar (&value) == 40);
+
g_param_spec_unref (pspec);
}