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

Daniel Veillard veillard at redhat.com
Wed Jan 20 19:56:04 UTC 2010


On Wed, Jan 20, 2010 at 02:29:40AM -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 67fae00..578d12b 100644
> --- a/src/util/util.c
> +++ b/src/util/util.c
> @@ -804,9 +804,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;
> @@ -823,7 +825,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;
>      }
> @@ -879,9 +881,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;
> @@ -907,6 +911,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, looks fine to me,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list