gvalue: Add explicitly signed g_value_get_schar() and g_value_set_schar()

The documentation for G_TYPE_CHAR says:

"The type designated by G_TYPE_CHAR is unconditionally an 8-bit signed
 integer."

However the return value for g_value_get_char() was just "char" which
in C has an unspecified signedness; on e.g. x86 it's signed (which
matches the GType), but on e.g. PowerPC or ARM, it's not.

We can't break the old API, so we need to suck it up and add new API.
Port most internal users, but keep some tests of the old API too.

https://bugzilla.gnome.org/show_bug.cgi?id=659870
This commit is contained in:
Colin Walters
2011-09-22 16:08:35 -04:00
parent 1df8160fa6
commit f42fe6cdc0
11 changed files with 83 additions and 12 deletions

View File

@@ -718,7 +718,7 @@ typedef struct
gboolean bool_prop;
gboolean anti_bool_prop;
gchar byte_prop;
gint8 byte_prop;
gint int16_prop;
guint16 uint16_prop;
gint int_prop;
@@ -771,7 +771,7 @@ test_object_get_property (GObject *object,
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);
@@ -829,7 +829,7 @@ test_object_set_property (GObject *object,
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);