[PATCH v2 05/25] virCommandToString: Allow stripping command path
Ján Tomko
jtomko at redhat.com
Fri Apr 9 15:12:23 UTC 2021
On a Friday in 2021, Peter Krempa wrote:
>In tests we don't want to use the full path to commands as it's
>unpleasant to keep that working on all systems.
>
>Add an integrated way to strip the prefix which will be used to replace
>virTestClearCommandPath() as a more systemic solution.
>
>Signed-off-by: Peter Krempa <pkrempa at redhat.com>
>---
> src/libvirt_private.syms | 1 +
> src/util/vircommand.c | 35 ++++++++++++++++++++++++++++++++---
> src/util/vircommand.h | 4 ++++
> 3 files changed, 37 insertions(+), 3 deletions(-)
>
>diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
>index f36400b5f6..7dd3a1ee10 100644
>--- a/src/libvirt_private.syms
>+++ b/src/libvirt_private.syms
>@@ -2031,6 +2031,7 @@ virCommandSetUID;
> virCommandSetUmask;
> virCommandSetWorkingDirectory;
> virCommandToString;
>+virCommandToStringFull;
> virCommandWait;
> virCommandWriteArgLog;
> virFork;
>diff --git a/src/util/vircommand.c b/src/util/vircommand.c
>index eb70f8cf85..8ae5badf0f 100644
>--- a/src/util/vircommand.c
>+++ b/src/util/vircommand.c
>@@ -2055,9 +2055,10 @@ virCommandWriteArgLog(virCommandPtr cmd, int logfd)
>
>
> /**
>- * virCommandToString:
>+ * virCommandToStringFull:
> * @cmd: the command to convert
> * @linebreaks: true to break line after each env var or option
>+ * @stripCommandPath: strip the path leading to the binary of @cmd
> *
> * Call after adding all arguments and environment settings, but
> * before Run/RunAsync, to return a string representation of the
>@@ -2067,11 +2068,15 @@ virCommandWriteArgLog(virCommandPtr cmd, int logfd)
> * Caller is responsible for freeing the resulting string.
> */
> char *
>-virCommandToString(virCommandPtr cmd, bool linebreaks)
>+virCommandToStringFull(virCommandPtr cmd,
>+ bool linebreaks,
>+ bool stripCommandPath)
> {
> size_t i;
> g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
> bool prevopt = false;
>+ const char *command = cmd->args[0];
>+ g_autofree char *basename = NULL;
>
> /* Cannot assume virCommandRun will be called; so report the error
> * now. If virCommandRun is called, it will report the same error. */
>@@ -2097,7 +2102,11 @@ virCommandToString(virCommandPtr cmd, bool linebreaks)
> if (linebreaks)
> virBufferAddLit(&buf, "\\\n");
> }
>- virBufferEscapeShell(&buf, cmd->args[0]);
>+
>+ if (stripCommandPath)
>+ command = basename = g_path_get_basename(command);
>+
>+ virBufferEscapeShell(&buf, command);
> for (i = 1; i < cmd->nargs; i++) {
> virBufferAddChar(&buf, ' ');
> if (linebreaks) {
>@@ -2116,6 +2125,26 @@ virCommandToString(virCommandPtr cmd, bool linebreaks)
> }
>
>
>+/**
>+ * virCommandToString:
>+ * @cmd: the command to convert
>+ * @linebreaks: true to break line after each env var or option
>+ *
>+ * Call after adding all arguments and environment settings, but
>+ * before Run/RunAsync, to return a string representation of the
>+ * environment and arguments of cmd, suitably quoted for pasting into
>+ * a shell. If virCommandRun cannot succeed (because of an
>+ * out-of-memory condition while building cmd), NULL will be returned.
>+ * Caller is responsible for freeing the resulting string.
>+ */
Here you copied the orignal comment, including the out-of-date reference
to out-of-memory conditions.
Consider dropping the comment completely since:
a) it's internal API so it does not end up in a generated doc
b) copying comments ensures not just one but two will go out-of-date
eventually
c) anyone needing to know what virCommandToString does can just look at
virCommandToStringFull instead
>+char *
>+virCommandToString(virCommandPtr cmd,
>+ bool linebreaks)
>+{
>+ return virCommandToStringFull(cmd, linebreaks, false);
>+}
>+
>+
> int
> virCommandGetArgList(virCommandPtr cmd,
> char ***args,
Reviewed-by: Ján Tomko <jtomko at redhat.com>
Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210409/e7fbaf05/attachment-0001.sig>
More information about the libvir-list
mailing list