On Tue, Jul 21, 2015 at 4:09 PM, Daniel P. Berrange <berrange(a)redhat.com> wrote:
On Tue, Jul 21, 2015 at 03:56:54PM +0100, Zeeshan Ali (Khattak)
wrote:
> On Tue, Jul 21, 2015 at 3:20 PM, Daniel P. Berrange <berrange(a)redhat.com>
wrote:
> > Previously the use of virDomainOpenGraphicsFD API from libvirt
> > 1.2.8 was made to be conditionally compiled. Given this past
> > practice, make use of the virNetworkGetDHCPLeases API
> > conditional too, rather than requiring newer libvirt.
> > ---
> > configure.ac | 6 ++-
> > .../libvirt-gobject-network-dhcp-lease.c | 50 ++++++++++++++++++++++
> > libvirt-gobject/libvirt-gobject-network.c | 12 ++++++
> > 3 files changed, 67 insertions(+), 1 deletion(-)
> >
> > diff --git a/configure.ac b/configure.ac
> > index 26beada..228788e 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -9,7 +9,7 @@ AC_CANONICAL_HOST
> >
> > AM_SILENT_RULES([yes])
> >
> > -LIBVIRT_REQUIRED=1.2.6
> > +LIBVIRT_REQUIRED=0.10.2
> > AC_SUBST([LIBVIRT_REQUIRED]) dnl used in the .spec file
> > GLIB2_REQUIRED=2.36.0
> > AC_SUBST([GLIB2_REQUIRED]) dnl used in the .spec file
> > @@ -97,6 +97,10 @@ PKG_CHECK_MODULES(LIBVIRT, libvirt >= $LIBVIRT_REQUIRED)
> > AC_CHECK_LIB([virt],
> > [virDomainOpenGraphicsFD],
> > [AC_DEFINE([HAVE_VIR_DOMAIN_OPEN_GRAPHICS_FD], 1, [Have
virDomainOpenGraphicsFD?])])
> > +# virNetworkGetDHCPLeases was introduced in libvirt 1.2.6
> > +AC_CHECK_LIB([virt],
> > + [virNetworkGetDHCPLeases],
> > + [AC_DEFINE([HAVE_VIR_NETWORK_GET_DHCP_LEASES], 1, [Have
virNetworkGetDHCPLeases?])])
> > enable_tests=no
> > PKG_CHECK_MODULES(GLIB2, glib-2.0 >= $GLIB2_TEST_REQUIRED,
> > [enable_tests=yes],
> > diff --git a/libvirt-gobject/libvirt-gobject-network-dhcp-lease.c
b/libvirt-gobject/libvirt-gobject-network-dhcp-lease.c
> > index 6ac3c14..90a402b 100644
> > --- a/libvirt-gobject/libvirt-gobject-network-dhcp-lease.c
> > +++ b/libvirt-gobject/libvirt-gobject-network-dhcp-lease.c
> > @@ -30,14 +30,20 @@
> > #include "libvirt-glib/libvirt-glib.h"
> > #include "libvirt-gobject/libvirt-gobject.h"
> > #include "libvirt-gobject-compat.h"
> > +#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
> > #include
"libvirt-gobject/libvirt-gobject-network-dhcp-lease-private.h"
> > +#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
> >
> > #define GVIR_NETWORK_DHCP_LEASE_GET_PRIVATE(obj) \
> > (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_NETWORK_DHCP_LEASE,
GVirNetworkDHCPLeasePrivate))
> >
> > struct _GVirNetworkDHCPLeasePrivate
> > {
> > +#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
> > virNetworkDHCPLeasePtr handle;
> > +#else
> > + void *handle;
> > +#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
> > };
> >
> > G_DEFINE_TYPE(GVirNetworkDHCPLease, gvir_network_dhcp_lease, G_TYPE_OBJECT);
> > @@ -75,8 +81,10 @@ static void gvir_network_dhcp_lease_set_property(GObject
*object,
> >
> > switch (prop_id) {
> > case PROP_HANDLE:
> > +#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
> > if (priv->handle)
> > virNetworkDHCPLeaseFree(priv->handle);
> > +#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
> > priv->handle = g_value_get_pointer(value);
> > break;
> >
> > @@ -89,11 +97,15 @@ static void gvir_network_dhcp_lease_set_property(GObject
*object,
> > static void gvir_network_dhcp_lease_finalize(GObject *object)
> > {
> > GVirNetworkDHCPLease *lease = GVIR_NETWORK_DHCP_LEASE(object);
> > +#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
> > GVirNetworkDHCPLeasePrivate *priv = lease->priv;
> > +#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
> >
> > g_debug("Finalize GVirNetworkDHCPLease=%p", lease);
>
> Why not just move this debug below to avoid adding two #ifdef here?
I want the debug message to be the first thing, so you see the
debug message in the case that the libvirt API call crashes the
program.
> > diff --git a/libvirt-gobject/libvirt-gobject-network.c
b/libvirt-gobject/libvirt-gobject-network.c
> > index 45dbb71..a278105 100644
> > --- a/libvirt-gobject/libvirt-gobject-network.c
> > +++ b/libvirt-gobject/libvirt-gobject-network.c
> > @@ -29,7 +29,9 @@
> > #include "libvirt-glib/libvirt-glib.h"
> > #include "libvirt-gobject/libvirt-gobject.h"
> > #include "libvirt-gobject-compat.h"
> > +#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
> > #include
"libvirt-gobject/libvirt-gobject-network-dhcp-lease-private.h"
> > +#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
> >
> > #define GVIR_NETWORK_GET_PRIVATE(obj) \
> > (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_NETWORK,
GVirNetworkPrivate))
> > @@ -249,14 +251,17 @@ GList *gvir_network_get_dhcp_leases(GVirNetwork *network,
> > guint flags,
> > GError **err)
> > {
> > +#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
> > virNetworkDHCPLeasePtr *leases;
> > GList *ret = NULL;
> > int num_leases, i;
> > +#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
> >
> > g_return_val_if_fail(GVIR_IS_NETWORK(network), NULL);
> > g_return_val_if_fail(err == NULL || *err == NULL, NULL);
> > g_return_val_if_fail(flags == 0, NULL);
> >
> > +#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
>
> Similarly here. I'd just add on #ifdef. If macro is not defined, just
> return NULL.
You mean to skip the g_return_val_if_fail calls ?
Ah! Didn't think of that. :)
--
Regards,
Zeeshan Ali (Khattak)
________________________________________
Befriend GNOME:
http://www.gnome.org/friends/