When we hit OOM it doesn't really make sense to format the error message
by attempting to allocate it. Introduce a simple helper that prints a
static message and terminates the execution.
---
tools/vsh.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/tools/vsh.c b/tools/vsh.c
index 073347a..91e3106 100644
--- a/tools/vsh.c
+++ b/tools/vsh.c
@@ -77,6 +77,18 @@ const vshCmdDef *cmdSet;
/* Bypass header poison */
#undef strdup
+
+/* simple handler for oom conditions */
+static void
+vshErrorOOM(void)
+{
+ fflush(stdout);
+ fputs(_("error: Out of memory\n"), stderr);
+ fflush(stderr);
+ exit(EXIT_FAILURE);
+}
+
+
double
vshPrettyCapacity(unsigned long long val, const char **unit)
{
@@ -1700,11 +1712,8 @@ vshPrintExtra(vshControl *ctl, const char *format, ...)
return;
va_start(ap, format);
- if (virVasprintf(&str, format, ap) < 0) {
- vshError(ctl, "%s", _("Out of memory"));
- va_end(ap);
- return;
- }
+ if (virVasprintfQuiet(&str, format, ap) < 0)
+ vshErrorOOM();
va_end(ap);
fputs(str, stdout);
VIR_FREE(str);
--
2.6.2