[PATCH 09/12] qemuAgentGetOSInfo: expose 'report_unsupported' argument

Peter Krempa pkrempa at redhat.com
Mon Mar 16 08:35:51 UTC 2020


Use qemuAgentCommandFull so that callers of qemuAgentGetOSInfo can
suppress error reports if the function is not supported by the guest
agent.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_agent.c  | 17 +++++++++--------
 src/qemu/qemu_agent.h  |  3 ++-
 src/qemu/qemu_driver.c |  2 +-
 tests/qemuagenttest.c  |  4 ++--
 4 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index 261fc67021..77f3247602 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -2411,27 +2411,28 @@ qemuAgentGetUsers(qemuAgentPtr agent,
 }

 /* Returns: 0 on success
- *          -2 when agent command is not supported by the agent
- *          -1 otherwise
+ *          -2 when agent command is not supported by the agent and
+ *             'report_unsupported' is false (libvirt error is not reported)
+ *          -1 otherwise (libvirt error is reported)
  */
 int
 qemuAgentGetOSInfo(qemuAgentPtr agent,
                    virTypedParameterPtr *params,
                    int *nparams,
-                   int *maxparams)
+                   int *maxparams,
+                   bool report_unsupported)
 {
     g_autoptr(virJSONValue) cmd = NULL;
     g_autoptr(virJSONValue) reply = NULL;
     virJSONValuePtr data = NULL;
+    int rc;

     if (!(cmd = qemuAgentMakeCommand("guest-get-osinfo", NULL)))
         return -1;

-    if (qemuAgentCommand(agent, cmd, &reply, agent->timeout) < 0) {
-        if (qemuAgentErrorCommandUnsupported(reply))
-            return -2;
-        return -1;
-    }
+    if ((rc = qemuAgentCommandFull(agent, cmd, &reply, agent->timeout,
+                                   report_unsupported)) < 0)
+        return rc;

     if (!(data = virJSONValueObjectGetObject(reply, "return"))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
diff --git a/src/qemu/qemu_agent.h b/src/qemu/qemu_agent.h
index 3702abf593..9cade9ca4c 100644
--- a/src/qemu/qemu_agent.h
+++ b/src/qemu/qemu_agent.h
@@ -157,7 +157,8 @@ int qemuAgentGetUsers(qemuAgentPtr mon,
 int qemuAgentGetOSInfo(qemuAgentPtr mon,
                        virTypedParameterPtr *params,
                        int *nparams,
-                       int *maxparams);
+                       int *maxparams,
+                       bool report_unsupported);

 int qemuAgentGetTimezone(qemuAgentPtr mon,
                          virTypedParameterPtr *params,
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 1347514b6c..17d9bbe01c 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -22912,7 +22912,7 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
             goto exitagent;
     }
     if (supportedTypes & VIR_DOMAIN_GUEST_INFO_OS) {
-        rc = qemuAgentGetOSInfo(agent, params, nparams, &maxparams);
+        rc = qemuAgentGetOSInfo(agent, params, nparams, &maxparams, true);
         if (rc < 0 && !(rc == -2 && types == 0))
             goto exitagent;
     }
diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c
index dee9068ce5..57d0f857cc 100644
--- a/tests/qemuagenttest.c
+++ b/tests/qemuagenttest.c
@@ -1139,7 +1139,7 @@ testQemuAgentOSInfo(const void *data)

     /* get osinfo */
     if (qemuAgentGetOSInfo(qemuMonitorTestGetAgent(test),
-                           &params, &nparams, &maxparams) < 0)
+                           &params, &nparams, &maxparams, true) < 0)
         goto cleanup;

     if (nparams != 8) {
@@ -1184,7 +1184,7 @@ testQemuAgentOSInfo(const void *data)

     /* get users with domain */
     if (qemuAgentGetOSInfo(qemuMonitorTestGetAgent(test),
-                           &params, &nparams, &maxparams) < 0)
+                           &params, &nparams, &maxparams, true) < 0)
         goto cleanup;

     if (nparams != 10) {
-- 
2.24.1




More information about the libvir-list mailing list