diff mbox

qemu log: wrap long text

Message ID 1467537731-27856-1-git-send-email-vapier@gentoo.org
State New
Headers show

Commit Message

Mike Frysinger July 3, 2016, 9:22 a.m. UTC
The existing help output is a bit hard to read due to the ad-hoc wrapping.
This makes it a bit more programmatic (at least, it wraps it once, but
that should be good enough for now).

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 util/log.c | 36 ++++++++++++++++++++++++++++++------
 1 file changed, 30 insertions(+), 6 deletions(-)
diff mbox

Patch

diff --git a/util/log.c b/util/log.c
index 32e416051cdf..03d00768dbc2 100644
--- a/util/log.c
+++ b/util/log.c
@@ -239,7 +239,7 @@  const QEMULogItem qemu_log_items[] = {
     { CPU_LOG_TB_OP, "op",
       "show micro ops for each compiled TB" },
     { CPU_LOG_TB_OP_OPT, "op_opt",
-      "show micro ops (x86 only: before eflags optimization) and\n"
+      "show micro ops (x86 only: before eflags optimization) and "
       "after liveness analysis" },
     { CPU_LOG_INT, "int",
       "show interrupts/exceptions in short format" },
@@ -256,12 +256,12 @@  const QEMULogItem qemu_log_items[] = {
     { LOG_UNIMP, "unimp",
       "log unimplemented functionality" },
     { LOG_GUEST_ERROR, "guest_errors",
-      "log when the guest OS does something invalid (eg accessing a\n"
+      "log when the guest OS does something invalid (eg accessing a "
       "non-existent register)" },
     { CPU_LOG_PAGE, "page",
       "dump pages at beginning of user mode emulation" },
     { CPU_LOG_TB_NOCHAIN, "nochain",
-      "do not chain compiled TBs so that \"exec\" and \"cpu\" show\n"
+      "do not chain compiled TBs so that \"exec\" and \"cpu\" show "
       "complete traces" },
     { 0, NULL, NULL },
 };
@@ -318,12 +318,36 @@  int qemu_str_to_log_mask(const char *str)
 void qemu_print_log_usage(FILE *f)
 {
     const QEMULogItem *item;
+    int name_len, help_len, disp_len, wrap_len = 80;
+    char help[wrap_len + 1];
+
     fprintf(f, "Log items (comma separated):\n");
+
+    name_len = 0;
+    for (item = qemu_log_items; item->mask != 0; item++) {
+        name_len = MAX(strlen(item->name), name_len);
+    }
+#ifdef CONFIG_TRACE_LOG
+    name_len = MAX(strlen("trace:PATTERN"), name_len);
+#endif
+    help_len = wrap_len - name_len - 1;
+
     for (item = qemu_log_items; item->mask != 0; item++) {
-        fprintf(f, "%-15s %s\n", item->name, item->help);
+        disp_len = snprintf(help, help_len, "%s", item->help);
+        if (disp_len >= help_len) {
+            char *space = strrchr(help, ' ');
+            *space = '\0';
+            disp_len = space - help + 1;
+        } else {
+            disp_len = 0;
+        }
+        fprintf(f, "%-*s %s\n", name_len, item->name, help);
+        if (disp_len) {
+            fprintf(f, "%-*s  %s\n", name_len, "", item->help + disp_len - 1);
+        }
     }
 #ifdef CONFIG_TRACE_LOG
-    fprintf(f, "trace:PATTERN   enable trace events\n");
-    fprintf(f, "\nUse \"-d trace:help\" to get a list of trace events.\n\n");
+    fprintf(f, "%-*s %s\n", name_len, "trace:PATTERN", "enable trace events");
+    fprintf(f, "\nUse \"-d trace:help\" to get a list of trace events.\n");
 #endif
 }