mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-16 12:28:48 +02:00
fixed param_value_array_values_cmp(), param_value_array_validate() and
Fri Jan 11 12:26:36 2002 Tim Janik <timj@gtk.org> * gparamspecs.c: fixed param_value_array_values_cmp(), param_value_array_validate() and param_value_array_set_default() to deal with NULL value arrays.
This commit is contained in:
parent
58ea3ab8d9
commit
c0984f4bbe
@ -1,3 +1,10 @@
|
|||||||
|
Fri Jan 11 12:26:36 2002 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
|
* gparamspecs.c: fixed param_value_array_values_cmp(),
|
||||||
|
param_value_array_validate() and
|
||||||
|
param_value_array_set_default() to deal with NULL value
|
||||||
|
arrays.
|
||||||
|
|
||||||
Wed Jan 9 05:23:27 2002 Tim Janik <timj@gtk.org>
|
Wed Jan 9 05:23:27 2002 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gobject.h (G_OBJECT_WARN_INVALID_PROPERTY_ID): cosmetic fix.
|
* gobject.h (G_OBJECT_WARN_INVALID_PROPERTY_ID): cosmetic fix.
|
||||||
|
@ -825,10 +825,14 @@ param_value_array_set_default (GParamSpec *pspec,
|
|||||||
{
|
{
|
||||||
GParamSpecValueArray *aspec = G_PARAM_SPEC_VALUE_ARRAY (pspec);
|
GParamSpecValueArray *aspec = G_PARAM_SPEC_VALUE_ARRAY (pspec);
|
||||||
|
|
||||||
g_return_if_fail (value->data[0].v_pointer != NULL); /* paranoid */
|
if (!value->data[0].v_pointer && aspec->fixed_n_elements)
|
||||||
|
value->data[0].v_pointer = g_value_array_new (aspec->fixed_n_elements);
|
||||||
/* g_value_reset (value); already done */
|
|
||||||
value_array_ensure_size (value->data[0].v_pointer, aspec->fixed_n_elements);
|
if (value->data[0].v_pointer)
|
||||||
|
{
|
||||||
|
/* g_value_reset (value); already done */
|
||||||
|
value_array_ensure_size (value->data[0].v_pointer, aspec->fixed_n_elements);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -839,32 +843,36 @@ param_value_array_validate (GParamSpec *pspec,
|
|||||||
GValueArray *value_array = value->data[0].v_pointer;
|
GValueArray *value_array = value->data[0].v_pointer;
|
||||||
guint changed = 0;
|
guint changed = 0;
|
||||||
|
|
||||||
g_return_val_if_fail (value->data[0].v_pointer != NULL, FALSE); /* paranoid */
|
if (!value->data[0].v_pointer && aspec->fixed_n_elements)
|
||||||
|
value->data[0].v_pointer = g_value_array_new (aspec->fixed_n_elements);
|
||||||
|
|
||||||
/* ensure array size validity */
|
if (value->data[0].v_pointer)
|
||||||
changed += value_array_ensure_size (value_array, aspec->fixed_n_elements);
|
|
||||||
|
|
||||||
/* ensure array values validity against a present element spec */
|
|
||||||
if (aspec->element_spec)
|
|
||||||
{
|
{
|
||||||
GParamSpec *element_spec = aspec->element_spec;
|
/* ensure array size validity */
|
||||||
guint i;
|
changed += value_array_ensure_size (value_array, aspec->fixed_n_elements);
|
||||||
|
|
||||||
for (i = 0; i < value_array->n_values; i++)
|
/* ensure array values validity against a present element spec */
|
||||||
|
if (aspec->element_spec)
|
||||||
{
|
{
|
||||||
GValue *element = value_array->values + i;
|
GParamSpec *element_spec = aspec->element_spec;
|
||||||
|
guint i;
|
||||||
/* need to fixup value type, or ensure that the array value is initialized at all */
|
|
||||||
if (!g_value_type_compatible (G_VALUE_TYPE (element), G_PARAM_SPEC_VALUE_TYPE (element_spec)))
|
for (i = 0; i < value_array->n_values; i++)
|
||||||
{
|
{
|
||||||
if (G_VALUE_TYPE (element) != 0)
|
GValue *element = value_array->values + i;
|
||||||
g_value_unset (element);
|
|
||||||
g_value_init (element, G_PARAM_SPEC_VALUE_TYPE (element_spec));
|
/* need to fixup value type, or ensure that the array value is initialized at all */
|
||||||
g_param_value_set_default (element_spec, element);
|
if (!g_value_type_compatible (G_VALUE_TYPE (element), G_PARAM_SPEC_VALUE_TYPE (element_spec)))
|
||||||
changed++;
|
{
|
||||||
|
if (G_VALUE_TYPE (element) != 0)
|
||||||
|
g_value_unset (element);
|
||||||
|
g_value_init (element, G_PARAM_SPEC_VALUE_TYPE (element_spec));
|
||||||
|
g_param_value_set_default (element_spec, element);
|
||||||
|
changed++;
|
||||||
|
}
|
||||||
|
/* validate array value against element_spec */
|
||||||
|
changed += g_param_value_validate (element_spec, element);
|
||||||
}
|
}
|
||||||
/* validate array value against element_spec */
|
|
||||||
changed += g_param_value_validate (element_spec, element);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -880,8 +888,8 @@ param_value_array_values_cmp (GParamSpec *pspec,
|
|||||||
GValueArray *value_array1 = value1->data[0].v_pointer;
|
GValueArray *value_array1 = value1->data[0].v_pointer;
|
||||||
GValueArray *value_array2 = value2->data[0].v_pointer;
|
GValueArray *value_array2 = value2->data[0].v_pointer;
|
||||||
|
|
||||||
g_return_val_if_fail (value1->data[0].v_pointer != NULL, -1); /* paranoid */
|
if (!value_array1 || !value_array2)
|
||||||
g_return_val_if_fail (value2->data[0].v_pointer != NULL, 1); /* paranoid */
|
return value_array2 ? -1 : value_array1 != value_array2;
|
||||||
|
|
||||||
if (value_array1->n_values != value_array2->n_values)
|
if (value_array1->n_values != value_array2->n_values)
|
||||||
return value_array1->n_values < value_array2->n_values ? -1 : 1;
|
return value_array1->n_values < value_array2->n_values ? -1 : 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user