Use Linux man page formatting in arg_show_usage()

Fix the problem that very long option names are truncated.

BUG=aomedia:2868

Change-Id: Ic389212b7de3fc8905e1634a168540f7cb9d1ebc
diff --git a/common/args.c b/common/args.c
index 068c8d2..7d110cc 100644
--- a/common/args.c
+++ b/common/args.c
@@ -201,30 +201,37 @@
   return new_argv;
 }
 
+// Use the formatting of the Linux man pages for cp, ls, mv, rm, etc.
 void arg_show_usage(FILE *fp, const struct arg_def *const *defs) {
-  char option_text[40] = { 0 };
-
   for (; *defs; defs++) {
     const struct arg_def *def = *defs;
     char *short_val = def->has_val ? " <arg>" : "";
     char *long_val = def->has_val ? "=<arg>" : "";
 
+    // Options start after 7 spaces.
+    fputs("       ", fp);
+    int n = 0;
     if (def->short_name && def->long_name) {
-      char *comma = def->has_val ? "," : ",      ";
-
-      snprintf(option_text, 37, "-%s%s%s --%s%6s", def->short_name, short_val,
-               comma, def->long_name, long_val);
+      n = fprintf(fp, "-%s%s, --%s%s", def->short_name, short_val,
+                  def->long_name, long_val);
     } else if (def->short_name)
-      snprintf(option_text, 37, "-%s%s", def->short_name, short_val);
+      n = fprintf(fp, "-%s%s", def->short_name, short_val);
     else if (def->long_name)
-      snprintf(option_text, 37, "          --%s%s", def->long_name, long_val);
+      n = fprintf(fp, "--%s%s", def->long_name, long_val);
 
-    fprintf(fp, "  %-37s\t%s\n", option_text, def->desc);
+    // Descriptions start after 14 spaces. If an option is shorter than 7
+    // characters, its description starts on the same line.
+    if (n < 7)
+      for (int i = 0; i < 7 - n; i++) fputc(' ', fp);
+    else
+      fputs("\n              ", fp);
+    fprintf(fp, "%s\n", def->desc);
 
     if (def->enums) {
       const struct arg_enum_list *listptr;
 
-      fprintf(fp, "  %-37s\t  ", "");
+      // Enums start after 16 spaces.
+      fputs("                ", fp);
 
       for (listptr = def->enums; listptr->name; listptr++)
         fprintf(fp, "%s%s", listptr->name, listptr[1].name ? ", " : "\n");