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(a)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(a)redhat.com>