]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virsh: fflush(stdout) after fputs()
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 9 Mar 2022 13:01:49 +0000 (14:01 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 10 Mar 2022 07:57:31 +0000 (08:57 +0100)
We are not guaranteed that the string we are printing onto stdout
contains '\n' and thus that the stdout is flushed. In fact, I've
met this problem when virsh asked me whether I want to edit the
domain XML again (vshAskReedit()) but the prompt wasn't displayed
(as it does not contain a newline character) and virsh just sat
there waiting for my input, I sat there waiting for virsh's
output. Flush stdout after all fputs()-s  which do not flush
stdout.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
tools/vsh.c

index bbde594967ce548cdb8245dae31aa917e22dea7b..499794c8fcea9b93f377ea51ae48dc5af4f83317 100644 (file)
@@ -1863,6 +1863,7 @@ vshDebug(vshControl *ctl, int level, const char *format, ...)
     str = g_strdup_vprintf(format, ap);
     va_end(ap);
     fputs(str, stdout);
+    fflush(stdout);
 }
 
 void
@@ -1878,6 +1879,7 @@ vshPrintExtra(vshControl *ctl, const char *format, ...)
     str = g_strdup_vprintf(format, ap);
     va_end(ap);
     fputs(str, stdout);
+    fflush(stdout);
 }
 
 
@@ -1891,6 +1893,7 @@ vshPrint(vshControl *ctl G_GNUC_UNUSED, const char *format, ...)
     str = g_strdup_vprintf(format, ap);
     va_end(ap);
     fputs(str, stdout);
+    fflush(stdout);
 }
 
 
@@ -2938,6 +2941,7 @@ vshReadline(vshControl *ctl G_GNUC_UNUSED,
     int len;
 
     fputs(prompt, stdout);
+    fflush(stdout);
     r = fgets(line, sizeof(line), stdin);
     if (r == NULL) return NULL; /* EOF */