41 lines
1.4 KiB
Diff
41 lines
1.4 KiB
Diff
From b0ccb1616688290088e49dea2dc0d7fe723136e4 Mon Sep 17 00:00:00 2001
|
|||
From: Philip Withnall <pwithnall@endlessos.org>
|
|||
Date: Mon, 24 Oct 2022 18:43:55 +0100
|
|||
Subject: [PATCH 12/18] gvariant: Port g_variant_deep_copy() to count its
|
|||
iterations directly
|
|||
|
|||
This is equivalent to what `GVariantIter` does, but it means that
|
|||
`g_variant_deep_copy()` is making its own `g_variant_get_child_value()`
|
|||
calls.
|
|||
|
|||
This will be useful in an upcoming commit, where those child values will
|
|||
be inspected a little more deeply.
|
|||
|
|||
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
|
|||
|
|||
Helps: #2121
|
|||
---
|
|||
glib/gvariant.c | 7 +++----
|
|||
1 file changed, 3 insertions(+), 4 deletions(-)
|
|||
|
|||
--- a/glib/gvariant.c
|
|||
+++ b/glib/gvariant.c
|
|||
@@ -5850,14 +5850,13 @@ g_variant_deep_copy (GVariant *value)
|
|||
case G_VARIANT_CLASS_VARIANT:
|
|||
{
|
|||
GVariantBuilder builder;
|
|||
- GVariantIter iter;
|
|||
- GVariant *child;
|
|||
+ gsize i, n_children;
|
|||
|
|||
g_variant_builder_init (&builder, g_variant_get_type (value));
|
|||
- g_variant_iter_init (&iter, value);
|
|||
|
|||
- while ((child = g_variant_iter_next_value (&iter)))
|
|||
+ for (i = 0, n_children = g_variant_n_children (value); i < n_children; i++)
|
|||
{
|
|||
+ GVariant *child = g_variant_get_child_value (value, i);
|
|||
g_variant_builder_add_value (&builder, g_variant_deep_copy (child));
|
|||
g_variant_unref (child);
|
|||
}
|