]> xenbits.xensource.com Git - libvirt.git/commitdiff
tools: fix double error reporting in virt-login-shell
authorDaniel P. Berrangé <berrange@redhat.com>
Thu, 1 Aug 2019 12:02:57 +0000 (13:02 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Wed, 7 Aug 2019 15:54:01 +0000 (16:54 +0100)
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.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
tools/virt-login-shell.c

index b906fa9ed689ed9c79ea6b4dc02692b2be6b4033..8ffc72ab9ac0075ddc4b2742c4d377aa7456e23d 100644 (file)
@@ -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;
 }