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

Daniel P. Berrange berrange at redhat.com
Mon Jan 11 17:54:02 UTC 2010


On Mon, Jan 11, 2010 at 12:46:10AM -0500, Laine Stump wrote:
> 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;
>  

ACK

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list