diff options
| author | Simon Glass <sjg@chromium.org> | 2013-06-11 11:14:38 -0700 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2013-06-26 10:16:41 -0400 | 
| commit | b8bcaa3ad393c34b7cdd9c8dcd9e9b82e2a34c58 (patch) | |
| tree | 459c6fbd20218790caffe466f6c9f4b84fb4d785 | |
| parent | 5d3bd34545061ec665e64d7f5162fb5eef1e3001 (diff) | |
| download | olio-uboot-2014.01-b8bcaa3ad393c34b7cdd9c8dcd9e9b82e2a34c58.tar.xz olio-uboot-2014.01-b8bcaa3ad393c34b7cdd9c8dcd9e9b82e2a34c58.zip | |
Add function to print a number with grouped digits
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>
| -rw-r--r-- | common/bootstage.c | 22 | ||||
| -rw-r--r-- | include/vsprintf.h | 11 | ||||
| -rw-r--r-- | lib/vsprintf.c | 16 | 
3 files changed, 31 insertions, 18 deletions
| diff --git a/common/bootstage.c b/common/bootstage.c index f5027ef99..94a32a997 100644 --- a/common/bootstage.c +++ b/common/bootstage.c @@ -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)); diff --git a/include/vsprintf.h b/include/vsprintf.h index 651077ca4..6568854fb 100644 --- a/include/vsprintf.h +++ b/include/vsprintf.h @@ -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 diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 533a96b85..82e5c1365 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -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; +	} +} |