Just reporting the exit status isn't all that enlightening most of the time. This makes the message pretty wordy, but it will reduce user confusion for many errors. Signed-off-by: Cole Robinson <crobinso@xxxxxxxxxx> --- src/util/command.c | 29 ++++++++++++++++++++++------- 1 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/util/command.c b/src/util/command.c index 5e65fc7..e20c331 100644 --- a/src/util/command.c +++ b/src/util/command.c @@ -1899,13 +1899,28 @@ virCommandWait(virCommandPtr cmd, int *exitstatus) if (exitstatus == NULL) { if (status != 0) { - char *str = virCommandToString(cmd); - char *st = virCommandTranslateStatus(status); - virCommandError(VIR_ERR_INTERNAL_ERROR, - _("Child process (%s) status unexpected: %s"), - str ? str : cmd->args[0], NULLSTR(st)); - VIR_FREE(str); - VIR_FREE(st); + char *cmdstr = virCommandToString(cmd); + char *statusstr = virCommandTranslateStatus(status); + const char *out = cmd->outbuf ? *cmd->outbuf : ""; + const char *err = cmd->errbuf ? *cmd->errbuf : ""; + char *outstr = NULL; + char *errstr = NULL; + + if (virAsprintf(&outstr, "stdout: %s\n", NULLSTR(out)) < 0 || + virAsprintf(&errstr, "stderr: %s\n", NULLSTR(err)) < 0) { + virReportOOMError(); + } else { + virCommandError(VIR_ERR_INTERNAL_ERROR, + _("Child process (%s) status unexpected: %s\n%s%s"), + cmdstr ? cmdstr: cmd->args[0], statusstr, + (out && *out) ? outstr : "", + (err && *err) ? errstr : ""); + } + + VIR_FREE(outstr); + VIR_FREE(errstr); + VIR_FREE(cmdstr); + VIR_FREE(statusstr); return -1; } } else { -- 1.7.4.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list