[gnome-builder] flatpak: add helper to generate/parse gvariant
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] flatpak: add helper to generate/parse gvariant
- Date: Mon, 3 May 2021 22:42:27 +0000 (UTC)
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]