diff --git a/src/util/command.c b/src/util/command.c index 35080d26629ebb6808c9c8f4f8ad782a6f910083..334ca8996d81b383e9f7b01e5007168a02ed0a63 100644 --- a/src/util/command.c +++ b/src/util/command.c @@ -815,6 +815,28 @@ virCommandNewArgList(const char *binary, ...) return cmd; } +/** + * virCommandNewVAList: + * @binary: program to run + * @va_list: additional arguments + * + * Create a new command with a NULL terminated + * variable argument list. @binary is handled as in virCommandNew. + */ +virCommandPtr +virCommandNewVAList(const char *binary, va_list list) +{ + virCommandPtr cmd = virCommandNew(binary); + const char *arg; + + if (!cmd || cmd->has_error) + return cmd; + + while ((arg = va_arg(list, const char *)) != NULL) + virCommandAddArg(cmd, arg); + return cmd; +} + /* * Preserve the specified file descriptor in the child, instead of diff --git a/src/util/command.h b/src/util/command.h index 34d93a8045b655341ee26460f3c82fecbf4cbfd5..2eb460afb4239cd8ab49edc7f2b803f104cd7058 100644 --- a/src/util/command.h +++ b/src/util/command.h @@ -45,6 +45,9 @@ virCommandPtr virCommandNewArgs(const char *const*args) ATTRIBUTE_NONNULL(1); virCommandPtr virCommandNewArgList(const char *binary, ...) ATTRIBUTE_NONNULL(1) ATTRIBUTE_SENTINEL; +virCommandPtr virCommandNewVAList(const char *binary, va_list list) + ATTRIBUTE_NONNULL(1); + /* All error report from these setup APIs is * delayed until the Run/RunAsync methods */