mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-11 03:46:17 +01:00
array: Support clearing an empty array with g_array_remove_range()
Previously, calling g_array_remove_range(array, 0, array->len) on an empty array would result in a precondition failure in g_array_remove_range(), as the given start index (0), was not strictly less than the array length (0). Allow the index to equal the array length, so that zero elements can be removed from any array. A subsequent check makes sure that the array length is not overflowed by the index + length. https://bugzilla.gnome.org/show_bug.cgi?id=763339
This commit is contained in:
parent
7d3d948947
commit
37756a06c9
@ -666,7 +666,7 @@ g_array_remove_range (GArray *farray,
|
|||||||
GRealArray *array = (GRealArray*) farray;
|
GRealArray *array = (GRealArray*) farray;
|
||||||
|
|
||||||
g_return_val_if_fail (array, NULL);
|
g_return_val_if_fail (array, NULL);
|
||||||
g_return_val_if_fail (index_ < array->len, NULL);
|
g_return_val_if_fail (index_ <= array->len, NULL);
|
||||||
g_return_val_if_fail (index_ + length <= array->len, NULL);
|
g_return_val_if_fail (index_ + length <= array->len, NULL);
|
||||||
|
|
||||||
if (array->clear_func != NULL)
|
if (array->clear_func != NULL)
|
||||||
@ -1263,7 +1263,7 @@ g_ptr_array_remove_range (GPtrArray *array,
|
|||||||
guint n;
|
guint n;
|
||||||
|
|
||||||
g_return_val_if_fail (rarray != NULL, NULL);
|
g_return_val_if_fail (rarray != NULL, NULL);
|
||||||
g_return_val_if_fail (index_ < rarray->len, NULL);
|
g_return_val_if_fail (index_ <= rarray->len, NULL);
|
||||||
g_return_val_if_fail (index_ + length <= rarray->len, NULL);
|
g_return_val_if_fail (index_ + length <= rarray->len, NULL);
|
||||||
|
|
||||||
if (rarray->element_free_func != NULL)
|
if (rarray->element_free_func != NULL)
|
||||||
@ -1813,7 +1813,7 @@ g_byte_array_remove_range (GByteArray *array,
|
|||||||
guint length)
|
guint length)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (array, NULL);
|
g_return_val_if_fail (array, NULL);
|
||||||
g_return_val_if_fail (index_ < array->len, NULL);
|
g_return_val_if_fail (index_ <= array->len, NULL);
|
||||||
g_return_val_if_fail (index_ + length <= array->len, NULL);
|
g_return_val_if_fail (index_ + length <= array->len, NULL);
|
||||||
|
|
||||||
return (GByteArray *)g_array_remove_range ((GArray *)array, index_, length);
|
return (GByteArray *)g_array_remove_range ((GArray *)array, index_, length);
|
||||||
|
@ -168,6 +168,10 @@ array_remove_range (void)
|
|||||||
prev = cur;
|
prev = cur;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Ensure the entire array can be cleared, even when empty. */
|
||||||
|
g_array_remove_range (garray, 0, garray->len);
|
||||||
|
g_array_remove_range (garray, 0, garray->len);
|
||||||
|
|
||||||
g_array_free (garray, TRUE);
|
g_array_free (garray, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -711,6 +715,10 @@ byte_array_remove_range (void)
|
|||||||
g_assert (gbarray->data[4*i+3] == 'd');
|
g_assert (gbarray->data[4*i+3] == 'd');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Ensure the entire array can be cleared, even when empty. */
|
||||||
|
g_byte_array_remove_range (gbarray, 0, gbarray->len);
|
||||||
|
g_byte_array_remove_range (gbarray, 0, gbarray->len);
|
||||||
|
|
||||||
g_byte_array_free (gbarray, TRUE);
|
g_byte_array_free (gbarray, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user