[libvirt] [PATCH 02/20] public API: prefer unsigned int for flags

Daniel Veillard veillard at redhat.com
Thu Jul 7 03:04:57 UTC 2011


On Wed, Jul 06, 2011 at 05:23:45PM -0600, Eric Blake wrote:
> Most APIs use 'unsigned int flags'; but a few stragglers were using
> a signed value.  In particular, the vir*GetXMLDesc APIs were
> split-brain, with inconsistent choice of types.  Although it is
> an API break to use 'int' instead of 'unsigned int', it is ABI
> compatible (pre-compiled apps will have no difference in behavior),
> and generally apps can be recompiled without any issue (only rare
> apps that compiled with extremely high warning levels, or which
> pass libvirt API around as typed function pointers, would have to
> make any code changes to deal with the change).
> 
> The migrate APIs use 'unsigned long flags', which can't be changed,
> due to ABI constraints.
> 
> This patch intentionally touches only the public API, to prove the
> claim that most existing code (including driver callbacks and virsh)
> still compiles just fine in spite of the type change.
> 
> * include/libvirt/libvirt.h.in (virConnectOpenAuth)
> (virDomainCoreDump, virDomainGetXMLDesc, virNetworkGetXMLDesc)
> (virNWFilterGetXMLDesc): Use unsigned int for flags.
> * src/libvirt.c (virConnectOpenAuth, virDomainCoreDump)
> (virDomainGetXMLDesc, virNetworkGetXMLDesc)
> (virNWFilterGetXMLDesc, do_open): Update accordingly.
> ---
>  include/libvirt/libvirt.h.in |   10 +++++-----
>  src/libvirt.c                |   12 ++++++------
>  2 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index 8e20f75..a22c1c9 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -851,7 +851,7 @@ virConnectPtr           virConnectOpen          (const char *name);
>  virConnectPtr           virConnectOpenReadOnly  (const char *name);
>  virConnectPtr           virConnectOpenAuth      (const char *name,
>                                                   virConnectAuthPtr auth,
> -                                                 int flags);
> +                                                 unsigned int flags);
>  int                     virConnectRef           (virConnectPtr conn);
>  int                     virConnectClose         (virConnectPtr conn);
>  const char *            virConnectGetType       (virConnectPtr conn);
> @@ -961,7 +961,7 @@ int                    virDomainManagedSaveRemove(virDomainPtr dom,
>   */
>  int                     virDomainCoreDump       (virDomainPtr domain,
>                                                   const char *to,
> -                                                 int flags);
> +                                                 unsigned int flags);
> 
>  /*
>   * Screenshot of current domain console
> @@ -1115,7 +1115,7 @@ typedef enum {
>  } virDomainXMLFlags;
> 
>  char *                  virDomainGetXMLDesc     (virDomainPtr domain,
> -                                                 int flags);
> +                                                 unsigned int flags);
> 
> 
>  char *                  virConnectDomainXMLFromNative(virConnectPtr conn,
> @@ -1471,7 +1471,7 @@ int                     virNetworkGetUUID       (virNetworkPtr network,
>  int                     virNetworkGetUUIDString (virNetworkPtr network,
>                                                   char *buf);
>  char *                  virNetworkGetXMLDesc    (virNetworkPtr network,
> -                                                 int flags);
> +                                                 unsigned int flags);
>  char *                  virNetworkGetBridgeName (virNetworkPtr network);
> 
>  int                     virNetworkGetAutostart  (virNetworkPtr network,
> @@ -2790,7 +2790,7 @@ int                     virNWFilterGetUUID       (virNWFilterPtr nwfilter,
>  int                     virNWFilterGetUUIDString (virNWFilterPtr nwfilter,
>                                                    char *buf);
>  char *                  virNWFilterGetXMLDesc    (virNWFilterPtr nwfilter,
> -                                                  int flags);
> +                                                  unsigned int flags);
> 
> 
>  int virDomainOpenConsole(virDomainPtr dom,
> diff --git a/src/libvirt.c b/src/libvirt.c
> index 5e1451c..7e70caa 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -955,7 +955,7 @@ error:
>  static virConnectPtr
>  do_open (const char *name,
>           virConnectAuthPtr auth,
> -         int flags)
> +         unsigned int flags)
>  {
>      int i, res;
>      virConnectPtr ret;
> @@ -1269,7 +1269,7 @@ error:
>  virConnectPtr
>  virConnectOpenAuth(const char *name,
>                     virConnectAuthPtr auth,
> -                   int flags)
> +                   unsigned int flags)
>  {
>      virConnectPtr ret = NULL;
>      if (!initialized)
> @@ -2365,7 +2365,7 @@ error:
>   * Returns 0 in case of success and -1 in case of failure.
>   */
>  int
> -virDomainCoreDump(virDomainPtr domain, const char *to, int flags)
> +virDomainCoreDump(virDomainPtr domain, const char *to, unsigned int flags)
>  {
>      virConnectPtr conn;
> 
> @@ -3359,7 +3359,7 @@ error:
>   *         the caller must free() the returned value.
>   */
>  char *
> -virDomainGetXMLDesc(virDomainPtr domain, int flags)
> +virDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
>  {
>      virConnectPtr conn;
> 
> @@ -8449,7 +8449,7 @@ error:
>   *         the caller must free() the returned value.
>   */
>  char *
> -virNetworkGetXMLDesc(virNetworkPtr network, int flags)
> +virNetworkGetXMLDesc(virNetworkPtr network, unsigned int flags)
>  {
>      virConnectPtr conn;
>      VIR_DEBUG("network=%p, flags=%x", network, flags);
> @@ -14217,7 +14217,7 @@ error:
>   *         the caller must free() the returned value.
>   */
>  char *
> -virNWFilterGetXMLDesc(virNWFilterPtr nwfilter, int flags)
> +virNWFilterGetXMLDesc(virNWFilterPtr nwfilter, unsigned int flags)
>  {
>      virConnectPtr conn;
>      VIR_DEBUG("nwfilter=%p, flags=%x", nwfilter, flags);

  Yes I think that's fine, I'm not worried by this change of API
as it will be strictly compatible in practice,

ACK,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list