summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <pwithnall@endlessos.org>2022-12-29 18:53:35 +0000
committerPhilip Withnall <pwithnall@endlessos.org>2023-01-18 12:15:47 +0000
commit8373f328bd1e996a1521eed3f962af873cfa14a0 (patch)
tree6076334a1999431599a0306ddb1bb0fcc7385b03
parent53702d68c4ee7b939a725ec4a5d707a2bdead1e9 (diff)
downloadglib-8373f328bd1e996a1521eed3f962af873cfa14a0.tar.gz
gvariant: Remove redundant g_variant_serialised_n_children() calls
These functions were previously calling `g_variant_serialised_n_children()` twice just to validate the input, in the case that the input was a serialised variant. That’s not necessary, and checking the number of children in a serialised variant is not necessarily cheap. Move the checks around so that the number of children is only checked once on each code path. This doesn’t introduce any functional changes. Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-rw-r--r--glib/gvariant-core.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/glib/gvariant-core.c b/glib/gvariant-core.c
index 57bbf88cc..3bb313532 100644
--- a/glib/gvariant-core.c
+++ b/glib/gvariant-core.c
@@ -1138,11 +1138,13 @@ GVariant *
g_variant_get_child_value (GVariant *value,
gsize index_)
{
- g_return_val_if_fail (index_ < g_variant_n_children (value), NULL);
g_return_val_if_fail (value->depth < G_MAXSIZE, NULL);
if (~g_atomic_int_get (&value->state) & STATE_SERIALISED)
{
+ /* g_variant_serialised_get_child() does its own checks on index_ */
+ g_return_val_if_fail (index_ < g_variant_n_children (value), NULL);
+
g_variant_lock (value);
if (~value->state & STATE_SERIALISED)
@@ -1233,11 +1235,13 @@ GVariant *
g_variant_maybe_get_child_value (GVariant *value,
gsize index_)
{
- g_return_val_if_fail (index_ < g_variant_n_children (value), NULL);
g_return_val_if_fail (value->depth < G_MAXSIZE, NULL);
if (~g_atomic_int_get (&value->state) & STATE_SERIALISED)
{
+ /* g_variant_serialised_get_child() does its own checks on index_ */
+ g_return_val_if_fail (index_ < g_variant_n_children (value), NULL);
+
g_variant_lock (value);
if (~value->state & STATE_SERIALISED)