I am trying to use the systemd API (SetLinkDomain) with gdbus bindings, below is the example code,
GVariant *BuidArray()
{
GVariantBuilder *struc = g_variant_builder_new(G_VARIANT_TYPE("(sb)"));
const char *name = "abc.net";
g_variant_builder_add(struc, "s", name);
g_variant_builder_add(struc, "b", TRUE);
GVariant *ret = g_variant_builder_end(struc);
g_variant_builder_unref(struc);
return ret;
}
GVariantBuilder *array = g_variant_builder_new(G_VARIANT_TYPE("(a(sb))"));
g_variant_builder_add_value(array, BuidArray());
result = g_dbus_connection_call_sync (session,
"org.freedesktop.resolve1",
"/org/freedesktop/resolve1",
"org.freedesktop.resolve1.Manager",
"SetLinkDomains",
g_variant_new("(ia(sb))", 2, g_variant_builder_end(array)),
NULL,
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL,
&error);
if (result == nullptr)
{
std::cout << "Failed to call setLinkDomains " << error->message << std::endl;
}
above code is not working and giving below error.
(process:19628): GLib-CRITICAL **: 10:29:01.904: g_variant_builder_add_value: assertion '!GVSB(builder)->expected_type || g_variant_is_of_type (value, GVSB(builder)->expected_type)' failed
(process:19628): GLib-CRITICAL **: 10:29:01.904: g_variant_builder_end: assertion 'GVSB(builder)->offset >= GVSB(builder)->min_items' failed
I think I am doing mistake in passing the parameter (ia(sb)) to GDBus API, Can any one help me here.
GVariantBuilder *array = g_variant_builder_new(G_VARIANT_TYPE("(a(sb))"));must beGVariantBuilder *array = g_variant_builder_new(G_VARIANT_TYPE("a(sb)"));