From 30c94a80d5f7bef33450bd1a7e090c8e99b6db89 Mon Sep 17 00:00:00 2001 From: Elliott Baron Date: Fri, 19 Dec 2008 10:03:35 -0500 Subject: First attempt at printf kernel memory hex dump --- runtime/vsprintf.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'runtime/vsprintf.c') diff --git a/runtime/vsprintf.c b/runtime/vsprintf.c index 831b7a2b..fbd90a83 100644 --- a/runtime/vsprintf.c +++ b/runtime/vsprintf.c @@ -283,6 +283,7 @@ int _stp_vsnprintf(char *buf, size_t size, const char *fmt, va_list args) continue; case 's': + case 'M': case 'm': s = va_arg(args, char *); if ((unsigned long)s < PAGE_SIZE) @@ -303,8 +304,12 @@ int _stp_vsnprintf(char *buf, size_t size, const char *fmt, va_list args) } } for (i = 0; i < len; ++i) { - if (str <= end) + if (str <= end) { + if (*fmt == 'M') + str = number(str, str + 2, (uint64_t)(unsigned char) *s, 16, 2, 2, STP_SPACE); + else *str = *s; + } ++str; ++s; } while (len < field_width--) { -- cgit From 51d997112e435da6fc84713ef09908b3b8659798 Mon Sep 17 00:00:00 2001 From: Elliott Baron Date: Fri, 19 Dec 2008 17:00:51 -0500 Subject: Better implementation for %M --- runtime/vsprintf.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'runtime/vsprintf.c') diff --git a/runtime/vsprintf.c b/runtime/vsprintf.c index fbd90a83..60852872 100644 --- a/runtime/vsprintf.c +++ b/runtime/vsprintf.c @@ -283,7 +283,7 @@ int _stp_vsnprintf(char *buf, size_t size, const char *fmt, va_list args) continue; case 's': - case 'M': + case 'M': case 'm': s = va_arg(args, char *); if ((unsigned long)s < PAGE_SIZE) @@ -303,15 +303,23 @@ int _stp_vsnprintf(char *buf, size_t size, const char *fmt, va_list args) ++str; } } - for (i = 0; i < len; ++i) { - if (str <= end) { - if (*fmt == 'M') - str = number(str, str + 2, (uint64_t)(unsigned char) *s, 16, 2, 2, STP_SPACE); - else - *str = *s; - } - ++str; ++s; + if (*fmt == 'M') { + str = number(str, str + len - 1 < end ? str + len - 1 : end, + (unsigned long) *(uint64_t *) s, + 16, field_width, len, flags); + } + else { + for (i = 0; i < len; ++i) { + if (str <= end) { + //if (*fmt == 'M') + //str = number(str, str + 2, (uint64_t)(unsigned char) *s, 16, 2, 2, STP_SPACE); + //else + *str = *s; + } + ++str; ++s; + } } + while (len < field_width--) { if (str <= end) *str = ' '; @@ -323,7 +331,6 @@ int _stp_vsnprintf(char *buf, size_t size, const char *fmt, va_list args) ++str; } continue; - case 'X': flags |= STP_LARGE; case 'x': -- cgit From 5fab0487aa45893289ad9a688a513eb7925f5133 Mon Sep 17 00:00:00 2001 From: Elliott Baron Date: Fri, 19 Dec 2008 17:03:20 -0500 Subject: Removed left over remnant from previous implementation --- runtime/vsprintf.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'runtime/vsprintf.c') diff --git a/runtime/vsprintf.c b/runtime/vsprintf.c index 60852872..2c3067cf 100644 --- a/runtime/vsprintf.c +++ b/runtime/vsprintf.c @@ -311,9 +311,6 @@ int _stp_vsnprintf(char *buf, size_t size, const char *fmt, va_list args) else { for (i = 0; i < len; ++i) { if (str <= end) { - //if (*fmt == 'M') - //str = number(str, str + 2, (uint64_t)(unsigned char) *s, 16, 2, 2, STP_SPACE); - //else *str = *s; } ++str; ++s; -- cgit