[libvirt] [PATCH 01/10] Move qemuMonitorFindObjectPath to qemu_monitor_json

Ján Tomko jtomko at redhat.com
Thu Jun 4 13:58:06 UTC 2015


This function is specific to the JSON monitor.
---
 src/qemu/qemu_monitor.c      | 76 ++------------------------------------------
 src/qemu/qemu_monitor_json.c | 72 +++++++++++++++++++++++++++++++++++++++++
 src/qemu/qemu_monitor_json.h |  4 +++
 3 files changed, 78 insertions(+), 74 deletions(-)

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index e9c57f1..d761f51 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -1069,78 +1069,6 @@ qemuMonitorSetOptions(qemuMonitorPtr mon, virJSONValuePtr options)
 
 
 /**
- * Search the qom objects by it's known name.  The name is compared against
- * filed 'type' formatted as 'link<%name>'.
- *
- * This procedure will be call recursively until found or the qom-list is
- * exhausted.
- *
- * Returns:
- *
- *   0  - Found
- *  -1  - Error bail out
- *  -2  - Not found
- *
- * NOTE: This assumes we have already called qemuDomainObjEnterMonitor()
- */
-static int
-qemuMonitorFindObjectPath(qemuMonitorPtr mon,
-                          const char *curpath,
-                          const char *name,
-                          char **path)
-{
-    ssize_t i, npaths = 0;
-    int ret = -2;
-    char *nextpath = NULL;
-    char *type = NULL;
-    qemuMonitorJSONListPathPtr *paths = NULL;
-
-    if (virAsprintf(&type, "link<%s>", name) < 0)
-        return -1;
-
-    VIR_DEBUG("Searching for '%s' Object Path starting at '%s'", type, curpath);
-
-    npaths = qemuMonitorJSONGetObjectListPaths(mon, curpath, &paths);
-    if (npaths < 0)
-        goto cleanup;
-
-    for (i = 0; i < npaths && ret == -2; i++) {
-
-        if (STREQ_NULLABLE(paths[i]->type, type)) {
-            VIR_DEBUG("Path to '%s' is '%s/%s'", type, curpath, paths[i]->name);
-            ret = 0;
-            if (virAsprintf(path, "%s/%s", curpath, paths[i]->name) < 0) {
-                *path = NULL;
-                ret = -1;
-            }
-            goto cleanup;
-        }
-
-        /* Type entries that begin with "child<" are a branch that can be
-         * traversed looking for more entries
-         */
-        if (paths[i]->type && STRPREFIX(paths[i]->type, "child<")) {
-            if (virAsprintf(&nextpath, "%s/%s", curpath, paths[i]->name) < 0) {
-                ret = -1;
-                goto cleanup;
-            }
-
-            ret = qemuMonitorFindObjectPath(mon, nextpath, name, path);
-            VIR_FREE(nextpath);
-        }
-    }
-
- cleanup:
-    for (i = 0; i < npaths; i++)
-        qemuMonitorJSONListPathFree(paths[i]);
-    VIR_FREE(paths);
-    VIR_FREE(nextpath);
-    VIR_FREE(type);
-    return ret;
-}
-
-
-/**
  * Search the qom objects for the balloon driver object by it's known name
  * of "virtio-balloon-pci".  The entry for the driver will be found by using
  * function "qemuMonitorFindObjectPath".
@@ -1183,7 +1111,7 @@ qemuMonitorFindBalloonObjectPath(qemuMonitorPtr mon,
         return -1;
     }
 
-    if (qemuMonitorFindObjectPath(mon, curpath, "virtio-balloon-pci", &path) < 0)
+    if (qemuMonitorJSONFindObjectPath(mon, curpath, "virtio-balloon-pci", &path) < 0)
         return -1;
 
     nprops = qemuMonitorJSONGetObjectListPaths(mon, path, &bprops);
@@ -1232,7 +1160,7 @@ qemuMonitorUpdateVideoMemorySize(qemuMonitorPtr mon,
     QEMU_CHECK_MONITOR(mon);
 
     if (mon->json) {
-        ret = qemuMonitorFindObjectPath(mon, "/", videoName, &path);
+        ret = qemuMonitorJSONFindObjectPath(mon, "/", videoName, &path);
         if (ret < 0) {
             if (ret == -2)
                 virReportError(VIR_ERR_INTERNAL_ERROR,
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index e6da804..69c342d 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -6642,3 +6642,75 @@ qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon,
     virJSONValueFree(reply);
     return ret;
 }
+
+
+/**
+ * Search the qom objects by it's known name.  The name is compared against
+ * filed 'type' formatted as 'link<%name>'.
+ *
+ * This procedure will be call recursively until found or the qom-list is
+ * exhausted.
+ *
+ * Returns:
+ *
+ *   0  - Found
+ *  -1  - Error bail out
+ *  -2  - Not found
+ *
+ * NOTE: This assumes we have already called qemuDomainObjEnterMonitor()
+ */
+int
+qemuMonitorJSONFindObjectPath(qemuMonitorPtr mon,
+                              const char *curpath,
+                              const char *name,
+                              char **path)
+{
+    ssize_t i, npaths = 0;
+    int ret = -2;
+    char *nextpath = NULL;
+    char *type = NULL;
+    qemuMonitorJSONListPathPtr *paths = NULL;
+
+    if (virAsprintf(&type, "link<%s>", name) < 0)
+        return -1;
+
+    VIR_DEBUG("Searching for '%s' Object Path starting at '%s'", type, curpath);
+
+    npaths = qemuMonitorJSONGetObjectListPaths(mon, curpath, &paths);
+    if (npaths < 0)
+        goto cleanup;
+
+    for (i = 0; i < npaths && ret == -2; i++) {
+
+        if (STREQ_NULLABLE(paths[i]->type, type)) {
+            VIR_DEBUG("Path to '%s' is '%s/%s'", type, curpath, paths[i]->name);
+            ret = 0;
+            if (virAsprintf(path, "%s/%s", curpath, paths[i]->name) < 0) {
+                *path = NULL;
+                ret = -1;
+            }
+            goto cleanup;
+        }
+
+        /* Type entries that begin with "child<" are a branch that can be
+         * traversed looking for more entries
+         */
+        if (paths[i]->type && STRPREFIX(paths[i]->type, "child<")) {
+            if (virAsprintf(&nextpath, "%s/%s", curpath, paths[i]->name) < 0) {
+                ret = -1;
+                goto cleanup;
+            }
+
+            ret = qemuMonitorJSONFindObjectPath(mon, nextpath, name, path);
+            VIR_FREE(nextpath);
+        }
+    }
+
+ cleanup:
+    for (i = 0; i < npaths; i++)
+        qemuMonitorJSONListPathFree(paths[i]);
+    VIR_FREE(paths);
+    VIR_FREE(nextpath);
+    VIR_FREE(type);
+    return ret;
+}
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
index 05c9b29..fcc2c86 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -482,4 +482,8 @@ int qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon,
                                        virHashTablePtr info)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 
+int qemuMonitorJSONFindObjectPath(qemuMonitorPtr mon,
+                                  const char *curpath,
+                                  const char *name,
+                                  char **path);
 #endif /* QEMU_MONITOR_JSON_H */
-- 
2.3.6




More information about the libvir-list mailing list