
On Fri, May 04, 2018 at 10:38:27AM +0200, Katerina Koukiou wrote:
Converting ENUMS to str can be user friendly though it can be problematic in matters of backward compatibility.
In particular when some ENUM in libvirt API will introduce a new constant, libvirt-dbus will fail with:
size of array ‘_GStaticAssertCompileTimeAssertion_5’ is negative
So using ints is preferable to avoid the previous issue.
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 14 ++-- src/domain.c | 172 ++++---------------------------------------- tests/test_domain.py | 6 +- 3 files changed, 25 insertions(+), 167 deletions(-)
[...]
diff --git a/src/domain.c b/src/domain.c index e305fa3..40cf2f7 100644 --- a/src/domain.c +++ b/src/domain.c
[...]
@@ -137,12 +68,8 @@ virtDBusDomainMemoryStatsToGVariant(virDomainMemoryStatPtr stats,
g_variant_builder_init(&builder, G_VARIANT_TYPE("a{st}"));
- for (gint i = 0; i < nr_stats; i++) { - const gchar *memoryStat = virtDBusDomainMemoryStatTypeToString(stats[i].tag); - if (!memoryStat) - continue; - g_variant_builder_add(&builder, "{st}", memoryStat, stats[i].val); - } + for (gint i = 0; i < nr_stats; i++) + g_variant_builder_add(&builder, "{ut}", stats[i].tag, stats[i].val);
MemoryStats method needs to be updated in the introspection file.
return g_variant_builder_end(&builder); }
[...]
@@ -1355,7 +1252,6 @@ virtDBusDomainGetJobInfo(GVariant *inArgs G_GNUC_UNUSED, virtDBusConnect *connect = userData; g_autoptr(virDomain) domain = NULL; g_autofree virDomainJobInfoPtr jobInfo = NULL; - const gchar *jobTypeStr;
domain = virtDBusDomainGetVirDomain(connect, objectPath, error); if (!domain) @@ -1365,13 +1261,7 @@ virtDBusDomainGetJobInfo(GVariant *inArgs G_GNUC_UNUSED, if (virDomainGetJobInfo(domain, jobInfo) < 0) return virtDBusUtilSetLastVirtError(error);
- jobTypeStr = virtDBusDomainJobTypeToString(jobInfo->type); - if (!jobTypeStr) { - g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, - "Can't format virDomainJobType '%d' to string.", jobInfo->type); - return; - } - *outArgs = g_variant_new("((sttttttttttt))", jobTypeStr, + *outArgs = g_variant_new("((uttttttttttt))", jobInfo->type,
GetJobInfo method needs to be updated in the introspection file.
jobInfo->timeElapsed, jobInfo->timeRemaining, jobInfo->dataTotal, jobInfo->dataProcessed, jobInfo->dataRemaining, jobInfo->memTotal,
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>