]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - cmd/itest.c
cmd/io.c: Fix comparison of unsigned expression warning
[people/ms/u-boot.git] / cmd / itest.c
index 91ae5c2704c882be8d4457d67d5f8488b19d2f1c..e1896d9f9728df3f8195d6d4a11321c5f67723b1 100644 (file)
@@ -59,19 +59,19 @@ static long evalexp(char *s, int w)
        if (s[0] == '*') {
                addr = simple_strtoul(&s[1], NULL, 16);
                buf = map_physmem(addr, w, MAP_WRBACK);
-               if (!buf) {
+               if (!buf && addr) {
                        puts("Failed to map physical memory\n");
                        return 0;
                }
                switch (w) {
                case 1:
-                       l = (long)(*(unsigned char *)buf);
+                       l = (long)(*(u8 *)buf);
                        break;
                case 2:
-                       l = (long)(*(unsigned short *)buf);
+                       l = (long)(*(u16 *)buf);
                        break;
                case 4:
-                       l = (long)(*(unsigned long *)buf);
+                       l = (long)(*(u32 *)buf);
                        break;
                }
                unmap_physmem(buf, w);
@@ -80,7 +80,8 @@ static long evalexp(char *s, int w)
                l = simple_strtoul(s, NULL, 16);
        }
 
-       return l & ((1UL << (w * 8)) - 1);
+       /* avoid overflow on mask calculus */
+       return (w >= sizeof(long)) ? l : (l & ((1UL << (w * 8)) - 1));
 }
 
 static char * evalstr(char *s)