[gnome-builder] flatpak: add helper to generate/parse gvariant



commit 1f5f45fa70250a8515917eadb99816d0def88628
Author: Christian Hergert <chergert redhat com>
Date:   Mon May 3 15:34:13 2021 -0700

    flatpak: add helper to generate/parse gvariant

 .../flatpak/daemon/ipc-flatpak-service-impl.c      | 28 +++++++-------
 src/plugins/flatpak/daemon/ipc-flatpak-util.h      | 45 ++++++++++++++++++++++
 src/plugins/flatpak/daemon/test-flatpak.c          | 18 ++++++---
 3 files changed, 70 insertions(+), 21 deletions(-)
---
diff --git a/src/plugins/flatpak/daemon/ipc-flatpak-service-impl.c 
b/src/plugins/flatpak/daemon/ipc-flatpak-service-impl.c
index 5c0d08499..e7c594347 100644
--- a/src/plugins/flatpak/daemon/ipc-flatpak-service-impl.c
+++ b/src/plugins/flatpak/daemon/ipc-flatpak-service-impl.c
@@ -87,7 +87,6 @@ static Install  *install_new                                 (IpcFlatpakServiceI
 static void      install_free                                (Install                *install);
 static void      install_reload                              (IpcFlatpakServiceImpl  *self,
                                                               Install                *install);
-static GVariant *runtime_to_variant                          (const Runtime          *runtime);
 static void      runtime_free                                (Runtime                *runtime);
 static gboolean  runtime_equal                               (const Runtime          *a,
                                                               const Runtime          *b);
@@ -175,6 +174,18 @@ is_known_free (IsKnown *state)
   g_slice_free (IsKnown, state);
 }
 
+static GVariant *
+runtime_to_variant (const Runtime *runtime)
+{
+  return runtime_variant_new (runtime->name,
+                              runtime->arch,
+                              runtime->branch,
+                              runtime->sdk_name,
+                              runtime->sdk_branch,
+                              (const char *)g_bytes_get_data (runtime->metadata, NULL),
+                              runtime->sdk_extension);
+}
+
 static void
 add_runtime (IpcFlatpakServiceImpl *self,
              Runtime               *runtime)
@@ -227,19 +238,6 @@ runtime_equal (const Runtime *a,
          g_str_equal (a->branch, b->branch);
 }
 
