[libvirt] [dbus PATCH v2 1/9] Abandon usage of all *TypeToString functions in domain.c

Pavel Hrdina phrdina at redhat.com
Fri May 4 14:07:57 UTC 2018


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 at 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 at redhat.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180504/d5b4ed08/attachment-0001.sig>


More information about the libvir-list mailing list