summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2008-10-01 20:02:34 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2008-10-01 20:02:34 +0000
commitcaf0e53e8f428e48f1c66e378d304f7412bd15f0 (patch)
tree538413dec54ce49ef4727a3f0db1615d1fcefa46 /cpukit
parent2008-10-01 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-caf0e53e8f428e48f1c66e378d304f7412bd15f0.tar.bz2
2008-10-01 Gene Smith <gene.smith@siemens.com>
PR 1328/cpukit * libmisc/shell/main_mdump.c, libmisc/shell/main_mwdump.c: Fix printing of more than 256 bytes.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/ChangeLog6
-rw-r--r--cpukit/libmisc/shell/main_mdump.c35
-rw-r--r--cpukit/libmisc/shell/main_mwdump.c44
3 files changed, 62 insertions, 23 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog
index 9d3a230d61..8b3d4cdc54 100644
--- a/cpukit/ChangeLog
+++ b/cpukit/ChangeLog
@@ -1,3 +1,9 @@
+2008-10-01 Gene Smith <gene.smith@siemens.com>
+
+ PR 1328/cpukit
+ * libmisc/shell/main_mdump.c, libmisc/shell/main_mwdump.c: Fix printing
+ of more than 256 bytes.
+
2008-09-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libi2c/libi2c.h: Added definitions for asynchronous read and write IO
diff --git a/cpukit/libmisc/shell/main_mdump.c b/cpukit/libmisc/shell/main_mdump.c
index f245afb183..721b3a5658 100644
--- a/cpukit/libmisc/shell/main_mdump.c
+++ b/cpukit/libmisc/shell/main_mdump.c
@@ -34,7 +34,9 @@ int rtems_shell_main_mdump(
char *argv[]
)
{
- unsigned char n, m, max=20;
+ unsigned char n, m;
+ int max;
+ int res;
uintptr_t addr = 0;
unsigned char *pb;
@@ -43,19 +45,34 @@ int rtems_shell_main_mdump(
if (argc>2) {
max = rtems_shell_str2int(argv[2]);
- max /= 16;
+ if (max <= 0) {
+ max = 1; /* print 1 item if 0 or neg. */
+ res = 0;
+ }
+ else {
+ max--;
+ res = max & 0xf;/* num bytes in last row */
+ max >>= 4; /* div by 16 */
+ max++; /* num of rows to print */
+ if (max > 20) { /* limit to 20 */
+ max = 20;
+ res = 0xf; /* 16 bytes print in last row */
+ }
+ }
+ }
+ else {
+ max = 20;
+ res = 0xf;
}
-
-
- if (!max)
- max = 1;
for (m=0; m<max; m++) {
printf("0x%08" PRIXPTR " ", addr);
pb = (unsigned char*) addr;
- for (n=0;n<16;n++)
- printf("%02X%c", pb[n], (n == 7) ? '-' : ' ');
- for (n=0;n<16;n++) {
+ for (n=0;n<=(m==(max-1)?res:0xf);n++)
+ printf("%02X%c",pb[n],n==7?'-':' ');
+ for (;n<=0xf;n++)
+ printf(" %c",n==7?'-':' ');
+ for (n=0;n<=(m==(max-1)?res:0xf);n++) {
printf("%c", isprint(pb[n]) ? pb[n] : '.');
}
printf("\n");
diff --git a/cpukit/libmisc/shell/main_mwdump.c b/cpukit/libmisc/shell/main_mwdump.c
index fda0a780c7..1105656814 100644
--- a/cpukit/libmisc/shell/main_mwdump.c
+++ b/cpukit/libmisc/shell/main_mwdump.c
@@ -30,30 +30,46 @@ int rtems_shell_main_mwdump(
char *argv[]
)
{
- unsigned char n, m, max=20;
- uintptr_t addr=0;
- unsigned short *pw;
- unsigned char *p;
+ unsigned char n, m;
+ int max;
+ int res;
+ uintptr_t addr = 0;
+ unsigned char *pb;
if (argc>1)
addr = rtems_shell_str2int(argv[1]);
if (argc>2) {
max = rtems_shell_str2int(argv[2]);
- max /= 16;
+ if (max <= 0) {
+ max = 1; /* print 1 item if 0 or neg. */
+ res = 0;
+ }
+ else {
+ max--;
+ res = max & 0xf;/* num bytes in last row */
+ max >>= 4; /* div by 16 */
+ max++; /* num of rows to print */
+ if (max > 20) { /* limit to 20 */
+ max = 20;
+ res = 0xf; /* 16 bytes print in last row */
+ }
+ }
+ }
+ else {
+ max = 20;
+ res = 0xf;
}
-
- if (!max)
- max = 1;
for (m=0;m<max;m++) {
printf("0x%08" PRIXPTR " ",addr);
- p = (unsigned char *) addr;
- pw = (unsigned short*) addr;
- for (n=0;n<8;n++)
- printf("%04X%c",pw[n],n==3?'-':' ');
- for (n=0;n<16;n++) {
- printf("%c",isprint(p[n])?p[n]:'.');
+ pb = (unsigned char *) addr;
+ for (n=0;n<=(m==(max-1)?res:0xf);n+=2)
+ printf("%04X%c",*((unsigned short*)(pb+n)),n==6?'-':' ');
+ for (;n<=0xf;n+=2)
+ printf(" %c", n==6?'-':' ');
+ for (n=0;n<=(m==(max-1)?res:0xf);n++) {
+ printf("%c", isprint(pb[n]) ? pb[n] : '.');
}
printf("\n");
addr += 16;