[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [libvirt-glib][PATCH v3 2/2] gobject: Introduce gvir_connection_get_version



which is basically a wrapper for virConnectGetVersion().
---
 examples/conn-test.c                         |   13 ++++++++
 libvirt-gobject/libvirt-gobject-connection.c |   40 ++++++++++++++++++++++++++
 libvirt-gobject/libvirt-gobject-connection.h |    3 +-
 libvirt-gobject/libvirt-gobject.sym          |    1 +
 4 files changed, 56 insertions(+), 1 deletions(-)

diff --git a/examples/conn-test.c b/examples/conn-test.c
index b90d2b0..051f96a 100644
--- a/examples/conn-test.c
+++ b/examples/conn-test.c
@@ -32,6 +32,8 @@ do_connection_open(GObject *source,
     GVirConnection *conn = GVIR_CONNECTION(source);
     GError *err = NULL;
     gchar *hv_name = NULL;
+    gulong hv_version = 0;
+    guint major, minor, micro;
 
     if (!gvir_connection_open_finish(conn, res, &err)) {
         g_error("%s", err->message);
@@ -46,6 +48,17 @@ do_connection_open(GObject *source,
 
     g_print("Hypervisor name: %s\n", hv_name);
 
+    if (!(hv_version = gvir_connection_get_version(conn, &err))) {
+        g_error("%s", err->message);
+        goto cleanup;
+    }
+
+    major = hv_version / 1000000;
+    hv_version %= 1000000;
+    minor = hv_version / 1000;
+    micro = hv_version % 1000;
+    g_print("Hypervisor version: %u.%u.%u\n", major, minor, micro);
+
 cleanup:
     g_free(hv_name);
     g_object_unref(conn);
diff --git a/libvirt-gobject/libvirt-gobject-connection.c b/libvirt-gobject/libvirt-gobject-connection.c
index 75bf041..e1b765d 100644
--- a/libvirt-gobject/libvirt-gobject-connection.c
+++ b/libvirt-gobject/libvirt-gobject-connection.c
@@ -1070,6 +1070,46 @@ cleanup:
     return ret;
 }
 
+/**
+ * gvir_connection_get_version:
+ * @conn: a #GVirConnection
+ * @err: return location for any #GError
+ *
+ * Get version of current hypervisor used.
+ *
+ * Return value: version on success, 0 otherwise and @err set.
+ */
+gulong
+gvir_connection_get_version(GVirConnection *conn,
+                            GError **err)
+{
+    GVirConnectionPrivate *priv;
+    gulong ret = 0;
+
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, 0);
+
+    priv = conn->priv;
+    /* Stop another thread closing the connection just at the minute */
+    virConnectRef(priv->conn);
+    if (!priv->conn) {
+        g_set_error_literal(err, GVIR_CONNECTION_ERROR, 0,
+                            "Connection is not open");
+        goto cleanup;
+    }
+
+    if (virConnectGetVersion(priv->conn, &ret) < 0) {
+        gvir_set_error_literal(err, GVIR_CONNECTION_ERROR, 0,
+                               "Unable to get hypervisor version");
+        goto cleanup;
+    }
+
+cleanup:
+    if (priv->conn)
+        virConnectClose(priv->conn);
+    return ret;
+}
+
 static void gvir_domain_ref(gpointer obj, gpointer ignore G_GNUC_UNUSED)
 {
     g_object_ref(obj);
diff --git a/libvirt-gobject/libvirt-gobject-connection.h b/libvirt-gobject/libvirt-gobject-connection.h
index 62eb024..f91ca05 100644
--- a/libvirt-gobject/libvirt-gobject-connection.h
+++ b/libvirt-gobject/libvirt-gobject-connection.h
@@ -114,7 +114,8 @@ const gchar *gvir_connection_get_uri(GVirConnection *conn);
 
 gchar *gvir_connection_get_hypervisor_name(GVirConnection *conn,
                                            GError **err);
-
+gulong gvir_connection_get_version(GVirConnection *conn,
+                                   GError **err);
 
 GList *gvir_connection_get_domains(GVirConnection *conn);
 GVirDomain *gvir_connection_get_domain(GVirConnection *conn,
diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
index 2c2f1f4..c496540 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -197,6 +197,7 @@ LIBVIRT_GOBJECT_0.1.2 {
 LIBVIRT_GOBJECT_0.1.3 {
   global:
     gvir_connection_get_hypervisor_name;
+    gvir_connection_get_version;
 } LIBVIRT_GOBJECT_0.1.2;
 
 # .... define new API here using predicted next version number ....
-- 
1.7.8.6


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]