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

Re: [libvirt] [PATCH 3/7] add virAgentCommand()



(2012/08/16 22:13), Martin Kletzander wrote:
On 08/15/2012 03:36 AM, MATSUDA Daiki wrote:
diff --git a/include/libvirt/libvirt-qemu.h b/include/libvirt/libvirt-qemu.h
index 013ed5a..60b83ef 100644
--- a/include/libvirt/libvirt-qemu.h
+++ b/include/libvirt/libvirt-qemu.h
@@ -50,6 +50,9 @@ typedef enum {
      VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT = 0,
  } virDomainQemuAgentCommandTimeoutValues;

+char *virAgentCommand(virDomainPtr domain, const char *cmd,
+                      int timeout, unsigned int flags);
+

I wondered why this is type 'char *', when we can use 'int' as usual and
have '**result' (same as monitor command does).

It depends on generating the code automatically Eric suggested.
It decides the returning type.

diff --git a/src/libvirt-qemu.c b/src/libvirt-qemu.c
index 78480bb..49dfc20 100644
--- a/src/libvirt-qemu.c
+++ b/src/libvirt-qemu.c
@@ -185,3 +185,54 @@ error:
      virDispatchError(conn);
      return NULL;
  }
+
+/**
+ * virAgentCommand:
+ * @domain: a domain object
+ * @cmd: the guest agent command string
+ * @timeout: timeout seconds
+ * @flags: execution flags
+ *
+ * Execute an arbitrary Guest Agent command.
+ *
+ * Issue @cmd to the guest agent running in @domain.
+ * If @result is NULL, then don't wait for a result (and @timeout

And then I noticed that there is no @result here, so maybe you wanted to
make it that way and didn't change something?

It is my mistake.

+ * must be 0).  Otherwise, wait for @timeout seconds for a
+ * @timeout must be -2, -1, 0 or positive.
+ * VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK(-2): meaning to block forever waiting for
+ * a result.
+ * VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT(-1): use default timeout value.
+ * VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT(0): does not wait.
+ * positive value: wait for @timeout seconds
+ *
+ * Returns strings if success, NULL in failure.
+ */
+char *
+virAgentCommand(virDomainPtr domain,
+                const char *cmd,
+                int timeout,
+                unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DEBUG("domain=%p, cmd=%s, timeout=%d, flags=%x",
+              domain, cmd, timeout, flags);
+
+    if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+        virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        virDispatchError(NULL);
+        return NULL;
+    }
+
+    conn = domain->conn;
+
+    if (conn->driver->qemuAgentCommand) {
+        return conn->driver->qemuAgentCommand(domain, cmd, timeout, flags);

Shouldn't this be allowed only for read-only connections?

I do not uderstand what you say.

+    }
+
+    virLibConnError(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+    /* Copy to connection error object for back compatability */

s/compatability/compatibility/

+    virDispatchError(domain->conn);

You have 'domain->conn' in 'conn' already.

Martin






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