]> xenbits.xensource.com Git - libvirt.git/commitdiff
Allow stdin to be specified with virExec()
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 14 Aug 2007 01:23:59 +0000 (01:23 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 14 Aug 2007 01:23:59 +0000 (01:23 +0000)
ChangeLog
src/openvz_driver.c
src/qemu_driver.c
src/util.c
src/util.h

index f27bb647334f272a28e4a4d39c9c3f63a1c71349..648cd10b4b4cd0341c6ffe4b2d335becc4b05dc4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon Aug 13 21:18:48 EST 2007 Daniel P. Berrange <berrange@redhat.com>
+
+       * src/util.h, src/util.c: Allow a file descriptor to be supplied
+       for STDIN when calling virExec(), or if -1, redirect from /dev/null
+       * src/qemu_driver.c, src/openvz_driver.c: Pass in -1 for new stdin
+       parameter above where neccessary
+
 Mon Aug 13 20:13:48 EST 2007 Daniel P. Berrange <berrange@redhat.com>
 
        * src/qemu_driver.c: Use \r instead of \n for monitor commands to
index 84d514cb97fdcef069cf69d1050b9b9c9bd02920..b994fabc873cc6e4725fc94a98a2db24434065c2 100644 (file)
@@ -342,7 +342,7 @@ static int openvzListDomains(virConnectPtr conn, int *ids, int nids) {
     char buf[32];
     const char *cmd[] = {VZLIST, "-ovpsid", "-H" , NULL};
 
-    ret = virExec(conn, (char **)cmd, &pid, &outfd, &errfd);
+    ret = virExec(conn, (char **)cmd, &pid, -1, &outfd, &errfd);
     if(ret == -1) {
         error(conn, VIR_ERR_INTERNAL_ERROR, "Could not exec " VZLIST);
         return (int)NULL;
@@ -373,7 +373,7 @@ static int openvzListDefinedDomains(virConnectPtr conn,
     const char *cmd[] = {VZLIST, "-ovpsid", "-H", NULL};
 
     /* the -S options lists only stopped domains */
-    ret = virExec(conn, (char **)cmd, &pid, &outfd, &errfd);
+    ret = virExec(conn, (char **)cmd, &pid, -1, &outfd, &errfd);
     if(ret == -1) {
         error(conn, VIR_ERR_INTERNAL_ERROR, "Could not exec " VZLIST);
         return (int)NULL;
index e13e6a3a0eb9a9d8686bc6201c8a08eb5628b9d6..15b94b84650069b5fb51c0ce023ee56cfe2bb214 100644 (file)
@@ -655,7 +655,8 @@ static int qemudStartVMDaemon(virConnectPtr conn,
         qemudLog(QEMUD_WARN, "Unable to write argv to logfile %d: %s",
                  errno, strerror(errno));
 
-    if (virExecNonBlock(conn, argv, &vm->pid, &vm->stdout, &vm->stderr) == 0) {
+    if (virExecNonBlock(conn, argv, &vm->pid,
+                        -1, &vm->stdout, &vm->stderr) == 0) {
         vm->id = driver->nextvmid++;
         vm->state = VIR_DOMAIN_RUNNING;
 
@@ -912,7 +913,7 @@ dhcpStartDhcpDaemon(virConnectPtr conn,
     if (qemudBuildDnsmasqArgv(conn, network, &argv) < 0)
         return -1;
 
-    ret = virExecNonBlock(conn, argv, &network->dnsmasqPid, NULL, NULL);
+    ret = virExecNonBlock(conn, argv, &network->dnsmasqPid, -1, NULL, NULL);
 
     for (i = 0; argv[i]; i++)
         free(argv[i]);
index f53cfd2b15d8dd3f9a8f1427742ca4a9ac7457e3..4f80eef2ecb7b5212ae07847a3102f1db7580fe9 100644 (file)
@@ -79,7 +79,7 @@ static int virSetNonBlock(int fd) {
 static int
 _virExec(virConnectPtr conn,
           char **argv,
-          int *retpid, int *outfd, int *errfd, int non_block) {
+          int *retpid, int infd, int *outfd, int *errfd, int non_block) {
     int pid, null;
     int pipeout[2] = {-1,-1};
     int pipeerr[2] = {-1,-1};
@@ -140,7 +140,7 @@ _virExec(virConnectPtr conn,
     if (pipeerr[0] > 0 && close(pipeerr[0]) < 0)
         _exit(1);
 
-    if (dup2(null, STDIN_FILENO) < 0)
+    if (dup2(infd >= 0 ? infd : null, STDIN_FILENO) < 0)
         _exit(1);
     if (dup2(pipeout[1] > 0 ? pipeout[1] : null, STDOUT_FILENO) < 0)
         _exit(1);
@@ -176,16 +176,16 @@ _virExec(virConnectPtr conn,
 int
 virExec(virConnectPtr conn,
           char **argv,
-          int *retpid, int *outfd, int *errfd) {
+          int *retpid, int infd, int *outfd, int *errfd) {
 
-    return(_virExec(conn, argv, retpid, outfd, errfd, 0));
+    return(_virExec(conn, argv, retpid, infd, outfd, errfd, 0));
 }
 
 int
 virExecNonBlock(virConnectPtr conn,
           char **argv,
-          int *retpid, int *outfd, int *errfd) {
+          int *retpid, int infd, int *outfd, int *errfd) {
 
-    return(_virExec(conn, argv, retpid, outfd, errfd, 1));
+    return(_virExec(conn, argv, retpid, infd, outfd, errfd, 1));
 }
 
index 5b840435993e2ce0293a3e7852c6c23bae7ade80..d11e6d9797ab1de086104bc5ad70459d9d9b34f5 100644 (file)
@@ -21,6 +21,6 @@
  * File created Jul 18, 2007 - Shuveb Hussain <shuveb@binarykarma.com>
  */
 
-int virExec(virConnectPtr conn, char **argv, int *retpid, int *outfd, int *errfd);
-int virExecNonBlock(virConnectPtr conn, char **argv, int *retpid, int *outfd, int *errfd);
+int virExec(virConnectPtr conn, char **argv, int *retpid, int infd, int *outfd, int *errfd);
+int virExecNonBlock(virConnectPtr conn, char **argv, int *retpid, int infd, int *outfd, int *errfd);