-static GVariant *
-runtime_to_variant (const Runtime *runtime)
-{
-  return g_variant_take_ref (g_variant_new ("(ssssssb)",
-                                            runtime->name,
-                                            runtime->arch,
-                                            runtime->branch,
-                                            runtime->sdk_name,
-                                            runtime->sdk_branch,
-                                            (const char *)g_bytes_get_data (runtime->metadata, NULL),
-                                            runtime->sdk_extension));
-}
-
 static Install *
 install_new (IpcFlatpakServiceImpl  *self,
              FlatpakInstallation    *installation,
@@ -411,7 +409,7 @@ ipc_flatpak_service_impl_list_runtimes (IpcFlatpakService     *service,
   g_assert (IPC_IS_FLATPAK_SERVICE_IMPL (self));
   g_assert (G_IS_DBUS_METHOD_INVOCATION (invocation));
 
-  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ssssssb)"));
+  g_variant_builder_init (&builder, RUNTIME_ARRAY_VARIANT_TYPE);
 
   for (guint i = 0; i < self->runtimes->len; i++)
     {
diff --git a/src/plugins/flatpak/daemon/ipc-flatpak-util.h b/src/plugins/flatpak/daemon/ipc-flatpak-util.h
index d09099f75..91a00447a 100644
--- a/src/plugins/flatpak/daemon/ipc-flatpak-util.h
+++ b/src/plugins/flatpak/daemon/ipc-flatpak-util.h
@@ -24,6 +24,10 @@
 
 G_BEGIN_DECLS
 
+#define RUNTIME_VARIANT_STRING     "(ssssssb)"
+#define RUNTIME_VARIANT_TYPE       G_VARIANT_TYPE(RUNTIME_VARIANT_STRING)
+#define RUNTIME_ARRAY_VARIANT_TYPE G_VARIANT_TYPE("a" RUNTIME_VARIANT_STRING)
+
 static inline gboolean
 complete_wrapped_error (GDBusMethodInvocation *invocation,
                         const GError          *error)
@@ -39,4 +43,45 @@ complete_wrapped_error (GDBusMethodInvocation *invocation,
   return TRUE;
 }
 
+static inline GVariant *
+runtime_variant_new (const char *name,
+                     const char *arch,
+                     const char *branch,
+                     const char *sdk_name,
+                     const char *sdk_branch,
+                     const char *metadata,
+                     gboolean    is_extension)
+{
+  return g_variant_take_ref (g_variant_new (RUNTIME_VARIANT_STRING,
+                                            name,
+                                            arch,
+                                            branch,
+                                            sdk_name,
+                                            sdk_branch,
+                                            metadata,
+                                            is_extension));
+}
+
+static inline gboolean
+runtime_variant_parse (GVariant    *variant,
+                       const char **name,
+                       const char **arch,
+                       const char **branch,
+                       const char **sdk_name,
+                       const char **sdk_branch,
+                       const char **metadata,
+                       gboolean    *is_extension)
+{
+  if (variant == NULL)
+    return FALSE;
+
+  if (!g_variant_is_of_type (variant, RUNTIME_VARIANT_TYPE))
+    return FALSE;
+
+  g_variant_get (variant, "(&s&s&s&s&s&sb)",
+                 name, arch, branch, sdk_name, sdk_branch, metadata, is_extension);
+
+  return TRUE;
+}
+
 G_END_DECLS
diff --git a/src/plugins/flatpak/daemon/test-flatpak.c b/src/plugins/flatpak/daemon/test-flatpak.c
index b3e3b160a..e0cb18081 100644
--- a/src/plugins/flatpak/daemon/test-flatpak.c
+++ b/src/plugins/flatpak/daemon/test-flatpak.c
@@ -26,6 +26,7 @@
 #include <unistd.h>
 
 #include "ipc-flatpak-service.h"
+#include "ipc-flatpak-util.h"
 
 static void
 on_runtime_added_cb (IpcFlatpakService *service,
@@ -38,13 +39,13 @@ on_runtime_added_cb (IpcFlatpakService *service,
   const gchar *sdk_branch;
   const gchar *metadata;
   gboolean sdk_extension;
+  gboolean ret;
 
   g_assert (IPC_IS_FLATPAK_SERVICE (service));
   g_assert (info != NULL);
-  g_assert (g_variant_is_of_type (info, G_VARIANT_TYPE ("(ssssssb)")));
 
-  g_variant_get (info, "(&s&s&s&s&s&sb)",
-                 &name, &arch, &branch, &sdk_name, &sdk_branch, &metadata, &sdk_extension);
+  ret = runtime_variant_parse (info, &name, &arch, &branch, &sdk_name, &sdk_branch, &metadata, 
&sdk_extension);
+  g_assert_true (ret);
 
   if (!sdk_extension)
     g_message ("Runtime Added: %s/%s/%s with SDK %s//%s",
@@ -82,6 +83,7 @@ add_install_cb (GObject      *object,
 
   if (g_variant_iter_init (&iter, runtimes))
     {
+      GVariant *value;
       const gchar *name;
       const gchar *arch;
       const gchar *branch;
@@ -90,9 +92,13 @@ add_install_cb (GObject      *object,
       const gchar *metadata;
       gboolean sdk_extension;
 
-      while (g_variant_iter_next (&iter, "(&s&s&s&s&s&sb)", &name, &arch, &branch, &sdk_name, &sdk_branch, 
&metadata, &sdk_extension))
-        g_message ("  %s/%s/%s with SDK %s//%s (Extension: %d)",
-                   name, arch, branch, sdk_name, sdk_branch, sdk_extension);
+      while ((value = g_variant_iter_next_value (&iter)))
+        {
+          ret = runtime_variant_parse (value, &name, &arch, &branch, &sdk_name, &sdk_branch, &metadata, 
&sdk_extension);
+          g_assert_true (ret);
+          g_message ("  %s/%s/%s with SDK %s//%s (Extension: %d)",
+                     name, arch, branch, sdk_name, sdk_branch, sdk_extension);
+        }
     }
 
   g_message ("Checking for a missing runtime");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]