summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2012-01-20 09:07:21 +0000
committerWolfgang Denk <wd@denx.de>2012-06-19 22:30:53 +0200
commit054ea170f271f869396eaea2ff14c52aa43d41c5 (patch)
tree415442fb1e54bdd2b05c9297006bbff10f7fd31c
parent9504a5518c0742124bffaf7824d685edd296b7f1 (diff)
downloadu-boot-imx-054ea170f271f869396eaea2ff14c52aa43d41c5.zip
u-boot-imx-054ea170f271f869396eaea2ff14c52aa43d41c5.tar.gz
u-boot-imx-054ea170f271f869396eaea2ff14c52aa43d41c5.tar.bz2
cmd_mem: cmp: unify size code paths
Not only does the source code get simpler, but it also shrinks the compiled object code too. While we're here, tweak the summary message to avoid the plural issue. It isn't that big of a deal, and it's currently wrong anyways in the single (1 byte) case: Total of 1 byte were the same Grammar wise, that should be "was" rather than "were". The new output people should be able to easily figure out: Total of 1 byte(s) were the same Total of 10 byte(s) were the same Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r--common/cmd_mem.c52
1 files changed, 19 insertions, 33 deletions
diff --git a/common/cmd_mem.c b/common/cmd_mem.c
index 91af799..7a199f5 100644
--- a/common/cmd_mem.c
+++ b/common/cmd_mem.c
@@ -258,6 +258,7 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
ulong addr1, addr2, count, ngood;
int size;
int rcode = 0;
+ const char *type;
if (argc != 4)
return CMD_RET_USAGE;
@@ -266,6 +267,7 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
*/
if ((size = cmd_get_data_size(argv[0], 4)) < 0)
return 1;
+ type = size == 4 ? "word" : size == 2 ? "halfword" : "byte";
addr1 = simple_strtoul(argv[1], NULL, 16);
addr1 += base_address;
@@ -292,39 +294,25 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
ngood = 0;
while (count-- > 0) {
+ ulong word1, word2;
if (size == 4) {
- ulong word1 = *(ulong *)addr1;
- ulong word2 = *(ulong *)addr2;
- if (word1 != word2) {
- printf("word at 0x%08lx (0x%08lx) "
- "!= word at 0x%08lx (0x%08lx)\n",
- addr1, word1, addr2, word2);
- rcode = 1;
- break;
- }
- }
- else if (size == 2) {
- ushort hword1 = *(ushort *)addr1;
- ushort hword2 = *(ushort *)addr2;
- if (hword1 != hword2) {
- printf("halfword at 0x%08lx (0x%04x) "
- "!= halfword at 0x%08lx (0x%04x)\n",
- addr1, hword1, addr2, hword2);
- rcode = 1;
- break;
- }
+ word1 = *(ulong *)addr1;
+ word2 = *(ulong *)addr2;
+ } else if (size == 2) {
+ word1 = *(ushort *)addr1;
+ word2 = *(ushort *)addr2;
+ } else {
+ word1 = *(u_char *)addr1;
+ word2 = *(u_char *)addr2;
}
- else {
- u_char byte1 = *(u_char *)addr1;
- u_char byte2 = *(u_char *)addr2;
- if (byte1 != byte2) {
- printf("byte at 0x%08lx (0x%02x) "
- "!= byte at 0x%08lx (0x%02x)\n",
- addr1, byte1, addr2, byte2);
- rcode = 1;
- break;
- }
+ if (word1 != word2) {
+ printf("%s at 0x%08lx (%#0*lx) != %s at 0x%08lx (%#0*lx)\n",
+ type, addr1, size, word1,
+ type, addr2, size, word2);
+ rcode = 1;
+ break;
}
+
ngood++;
addr1 += size;
addr2 += size;
@@ -334,9 +322,7 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
WATCHDOG_RESET();
}
- printf("Total of %ld %s%s were the same\n",
- ngood, size == 4 ? "word" : size == 2 ? "halfword" : "byte",
- ngood == 1 ? "" : "s");
+ printf("Total of %ld %s(s) were the same\n", ngood, type);
return rcode;
}