You can't call error multiple times on error paths, however it would
work fine as a debug message, so how about the variation below?
Rich.
From 9eb1c5fd827739d24f916bcd1f9f0b2f98e4bdc8 Mon Sep 17 00:00:00 2001
From: Hilko Bengen <bengen(a)hilluzination.de>
Date: Mon, 16 Feb 2026 19:40:33 +0100
Subject: [PATCH] lib/qemu.c: Dump qemu's stderr if QMP test fails
Qemu will refuse to start on some (all?) architectures if firmware
files are missing, or for other reasons, and complain to stderr. Those
messages should be made visible to the user as part of the error message.
---
lib/qemu.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/lib/qemu.c b/lib/qemu.c
index 9edbe8208..09225c5c1 100644
--- a/lib/qemu.c
+++ b/lib/qemu.c
@@ -109,6 +109,16 @@ generic_qmp_test (guestfs_h *g, const char *qmp_command, char
**outp)
if (len == -1 || strstr (line, "\"QMP\"") == NULL) {
parse_failure:
error (g, "did not understand QMP monitor output from %s", g->hv);
+ output_stderr:
+ int i;
+ CLEANUP_FREE_STRING_LIST char **err_lines =
+ guestfs_int_split_string ('\n',
+ guestfs_int_cmd_get_pipe_errors (cmd));
+ if (err_lines) {
+ debug (g, "stderr from %s:", g->hv);
+ for (i=0; err_lines[i]; i++)
+ debug (g, "%s", err_lines[i]);
+ }
return -1;
}
@@ -134,7 +144,7 @@ generic_qmp_test (guestfs_h *g, const char *qmp_command, char **outp)
/* QMP tests are optional, don't fail if the tests fail. */
if (r == -1 || !WIFEXITED (r) || WEXITSTATUS (r) != 0) {
error (g, "%s wait failed or unexpected exit status", g->hv);
- return -1;
+ goto output_stderr;
}
return 0;
--
2.52.0
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
nbdkit - Flexible, fast NBD server with plugins
https://gitlab.com/nbdkit/nbdkit