* [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes @ 2018-08-16 15:31 Stephen Hemminger 2018-08-16 15:31 ` [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup Stephen Hemminger ` (3 more replies) 0 siblings, 4 replies; 16+ messages in thread From: Stephen Hemminger @ 2018-08-16 15:31 UTC (permalink / raw) To: dev; +Cc: Stephen Hemminger Minor cleanups of the hexdump routines Stephen Hemminger (2): hexdump: whitespace cleanup hexdump: align output of string lib/librte_eal/common/eal_common_hexdump.c | 116 +++++++++------------ 1 file changed, 50 insertions(+), 66 deletions(-) -- 2.18.0 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup 2018-08-16 15:31 [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes Stephen Hemminger @ 2018-08-16 15:31 ` Stephen Hemminger 2018-08-16 16:34 ` Wiles, Keith 2018-08-16 16:35 ` Wiles, Keith 2018-08-16 15:31 ` [dpdk-dev] [PATCH 2/2] hexdump: align output of string Stephen Hemminger ` (2 subsequent siblings) 3 siblings, 2 replies; 16+ messages in thread From: Stephen Hemminger @ 2018-08-16 15:31 UTC (permalink / raw) To: dev; +Cc: Stephen Hemminger The hexdump code obviously came from somewhere else originally. It is not formatted according to DPDK coding style. Also, drop the comment which is not useful the docbock comment is already in the rte_hexdump.h Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- lib/librte_eal/common/eal_common_hexdump.c | 109 ++++++++------------- 1 file changed, 43 insertions(+), 66 deletions(-) diff --git a/lib/librte_eal/common/eal_common_hexdump.c b/lib/librte_eal/common/eal_common_hexdump.c index 9ca7c511c062..980cf73ac337 100644 --- a/lib/librte_eal/common/eal_common_hexdump.c +++ b/lib/librte_eal/common/eal_common_hexdump.c @@ -10,82 +10,59 @@ #define LINE_LEN 128 -/**************************************************************************//** -* -* rte_hexdump - Dump out memory in a special hex dump format. -* -* DESCRIPTION -* Dump out the message buffer in a special hex dump output format with characters -* printed for each line of 16 hex values. -* -* RETURNS: N/A -* -* SEE ALSO: -*/ - -void -rte_hexdump(FILE *f, const char * title, const void * buf, unsigned int len) +void rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len) { - unsigned int i, out, ofs; - const unsigned char *data = buf; - char line[LINE_LEN]; /* space needed 8+16*3+3+16 == 75 */ + unsigned int i, out, ofs; + const unsigned char *data = buf; + char line[LINE_LEN]; /* space needed 8+16*3+3+16 == 75 */ - fprintf(f, "%s at [%p], len=%u\n", (title)? title : " Dump data", data, len); - ofs = 0; - while (ofs < len) { - /* format the line in the buffer, then use printf to output to screen */ - out = snprintf(line, LINE_LEN, "%08X:", ofs); - for (i = 0; ((ofs + i) < len) && (i < 16); i++) - out += snprintf(line+out, LINE_LEN - out, " %02X", (data[ofs+i] & 0xff)); - for(; i <= 16; i++) - out += snprintf(line+out, LINE_LEN - out, " | "); - for(i = 0; (ofs < len) && (i < 16); i++, ofs++) { - unsigned char c = data[ofs]; - if ( (c < ' ') || (c > '~')) - c = '.'; - out += snprintf(line+out, LINE_LEN - out, "%c", c); - } - fprintf(f, "%s\n", line); - } - fflush(f); -} + fprintf(f, "%s at [%p], len=%u\n", (title) ? title : " Dump data", + data, len); + ofs = 0; + while (ofs < len) { + /* format the line in the buffer */ + out = snprintf(line, LINE_LEN, "%08X:", ofs); + for (i = 0; i < 16 && ofs + i < len; i++) + out += snprintf(line + out, LINE_LEN - out, + " %02X", (data[ofs + i] & 0xff)); + for (; i <= 16; i++) + out += snprintf(line + out, LINE_LEN - out, " | "); + + for (i = 0; (ofs < len) && (i < 16); i++, ofs++) { + unsigned char c = data[ofs]; -/**************************************************************************//** -* -* rte_memdump - Dump out memory in hex bytes with colons. -* -* DESCRIPTION -* Dump out the message buffer in hex bytes with colons xx:xx:xx:xx:... -* -* RETURNS: N/A -* -* SEE ALSO: -*/ + if (c < ' ' || c > '~') + c = '.'; + out += snprintf(line + out, LINE_LEN - out, "%c", c); + } + fprintf(f, "%s\n", line); + } + fflush(f); +} -void -rte_memdump(FILE *f, const char * title, const void * buf, unsigned int len) +void rte_memdump(FILE *f, const char *title, const void *buf, unsigned int len) { - unsigned int i, out; - const unsigned char *data = buf; - char line[LINE_LEN]; + unsigned int i, out; + const unsigned char *data = buf; + char line[LINE_LEN]; - if ( title ) - fprintf(f, "%s: ", title); + if (title) + fprintf(f, "%s: ", title); - line[0] = '\0'; - for (i = 0, out = 0; i < len; i++) { - // Make sure we do not overrun the line buffer length. - if ( out >= (LINE_LEN - 4) ) { + line[0] = '\0'; + for (i = 0, out = 0; i < len; i++) { + /* Make sure we do not overrun the line buffer length. */ + if (out >= (LINE_LEN - 4)) { fprintf(f, "%s", line); out = 0; line[out] = '\0'; } - out += snprintf(line+out, LINE_LEN - out, "%02x%s", - (data[i] & 0xff), ((i+1) < len)? ":" : ""); - } - if ( out > 0 ) - fprintf(f, "%s", line); - fprintf(f, "\n"); + out += snprintf(line + out, LINE_LEN - out, "%02x%s", + (data[i] & 0xff), ((i + 1) < len) ? ":" : ""); + } + if (out > 0) + fprintf(f, "%s", line); + fprintf(f, "\n"); - fflush(f); + fflush(f); } -- 2.18.0 ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup 2018-08-16 15:31 ` [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup Stephen Hemminger @ 2018-08-16 16:34 ` Wiles, Keith 2018-08-16 16:59 ` Stephen Hemminger 2018-08-16 16:35 ` Wiles, Keith 1 sibling, 1 reply; 16+ messages in thread From: Wiles, Keith @ 2018-08-16 16:34 UTC (permalink / raw) To: Stephen Hemminger; +Cc: dev > On Aug 16, 2018, at 10:31 AM, Stephen Hemminger <stephen@networkplumber.org> wrote: > > The hexdump code obviously came from somewhere else originally. > It is not formatted according to DPDK coding style. > > Also, drop the comment which is not useful the docbock comment > is already in the rte_hexdump.h > > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> > --- > lib/librte_eal/common/eal_common_hexdump.c | 109 ++++++++------------- > 1 file changed, 43 insertions(+), 66 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_hexdump.c b/lib/librte_eal/common/eal_common_hexdump.c > index 9ca7c511c062..980cf73ac337 100644 > --- a/lib/librte_eal/common/eal_common_hexdump.c > +++ b/lib/librte_eal/common/eal_common_hexdump.c > @@ -10,82 +10,59 @@ > > #define LINE_LEN 128 > > -/**************************************************************************//** > -* > -* rte_hexdump - Dump out memory in a special hex dump format. > -* > -* DESCRIPTION > -* Dump out the message buffer in a special hex dump output format with characters > -* printed for each line of 16 hex values. > -* > -* RETURNS: N/A > -* > -* SEE ALSO: > -*/ > - > -void > -rte_hexdump(FILE *f, const char * title, const void * buf, unsigned int len) > +void rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len) I looked at the Coding Guide in section 1.7.2 and it states 1.7.2. Definitions - The function type should be on a line by itself preceding the function. - The opening brace of the function body should be on a line by itself. static char * function(int a1, int a2, float fl, int a4) { I have noticed some places are not following that rule in other parts of DPDK. Function prototypes are on the same line. > { > - unsigned int i, out, ofs; > - const unsigned char *data = buf; > - char line[LINE_LEN]; /* space needed 8+16*3+3+16 == 75 */ > + unsigned int i, out, ofs; > + const unsigned char *data = buf; > + char line[LINE_LEN]; /* space needed 8+16*3+3+16 == 75 */ > > - fprintf(f, "%s at [%p], len=%u\n", (title)? title : " Dump data", data, len); > - ofs = 0; > - while (ofs < len) { > - /* format the line in the buffer, then use printf to output to screen */ > - out = snprintf(line, LINE_LEN, "%08X:", ofs); > - for (i = 0; ((ofs + i) < len) && (i < 16); i++) > - out += snprintf(line+out, LINE_LEN - out, " %02X", (data[ofs+i] & 0xff)); > - for(; i <= 16; i++) > - out += snprintf(line+out, LINE_LEN - out, " | "); > - for(i = 0; (ofs < len) && (i < 16); i++, ofs++) { > - unsigned char c = data[ofs]; > - if ( (c < ' ') || (c > '~')) > - c = '.'; > - out += snprintf(line+out, LINE_LEN - out, "%c", c); > - } > - fprintf(f, "%s\n", line); > - } > - fflush(f); > -} > + fprintf(f, "%s at [%p], len=%u\n", (title) ? title : " Dump data", > + data, len); > + ofs = 0; > + while (ofs < len) { > + /* format the line in the buffer */ > + out = snprintf(line, LINE_LEN, "%08X:", ofs); > + for (i = 0; i < 16 && ofs + i < len; i++) > + out += snprintf(line + out, LINE_LEN - out, > + " %02X", (data[ofs + i] & 0xff)); > + for (; i <= 16; i++) > + out += snprintf(line + out, LINE_LEN - out, " | "); > + > + for (i = 0; (ofs < len) && (i < 16); i++, ofs++) { > + unsigned char c = data[ofs]; > > -/**************************************************************************//** > -* > -* rte_memdump - Dump out memory in hex bytes with colons. > -* > -* DESCRIPTION > -* Dump out the message buffer in hex bytes with colons xx:xx:xx:xx:... > -* > -* RETURNS: N/A > -* > -* SEE ALSO: > -*/ > + if (c < ' ' || c > '~') > + c = '.'; > + out += snprintf(line + out, LINE_LEN - out, "%c", c); > + } > + fprintf(f, "%s\n", line); > + } > + fflush(f); > +} > > -void > -rte_memdump(FILE *f, const char * title, const void * buf, unsigned int len) > +void rte_memdump(FILE *f, const char *title, const void *buf, unsigned int len) > { > - unsigned int i, out; > - const unsigned char *data = buf; > - char line[LINE_LEN]; > + unsigned int i, out; > + const unsigned char *data = buf; > + char line[LINE_LEN]; > > - if ( title ) > - fprintf(f, "%s: ", title); > + if (title) > + fprintf(f, "%s: ", title); > > - line[0] = '\0'; > - for (i = 0, out = 0; i < len; i++) { > - // Make sure we do not overrun the line buffer length. > - if ( out >= (LINE_LEN - 4) ) { > + line[0] = '\0'; > + for (i = 0, out = 0; i < len; i++) { > + /* Make sure we do not overrun the line buffer length. */ > + if (out >= (LINE_LEN - 4)) { > fprintf(f, "%s", line); > out = 0; > line[out] = '\0'; > } > - out += snprintf(line+out, LINE_LEN - out, "%02x%s", > - (data[i] & 0xff), ((i+1) < len)? ":" : ""); > - } > - if ( out > 0 ) > - fprintf(f, "%s", line); > - fprintf(f, "\n"); > + out += snprintf(line + out, LINE_LEN - out, "%02x%s", > + (data[i] & 0xff), ((i + 1) < len) ? ":" : ""); > + } > + if (out > 0) > + fprintf(f, "%s", line); > + fprintf(f, "\n"); > > - fflush(f); > + fflush(f); > } > -- > 2.18.0 > Regards, Keith ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup 2018-08-16 16:34 ` Wiles, Keith @ 2018-08-16 16:59 ` Stephen Hemminger 0 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2018-08-16 16:59 UTC (permalink / raw) To: Wiles, Keith; +Cc: dev On Thu, 16 Aug 2018 16:34:12 +0000 "Wiles, Keith" <keith.wiles@intel.com> wrote: > I looked at the Coding Guide in section 1.7.2 and it states > > 1.7.2. Definitions > - The function type should be on a line by itself preceding the function. > - The opening brace of the function body should be on a line by itself. > > static char * > function(int a1, int a2, float fl, int a4) > { Really, I thought in general DPDK followed Linux kernel style. Making little exceptions like this is a nuisance. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup 2018-08-16 15:31 ` [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup Stephen Hemminger 2018-08-16 16:34 ` Wiles, Keith @ 2018-08-16 16:35 ` Wiles, Keith 1 sibling, 0 replies; 16+ messages in thread From: Wiles, Keith @ 2018-08-16 16:35 UTC (permalink / raw) To: Stephen Hemminger; +Cc: dev > On Aug 16, 2018, at 10:31 AM, Stephen Hemminger <stephen@networkplumber.org> wrote: > > The hexdump code obviously came from somewhere else originally. > It is not formatted according to DPDK coding style. > > Also, drop the comment which is not useful the docbock comment > is already in the rte_hexdump.h > > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> > — This code was put in years ago, maybe before it was push to public repo :-) Thanks for the cleanup and output cleanup. Regards, Keith ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH 2/2] hexdump: align output of string 2018-08-16 15:31 [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes Stephen Hemminger 2018-08-16 15:31 ` [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup Stephen Hemminger @ 2018-08-16 15:31 ` Stephen Hemminger 2018-08-16 15:50 ` Stephen Hemminger 2018-10-24 23:40 ` [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes Thomas Monjalon 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Stephen Hemminger 3 siblings, 1 reply; 16+ messages in thread From: Stephen Hemminger @ 2018-08-16 15:31 UTC (permalink / raw) To: dev; +Cc: Stephen Hemminger This fixes the issue where if the length of the output is not a multiple of 16 the formatting was off. Before: 00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@....... 00000010: C0 A8 01 37 | | | | | | | | | | | | | ...7 After: 00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@....... 00000010: C0 A8 01 37 | ...7 Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- lib/librte_eal/common/eal_common_hexdump.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/common/eal_common_hexdump.c b/lib/librte_eal/common/eal_common_hexdump.c index 980cf73ac337..19c2d86c693e 100644 --- a/lib/librte_eal/common/eal_common_hexdump.c +++ b/lib/librte_eal/common/eal_common_hexdump.c @@ -22,9 +22,16 @@ void rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len) while (ofs < len) { /* format the line in the buffer */ out = snprintf(line, LINE_LEN, "%08X:", ofs); - for (i = 0; i < 16 && ofs + i < len; i++) - out += snprintf(line + out, LINE_LEN - out, + for (i = 0; i < 16; i++) { + if (ofs + i < len) + snprintf(line + out, LINE_LEN - out, " %02X", (data[ofs + i] & 0xff)); + else + strcpy(line + out, " "); + out += 3; + } + + for (; i <= 16; i++) out += snprintf(line + out, LINE_LEN - out, " | "); -- 2.18.0 ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 2/2] hexdump: align output of string 2018-08-16 15:31 ` [dpdk-dev] [PATCH 2/2] hexdump: align output of string Stephen Hemminger @ 2018-08-16 15:50 ` Stephen Hemminger 0 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2018-08-16 15:50 UTC (permalink / raw) To: dev On Thu, 16 Aug 2018 08:31:06 -0700 Stephen Hemminger <stephen@networkplumber.org> wrote: > This fixes the issue where if the length of the output is not > a multiple of 16 the formatting was off. > > Before: > 00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@....... > 00000010: C0 A8 01 37 | | | | | | | | | | | | | ...7 > > After: > 00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@....... > 00000010: C0 A8 01 37 | ...7 > > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> > --- > lib/librte_eal/common/eal_common_hexdump.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_hexdump.c b/lib/librte_eal/common/eal_common_hexdump.c > index 980cf73ac337..19c2d86c693e 100644 > --- a/lib/librte_eal/common/eal_common_hexdump.c > +++ b/lib/librte_eal/common/eal_common_hexdump.c > @@ -22,9 +22,16 @@ void rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len) > while (ofs < len) { > /* format the line in the buffer */ > out = snprintf(line, LINE_LEN, "%08X:", ofs); > - for (i = 0; i < 16 && ofs + i < len; i++) > - out += snprintf(line + out, LINE_LEN - out, > + for (i = 0; i < 16; i++) { > + if (ofs + i < len) > + snprintf(line + out, LINE_LEN - out, > " %02X", (data[ofs + i] & 0xff)); > + else > + strcpy(line + out, " "); > + out += 3; > + } > + > + > for (; i <= 16; i++) > out += snprintf(line + out, LINE_LEN - out, " | "); > Nevermind, this version. The last two lines are dead code after tha patch and could be dropped. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes 2018-08-16 15:31 [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes Stephen Hemminger 2018-08-16 15:31 ` [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup Stephen Hemminger 2018-08-16 15:31 ` [dpdk-dev] [PATCH 2/2] hexdump: align output of string Stephen Hemminger @ 2018-10-24 23:40 ` Thomas Monjalon 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Stephen Hemminger 3 siblings, 0 replies; 16+ messages in thread From: Thomas Monjalon @ 2018-10-24 23:40 UTC (permalink / raw) To: Stephen Hemminger; +Cc: dev 16/08/2018 17:31, Stephen Hemminger: > Minor cleanups of the hexdump routines > > Stephen Hemminger (2): > hexdump: whitespace cleanup > hexdump: align output of string > > lib/librte_eal/common/eal_common_hexdump.c | 116 +++++++++------------ > 1 file changed, 50 insertions(+), 66 deletions(-) Please, could you update this series? ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups 2018-08-16 15:31 [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes Stephen Hemminger ` (2 preceding siblings ...) 2018-10-24 23:40 ` [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes Thomas Monjalon @ 2019-04-02 15:23 ` Stephen Hemminger 2019-04-02 15:23 ` Stephen Hemminger ` (3 more replies) 3 siblings, 4 replies; 16+ messages in thread From: Stephen Hemminger @ 2019-04-02 15:23 UTC (permalink / raw) To: dev; +Cc: Stephen Hemminger Minor bugfix and source cleanup Stephen Hemminger (2): hexdump: whitespace cleanup hexdump: align output of string lib/librte_eal/common/eal_common_hexdump.c | 114 +++++++++------------ 1 file changed, 50 insertions(+), 64 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Stephen Hemminger @ 2019-04-02 15:23 ` Stephen Hemminger 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 1/2] hexdump: whitespace cleanup Stephen Hemminger ` (2 subsequent siblings) 3 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2019-04-02 15:23 UTC (permalink / raw) To: dev; +Cc: Stephen Hemminger Minor bugfix and source cleanup Stephen Hemminger (2): hexdump: whitespace cleanup hexdump: align output of string lib/librte_eal/common/eal_common_hexdump.c | 114 +++++++++------------ 1 file changed, 50 insertions(+), 64 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH v2 1/2] hexdump: whitespace cleanup 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Stephen Hemminger 2019-04-02 15:23 ` Stephen Hemminger @ 2019-04-02 15:23 ` Stephen Hemminger 2019-04-02 15:23 ` Stephen Hemminger 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 2/2] hexdump: align output of string Stephen Hemminger 2019-04-03 16:36 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Thomas Monjalon 3 siblings, 1 reply; 16+ messages in thread From: Stephen Hemminger @ 2019-04-02 15:23 UTC (permalink / raw) To: dev; +Cc: Stephen Hemminger The hexdump code obviously came from somewhere else originally. It is not formatted according to DPDK coding style. Also, drop the comment which is not useful the docbock comment is already in the rte_hexdump.h Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- v2 - keep BSD style function definition lib/librte_eal/common/eal_common_hexdump.c | 107 +++++++++------------ 1 file changed, 43 insertions(+), 64 deletions(-) diff --git a/lib/librte_eal/common/eal_common_hexdump.c b/lib/librte_eal/common/eal_common_hexdump.c index 9ca7c511c062..6af818beb3cb 100644 --- a/lib/librte_eal/common/eal_common_hexdump.c +++ b/lib/librte_eal/common/eal_common_hexdump.c @@ -10,82 +10,61 @@ #define LINE_LEN 128 -/**************************************************************************//** -* -* rte_hexdump - Dump out memory in a special hex dump format. -* -* DESCRIPTION -* Dump out the message buffer in a special hex dump output format with characters -* printed for each line of 16 hex values. -* -* RETURNS: N/A -* -* SEE ALSO: -*/ - void -rte_hexdump(FILE *f, const char * title, const void * buf, unsigned int len) +rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len) { - unsigned int i, out, ofs; - const unsigned char *data = buf; - char line[LINE_LEN]; /* space needed 8+16*3+3+16 == 75 */ + unsigned int i, out, ofs; + const unsigned char *data = buf; + char line[LINE_LEN]; /* space needed 8+16*3+3+16 == 75 */ - fprintf(f, "%s at [%p], len=%u\n", (title)? title : " Dump data", data, len); - ofs = 0; - while (ofs < len) { - /* format the line in the buffer, then use printf to output to screen */ - out = snprintf(line, LINE_LEN, "%08X:", ofs); - for (i = 0; ((ofs + i) < len) && (i < 16); i++) - out += snprintf(line+out, LINE_LEN - out, " %02X", (data[ofs+i] & 0xff)); - for(; i <= 16; i++) - out += snprintf(line+out, LINE_LEN - out, " | "); - for(i = 0; (ofs < len) && (i < 16); i++, ofs++) { - unsigned char c = data[ofs]; - if ( (c < ' ') || (c > '~')) - c = '.'; - out += snprintf(line+out, LINE_LEN - out, "%c", c); - } - fprintf(f, "%s\n", line); - } - fflush(f); -} + fprintf(f, "%s at [%p], len=%u\n", + title ? : " Dump data", data, len); + ofs = 0; + while (ofs < len) { + /* format the line in the buffer */ + out = snprintf(line, LINE_LEN, "%08X:", ofs); + for (i = 0; i < 16 && ofs + i < len; i++) + out += snprintf(line + out, LINE_LEN - out, + " %02X", (data[ofs + i] & 0xff)); + for (; i <= 16; i++) + out += snprintf(line + out, LINE_LEN - out, " | "); + + for (i = 0; ofs < len && i < 16; i++, ofs++) { + unsigned char c = data[ofs]; -/**************************************************************************//** -* -* rte_memdump - Dump out memory in hex bytes with colons. -* -* DESCRIPTION -* Dump out the message buffer in hex bytes with colons xx:xx:xx:xx:... -* -* RETURNS: N/A -* -* SEE ALSO: -*/ + if (c < ' ' || c > '~') + c = '.'; + out += snprintf(line + out, LINE_LEN - out, "%c", c); + } + fprintf(f, "%s\n", line); + } + fflush(f); +} void -rte_memdump(FILE *f, const char * title, const void * buf, unsigned int len) +rte_memdump(FILE *f, const char *title, const void *buf, unsigned int len) { - unsigned int i, out; - const unsigned char *data = buf; - char line[LINE_LEN]; + unsigned int i, out; + const unsigned char *data = buf; + char line[LINE_LEN]; - if ( title ) - fprintf(f, "%s: ", title); + if (title) + fprintf(f, "%s: ", title); - line[0] = '\0'; - for (i = 0, out = 0; i < len; i++) { - // Make sure we do not overrun the line buffer length. - if ( out >= (LINE_LEN - 4) ) { + line[0] = '\0'; + for (i = 0, out = 0; i < len; i++) { + /* Make sure we do not overrun the line buffer length. */ + if (out >= LINE_LEN - 4) { fprintf(f, "%s", line); out = 0; line[out] = '\0'; } - out += snprintf(line+out, LINE_LEN - out, "%02x%s", - (data[i] & 0xff), ((i+1) < len)? ":" : ""); - } - if ( out > 0 ) - fprintf(f, "%s", line); - fprintf(f, "\n"); + out += snprintf(line + out, LINE_LEN - out, "%02x%s", + (data[i] & 0xff), ((i + 1) < len) ? ":" : ""); + } + if (out > 0) + fprintf(f, "%s", line); + fprintf(f, "\n"); - fflush(f); + fflush(f); } -- 2.17.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH v2 1/2] hexdump: whitespace cleanup 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 1/2] hexdump: whitespace cleanup Stephen Hemminger @ 2019-04-02 15:23 ` Stephen Hemminger 0 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2019-04-02 15:23 UTC (permalink / raw) To: dev; +Cc: Stephen Hemminger The hexdump code obviously came from somewhere else originally. It is not formatted according to DPDK coding style. Also, drop the comment which is not useful the docbock comment is already in the rte_hexdump.h Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- v2 - keep BSD style function definition lib/librte_eal/common/eal_common_hexdump.c | 107 +++++++++------------ 1 file changed, 43 insertions(+), 64 deletions(-) diff --git a/lib/librte_eal/common/eal_common_hexdump.c b/lib/librte_eal/common/eal_common_hexdump.c index 9ca7c511c062..6af818beb3cb 100644 --- a/lib/librte_eal/common/eal_common_hexdump.c +++ b/lib/librte_eal/common/eal_common_hexdump.c @@ -10,82 +10,61 @@ #define LINE_LEN 128 -/**************************************************************************//** -* -* rte_hexdump - Dump out memory in a special hex dump format. -* -* DESCRIPTION -* Dump out the message buffer in a special hex dump output format with characters -* printed for each line of 16 hex values. -* -* RETURNS: N/A -* -* SEE ALSO: -*/ - void -rte_hexdump(FILE *f, const char * title, const void * buf, unsigned int len) +rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len) { - unsigned int i, out, ofs; - const unsigned char *data = buf; - char line[LINE_LEN]; /* space needed 8+16*3+3+16 == 75 */ + unsigned int i, out, ofs; + const unsigned char *data = buf; + char line[LINE_LEN]; /* space needed 8+16*3+3+16 == 75 */ - fprintf(f, "%s at [%p], len=%u\n", (title)? title : " Dump data", data, len); - ofs = 0; - while (ofs < len) { - /* format the line in the buffer, then use printf to output to screen */ - out = snprintf(line, LINE_LEN, "%08X:", ofs); - for (i = 0; ((ofs + i) < len) && (i < 16); i++) - out += snprintf(line+out, LINE_LEN - out, " %02X", (data[ofs+i] & 0xff)); - for(; i <= 16; i++) - out += snprintf(line+out, LINE_LEN - out, " | "); - for(i = 0; (ofs < len) && (i < 16); i++, ofs++) { - unsigned char c = data[ofs]; - if ( (c < ' ') || (c > '~')) - c = '.'; - out += snprintf(line+out, LINE_LEN - out, "%c", c); - } - fprintf(f, "%s\n", line); - } - fflush(f); -} + fprintf(f, "%s at [%p], len=%u\n", + title ? : " Dump data", data, len); + ofs = 0; + while (ofs < len) { + /* format the line in the buffer */ + out = snprintf(line, LINE_LEN, "%08X:", ofs); + for (i = 0; i < 16 && ofs + i < len; i++) + out += snprintf(line + out, LINE_LEN - out, + " %02X", (data[ofs + i] & 0xff)); + for (; i <= 16; i++) + out += snprintf(line + out, LINE_LEN - out, " | "); + + for (i = 0; ofs < len && i < 16; i++, ofs++) { + unsigned char c = data[ofs]; -/**************************************************************************//** -* -* rte_memdump - Dump out memory in hex bytes with colons. -* -* DESCRIPTION -* Dump out the message buffer in hex bytes with colons xx:xx:xx:xx:... -* -* RETURNS: N/A -* -* SEE ALSO: -*/ + if (c < ' ' || c > '~') + c = '.'; + out += snprintf(line + out, LINE_LEN - out, "%c", c); + } + fprintf(f, "%s\n", line); + } + fflush(f); +} void -rte_memdump(FILE *f, const char * title, const void * buf, unsigned int len) +rte_memdump(FILE *f, const char *title, const void *buf, unsigned int len) { - unsigned int i, out; - const unsigned char *data = buf; - char line[LINE_LEN]; + unsigned int i, out; + const unsigned char *data = buf; + char line[LINE_LEN]; - if ( title ) - fprintf(f, "%s: ", title); + if (title) + fprintf(f, "%s: ", title); - line[0] = '\0'; - for (i = 0, out = 0; i < len; i++) { - // Make sure we do not overrun the line buffer length. - if ( out >= (LINE_LEN - 4) ) { + line[0] = '\0'; + for (i = 0, out = 0; i < len; i++) { + /* Make sure we do not overrun the line buffer length. */ + if (out >= LINE_LEN - 4) { fprintf(f, "%s", line); out = 0; line[out] = '\0'; } - out += snprintf(line+out, LINE_LEN - out, "%02x%s", - (data[i] & 0xff), ((i+1) < len)? ":" : ""); - } - if ( out > 0 ) - fprintf(f, "%s", line); - fprintf(f, "\n"); + out += snprintf(line + out, LINE_LEN - out, "%02x%s", + (data[i] & 0xff), ((i + 1) < len) ? ":" : ""); + } + if (out > 0) + fprintf(f, "%s", line); + fprintf(f, "\n"); - fflush(f); + fflush(f); } -- 2.17.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH v2 2/2] hexdump: align output of string 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Stephen Hemminger 2019-04-02 15:23 ` Stephen Hemminger 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 1/2] hexdump: whitespace cleanup Stephen Hemminger @ 2019-04-02 15:23 ` Stephen Hemminger 2019-04-02 15:23 ` Stephen Hemminger 2019-04-03 16:36 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Thomas Monjalon 3 siblings, 1 reply; 16+ messages in thread From: Stephen Hemminger @ 2019-04-02 15:23 UTC (permalink / raw) To: dev; +Cc: Stephen Hemminger This fixes the issue where if the length of the output is not a multiple of 16 the formatting was off. Before: 00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@....... 00000010: C0 A8 01 37 | | | | | | | | | | | | | ...7 After: 00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@....... 00000010: C0 A8 01 37 | ...7 Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- lib/librte_eal/common/eal_common_hexdump.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/common/eal_common_hexdump.c b/lib/librte_eal/common/eal_common_hexdump.c index 6af818beb3cb..2d2179d4114e 100644 --- a/lib/librte_eal/common/eal_common_hexdump.c +++ b/lib/librte_eal/common/eal_common_hexdump.c @@ -23,9 +23,16 @@ rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len) while (ofs < len) { /* format the line in the buffer */ out = snprintf(line, LINE_LEN, "%08X:", ofs); - for (i = 0; i < 16 && ofs + i < len; i++) - out += snprintf(line + out, LINE_LEN - out, + for (i = 0; i < 16; i++) { + if (ofs + i < len) + snprintf(line + out, LINE_LEN - out, " %02X", (data[ofs + i] & 0xff)); + else + strcpy(line + out, " "); + out += 3; + } + + for (; i <= 16; i++) out += snprintf(line + out, LINE_LEN - out, " | "); -- 2.17.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH v2 2/2] hexdump: align output of string 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 2/2] hexdump: align output of string Stephen Hemminger @ 2019-04-02 15:23 ` Stephen Hemminger 0 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2019-04-02 15:23 UTC (permalink / raw) To: dev; +Cc: Stephen Hemminger This fixes the issue where if the length of the output is not a multiple of 16 the formatting was off. Before: 00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@....... 00000010: C0 A8 01 37 | | | | | | | | | | | | | ...7 After: 00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@....... 00000010: C0 A8 01 37 | ...7 Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- lib/librte_eal/common/eal_common_hexdump.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/common/eal_common_hexdump.c b/lib/librte_eal/common/eal_common_hexdump.c index 6af818beb3cb..2d2179d4114e 100644 --- a/lib/librte_eal/common/eal_common_hexdump.c +++ b/lib/librte_eal/common/eal_common_hexdump.c @@ -23,9 +23,16 @@ rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len) while (ofs < len) { /* format the line in the buffer */ out = snprintf(line, LINE_LEN, "%08X:", ofs); - for (i = 0; i < 16 && ofs + i < len; i++) - out += snprintf(line + out, LINE_LEN - out, + for (i = 0; i < 16; i++) { + if (ofs + i < len) + snprintf(line + out, LINE_LEN - out, " %02X", (data[ofs + i] & 0xff)); + else + strcpy(line + out, " "); + out += 3; + } + + for (; i <= 16; i++) out += snprintf(line + out, LINE_LEN - out, " | "); -- 2.17.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Stephen Hemminger ` (2 preceding siblings ...) 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 2/2] hexdump: align output of string Stephen Hemminger @ 2019-04-03 16:36 ` Thomas Monjalon 2019-04-03 16:36 ` Thomas Monjalon 3 siblings, 1 reply; 16+ messages in thread From: Thomas Monjalon @ 2019-04-03 16:36 UTC (permalink / raw) To: Stephen Hemminger; +Cc: dev 02/04/2019 17:23, Stephen Hemminger: > Minor bugfix and source cleanup > > Stephen Hemminger (2): > hexdump: whitespace cleanup > hexdump: align output of string Applied, thanks ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups 2019-04-03 16:36 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Thomas Monjalon @ 2019-04-03 16:36 ` Thomas Monjalon 0 siblings, 0 replies; 16+ messages in thread From: Thomas Monjalon @ 2019-04-03 16:36 UTC (permalink / raw) To: Stephen Hemminger; +Cc: dev 02/04/2019 17:23, Stephen Hemminger: > Minor bugfix and source cleanup > > Stephen Hemminger (2): > hexdump: whitespace cleanup > hexdump: align output of string Applied, thanks ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2019-04-03 16:36 UTC | newest] Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-08-16 15:31 [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes Stephen Hemminger 2018-08-16 15:31 ` [dpdk-dev] [PATCH 1/2] hexdump: whitespace cleanup Stephen Hemminger 2018-08-16 16:34 ` Wiles, Keith 2018-08-16 16:59 ` Stephen Hemminger 2018-08-16 16:35 ` Wiles, Keith 2018-08-16 15:31 ` [dpdk-dev] [PATCH 2/2] hexdump: align output of string Stephen Hemminger 2018-08-16 15:50 ` Stephen Hemminger 2018-10-24 23:40 ` [dpdk-dev] [PATCH 0/2] eal: hexcump trivial changes Thomas Monjalon 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Stephen Hemminger 2019-04-02 15:23 ` Stephen Hemminger 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 1/2] hexdump: whitespace cleanup Stephen Hemminger 2019-04-02 15:23 ` Stephen Hemminger 2019-04-02 15:23 ` [dpdk-dev] [PATCH v2 2/2] hexdump: align output of string Stephen Hemminger 2019-04-02 15:23 ` Stephen Hemminger 2019-04-03 16:36 ` [dpdk-dev] [PATCH v2 0/2] eal: hexdump cleanups Thomas Monjalon 2019-04-03 16:36 ` Thomas Monjalon
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).