Add function to print a number with grouped digits
authorSimon Glass <sjg@chromium.org>
Tue, 11 Jun 2013 18:14:38 +0000 (11:14 -0700)
committerTom Rini <trini@ti.com>
Wed, 26 Jun 2013 14:16:41 +0000 (10:16 -0400)
Move bootstage's numbering printing code into a generic place so that it can
be used by tracing also.

Signed-off-by: Simon Glass <sjg@chromium.org>
common/bootstage.c
include/vsprintf.h
lib/vsprintf.c

index f5027ef99acd48d2f6990767400a40a2ec427414..94a32a9971985f9141efd0acd2a1e6b463e87dfe 100644 (file)
@@ -49,6 +49,7 @@ static int next_id = BOOTSTAGE_ID_USER;
 enum {
        BOOTSTAGE_VERSION       = 0,
        BOOTSTAGE_MAGIC         = 0xb00757a3,
+       BOOTSTAGE_DIGITS        = 9,
 };
 
 struct bootstage_hdr {
@@ -165,21 +166,6 @@ uint32_t bootstage_accum(enum bootstage_id id)
        return duration;
 }
 
-static void print_time(unsigned long us_time)
-{
-       char str[15], *s;
-       int grab = 3;
-
-       /* We don't seem to have %'d in U-Boot */
-       sprintf(str, "%12lu", us_time);
-       for (s = str + 3; *s; s += grab) {
-               if (s != str + 3)
-                       putc(s[-1] != ' ' ? ',' : ' ');
-               printf("%.*s", grab, s);
-               grab = 3;
-       }
-}
-
 /**
  * Get a record name as a printable string
  *
@@ -208,10 +194,10 @@ static uint32_t print_time_record(enum bootstage_id id,
 
        if (prev == -1U) {
                printf("%11s", "");
-               print_time(rec->time_us);
+               print_grouped_ull(rec->time_us, BOOTSTAGE_DIGITS);
        } else {
-               print_time(rec->time_us);
-               print_time(rec->time_us - prev);
+               print_grouped_ull(rec->time_us, BOOTSTAGE_DIGITS);
+               print_grouped_ull(rec->time_us - prev, BOOTSTAGE_DIGITS);
        }
        printf("  %s\n", get_record_name(buf, sizeof(buf), rec));
 
index 651077ca4daa8449c76d3fba4ef796e95dd1094e..6568854fbe1badc1d106fabba2dcf595667cd087 100644 (file)
@@ -178,4 +178,15 @@ int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
 #define vscnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args)
 #endif /* CONFIG_SYS_VSNPRINTF */
 
+/**
+ * print_grouped_ull() - print a value with digits grouped by ','
+ *
+ * This prints a value with grouped digits, like 12,345,678 to make it easier
+ * to read.
+ *
+ * @val:       Value to print
+ * @digits:    Number of digiits to print
+ */
+void print_grouped_ull(unsigned long long int_val, int digits);
+
 #endif
index 533a96b85e3629a765ba807a594f8509fab9f68a..82e5c13653b68d490257a244701966051d05d2fe 100644 (file)
@@ -870,3 +870,19 @@ char *simple_itoa(ulong i)
        } while (i > 0);
        return p + 1;
 }
+
+/* We don't seem to have %'d in U-Boot */
+void print_grouped_ull(unsigned long long int_val, int digits)
+{
+       char str[21], *s;
+       int grab = 3;
+
+       digits = (digits + 2) / 3;
+       sprintf(str, "%*llu", digits * 3, int_val);
+       for (s = str; *s; s += grab) {
+               if (s != str)
+                       putc(s[-1] != ' ' ? ',' : ' ');
+               printf("%.*s", grab, s);
+               grab = 3;
+       }
+}