kernel/ddb: Fix formatting when printing command tables.
authorSascha Wildner <saw@online.de>
Thu, 5 Sep 2013 20:38:10 +0000 (22:38 +0200)
committerSascha Wildner <saw@online.de>
Thu, 5 Sep 2013 20:38:10 +0000 (22:38 +0200)
FreeBSD's r163134:

Fixed formatting of printing of command tables.  With the default max
output width of 79, only 6 columns of width 12 each fit, but 7 columns
were printed.

The fix is to pass the width of the next output to db_end_line() and
not assume there that this width is always 1.

Related unfixed bugs:
- 1 character is wasted for a space after the last column
- suppression of trailing spaces used to limit the misformatting, but
  seems to have been lost
- in db_examine(), the width of the next output is not known and is
  still assumed to be 1.

Taken-from: FreeBSD

sys/ddb/db_command.c
sys/ddb/db_examine.c
sys/ddb/db_output.c
sys/ddb/db_output.h

index 743a031..d57b14d 100644 (file)
@@ -260,13 +260,13 @@ db_cmd_list(struct command *table, struct command **aux_tablep,
 
        for (cmd = table; cmd->name != 0; cmd++) {
            db_printf("%-12s", cmd->name);
-           db_end_line();
+           db_end_line(12);
        }
        if (aux_tablep == NULL)
            return;
        for (aux_cmdp = aux_tablep; aux_cmdp < aux_tablep_end; aux_cmdp++) {
            db_printf("%-12s", (*aux_cmdp)->name);
-           db_end_line();
+           db_end_line(12);
        }
 }
 
@@ -430,7 +430,7 @@ db_help_cmd(void)
 
        while (cmd->name != 0) {
            db_printf("%-12s", cmd->name);
-           db_end_line();
+           db_end_line(12);
            cmd++;
        }
 }
index bf47bdb..e36aeeb 100644 (file)
@@ -179,7 +179,7 @@ db_examine(db_addr_t addr, char *fmt, int count)
                                break;
                        }
                        if (db_print_position() != 0)
-                           db_end_line();
+                           db_end_line(1);
                        break;
                }
            }
index 600ef44..f3188b7 100644 (file)
@@ -217,9 +217,9 @@ db_iprintf(const char *fmt,...)
  * End line if too long.
  */
 void
-db_end_line(void)
+db_end_line(int field_width)
 {
-       if (db_output_position >= db_max_width)
+       if (db_output_position + field_width > db_max_width)
            db_printf("\n");
 }
 
index aedf95c..8edd81c 100644 (file)
@@ -38,7 +38,7 @@
  * Printing routines for kernel debugger.
  */
 
-void   db_end_line (void);
+void   db_end_line(int);
 void   db_force_whitespace (void);
 void   db_format_hex(char *, size_t, quad_t, int);
 int    db_print_position (void);