[libvirt] [PATCH 1/3] Add virRunWithHook.

Laine Stump laine at laine.org
Mon Jan 11 05:46:10 UTC 2010


Similar to virExecWithHook, but waits for child to exit. Useful for
doing things like setuid after the fork but before the exec.
---
 src/util/util.c |   25 ++++++++++++++++++-------
 src/util/util.h |    3 +++
 2 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/src/util/util.c b/src/util/util.c
index 44a4b2f..1d493de 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -792,9 +792,11 @@ error:
  * only if the command could not be run.
  */
 int
-virRun(virConnectPtr conn,
-       const char *const*argv,
-       int *status) {
+virRunWithHook(virConnectPtr conn,
+               const char *const*argv,
+               virExecHook hook,
+               void *data,
+               int *status) {
     pid_t childpid;
     int exitstatus, execret, waitret;
     int ret = -1;
@@ -811,7 +813,7 @@ virRun(virConnectPtr conn,
 
     if ((execret = __virExec(conn, argv, NULL, NULL,
                              &childpid, -1, &outfd, &errfd,
-                             VIR_EXEC_NONE, NULL, NULL, NULL)) < 0) {
+                             VIR_EXEC_NONE, hook, data, NULL)) < 0) {
         ret = execret;
         goto error;
     }
@@ -867,9 +869,11 @@ virRun(virConnectPtr conn,
 #else /* __MINGW32__ */
 
 int
-virRun(virConnectPtr conn,
-       const char *const *argv ATTRIBUTE_UNUSED,
-       int *status)
+virRunWithHook(virConnectPtr conn,
+               const char *const *argv ATTRIBUTE_UNUSED,
+               virExecHook hook ATTRIBUTE_UNUSED,
+               void *data ATTRIBUTE_UNUSED,
+               int *status)
 {
     if (status)
         *status = ENOTSUP;
@@ -895,6 +899,13 @@ virExec(virConnectPtr conn,
 
 #endif /* __MINGW32__ */
 
+int
+virRun(virConnectPtr conn,
+       const char *const*argv,
+       int *status) {
+    return virRunWithHook(conn, argv, NULL, NULL, status);
+}
+
 /* Like gnulib's fread_file, but read no more than the specified maximum
    number of bytes.  If the length of the input is <= max_len, and
    upon error while reading that data, it works just like fread_file.  */
diff --git a/src/util/util.h b/src/util/util.h
index d556daa..5e70038 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -81,6 +81,9 @@ int virExec(virConnectPtr conn,
             int *errfd,
             int flags) ATTRIBUTE_RETURN_CHECK;
 int virRun(virConnectPtr conn, const char *const*argv, int *status) ATTRIBUTE_RETURN_CHECK;
+int virRunWithHook(virConnectPtr conn, const char *const*argv,
+                   virExecHook hook, void *data,
+                   int *status) ATTRIBUTE_RETURN_CHECK;
 
 int virFileReadLimFD(int fd, int maxlen, char **buf) ATTRIBUTE_RETURN_CHECK;
 
-- 
1.6.6




More information about the libvir-list mailing list