mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-09-27 17:52:58 +02:00
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:
@@ -636,6 +636,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 +651,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)
|
||||
@@ -662,6 +667,41 @@ g_value_get_char (const GValue *value)
|
||||
return value->data[0].v_int;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
Reference in New Issue
Block a user