The public API entry points will call virDispatchError which
will print to stderr by default. We then jump to a cleanup
path which calls virDispatchError again.
We tried to stop the entry points printing to stderr, but
incorrectly called virSetErrorFunc. It needs a real function
that is a no-op, not a NULL function.
Once we fix virSetErrorFunc, then we need to use fprintf in
the cleanup path instead of virDispatchError.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
tools/virt-login-shell.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c
index b906fa9ed6..8ffc72ab9a 100644
--- a/tools/virt-login-shell.c
+++ b/tools/virt-login-shell.c
@@ -143,6 +143,12 @@ show_version(void)
}
+static void
+hideErrorFunc(void *opaque ATTRIBUTE_UNUSED,
+ virErrorPtr err ATTRIBUTE_UNUSED)
+{
+}
+
int
main(int argc, char **argv)
{
@@ -186,7 +192,7 @@ main(int argc, char **argv)
return EXIT_CANCELED;
}
- virSetErrorFunc(NULL, NULL);
+ virSetErrorFunc(NULL, hideErrorFunc);
virSetErrorLogPriorityFunc(NULL);
progname = argv[0];
@@ -403,7 +409,7 @@ main(int argc, char **argv)
if (saved_err) {
virSetError(saved_err);
- virDispatchError(NULL);
+ fprintf(stderr, "%s: %s\n", argv[0], virGetLastErrorMessage());
}
return ret;
}
--
2.21.0