Fix number base handling of "load" command
authorWolfgang Denk <wd@denx.de>
Sat, 5 Oct 2013 19:07:25 +0000 (21:07 +0200)
committerTom Rini <trini@ti.com>
Mon, 7 Oct 2013 19:54:18 +0000 (15:54 -0400)
As documented, almost all U-Boot commands expect numbers to be entered
in hexadecimal input format. (Exception: for historical reasons, the
"sleep" command takes its argument in decimal input format.)

This rule was broken for the "load" command; for details please see
especially commits 045fa1e "fs: add filesystem switch libary,
implement ls and fsload commands" and 3f83c87 "fs: fix number base
behaviour change in fatload/ext*load".  In the result, the load
command would always require an explicit "0x" prefix for regular
(i. e. base 16 formatted) input.

Change this to use the standard notation of base 16 input format.
While strictly speaking this is a change of the user interface, we
hope that it will not cause trouble.  Stephen Warren comments (see
[1]):

        I suppose you can change the behaviour if you want; anyone
        writing "0x..." for their values presumably won't be
        affected, and if people really do assume all values in U-Boot
        are in hex, presumably nobody currently relies upon using
        non-prefixed values with the generic load command, since it
        doesn't work like that right now.

[1] http://article.gmane.org/gmane.comp.boot-loaders.u-boot/171172

Acked-by: Tom Rini <trini@ti.com>
Acked-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>
common/cmd_ext2.c
common/cmd_ext4.c
common/cmd_fat.c
common/cmd_fs.c
fs/fs.c
include/fs.h

index 173191980e93100bca63489ddc6204c15f287856..5a4bcc1a36dbea0a89edd3029f1de0babd318334 100644 (file)
@@ -32,7 +32,7 @@ int do_ext2ls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  */
 int do_ext2load (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       return do_load(cmdtp, flag, argc, argv, FS_TYPE_EXT, 16);
+       return do_load(cmdtp, flag, argc, argv, FS_TYPE_EXT);
 }
 
 U_BOOT_CMD(
@@ -47,6 +47,5 @@ U_BOOT_CMD(
        "load binary file from a Ext2 filesystem",
        "<interface> <dev[:part]> [addr] [filename] [bytes]\n"
        "    - load binary file 'filename' from 'dev' on 'interface'\n"
-       "      to address 'addr' from ext2 filesystem.\n"
-       "      All numeric parameters are assumed to be hex."
+       "      to address 'addr' from ext2 filesystem."
 );
index 4a27cd97c09d0ae1518a7de8050f8bcb9934f7b6..8289d25b0623468017282393e9127841918fbba5 100644 (file)
@@ -45,7 +45,7 @@
 int do_ext4_load(cmd_tbl_t *cmdtp, int flag, int argc,
                                                char *const argv[])
 {
-       return do_load(cmdtp, flag, argc, argv, FS_TYPE_EXT, 16);
+       return do_load(cmdtp, flag, argc, argv, FS_TYPE_EXT);
 }
 
 int do_ext4_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
@@ -122,5 +122,4 @@ U_BOOT_CMD(ext4load, 6, 0, do_ext4_load,
           "load binary file from a Ext4 filesystem",
           "<interface> <dev[:part]> [addr] [filename] [bytes]\n"
           "    - load binary file 'filename' from 'dev' on 'interface'\n"
-          "      to address 'addr' from ext4 filesystem.\n"
-          "      All numeric parameters are assumed to be hex.");
+          "      to address 'addr' from ext4 filesystem");
index f6d7affa0d48b011999a32bd499cbcff3be8e823..a12d8fa09830be49f222fc6952cddc45814786ba 100644 (file)
@@ -19,7 +19,7 @@
 
 int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       return do_load(cmdtp, flag, argc, argv, FS_TYPE_FAT, 16);
+       return do_load(cmdtp, flag, argc, argv, FS_TYPE_FAT);
 }
 
 
@@ -35,8 +35,7 @@ U_BOOT_CMD(
        "      the load stops on end of file.\n"
        "      If either 'pos' or 'bytes' are not aligned to\n"
        "      ARCH_DMA_MINALIGN then a misaligned buffer warning will\n"
-       "      be printed and performance will suffer for the load.\n"
-       "      All numeric parameters are assumed to be hex."
+       "      be printed and performance will suffer for the load."
 );
 
 static int do_fat_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
index a681d03d1b1d80d515eb7aa82bdbfbf13ce7b84e..91a205ac1e6994e3c51006c68c3adc164a72e478 100644 (file)
@@ -22,7 +22,7 @@
 
 int do_load_wrapper(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       return do_load(cmdtp, flag, argc, argv, FS_TYPE_ANY, 0);
+       return do_load(cmdtp, flag, argc, argv, FS_TYPE_ANY);
 }
 
 U_BOOT_CMD(
@@ -34,9 +34,7 @@ U_BOOT_CMD(
        "      'bytes' gives the size to load in bytes.\n"
        "      If 'bytes' is 0 or omitted, the file is read until the end.\n"
        "      'pos' gives the file byte position to start reading from.\n"
-       "      If 'pos' is 0 or omitted, the file is read from the start.\n"
-       "      All numeric parameters are assumed to be decimal,\n"
-       "      unless specified otherwise using a leading \"0x\"."
+       "      If 'pos' is 0 or omitted, the file is read from the start."
 );
 
 int do_ls_wrapper(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
diff --git a/fs/fs.c b/fs/fs.c
index 99e516a44d82dc74f868a5636a021c3c81718db1..be1855d1291f217b19720ae0faa45076eb0cc5ac 100644 (file)
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -231,7 +231,7 @@ int fs_write(const char *filename, ulong addr, int offset, int len)
 }
 
 int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
-               int fstype, int cmdline_base)
+               int fstype)
 {
        unsigned long addr;
        const char *addr_str;
@@ -250,7 +250,7 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
                return 1;
 
        if (argc >= 4) {
-               addr = simple_strtoul(argv[3], NULL, cmdline_base);
+               addr = simple_strtoul(argv[3], NULL, 16);
        } else {
                addr_str = getenv("loadaddr");
                if (addr_str != NULL)
@@ -268,11 +268,11 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
                }
        }
        if (argc >= 6)
-               bytes = simple_strtoul(argv[5], NULL, cmdline_base);
+               bytes = simple_strtoul(argv[5], NULL, 16);
        else
                bytes = 0;
        if (argc >= 7)
-               pos = simple_strtoul(argv[6], NULL, cmdline_base);
+               pos = simple_strtoul(argv[6], NULL, 16);
        else
                pos = 0;
 
@@ -313,7 +313,7 @@ int do_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
 }
 
 int do_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
-               int fstype, int cmdline_base)
+               int fstype)
 {
        unsigned long addr;
        const char *filename;
@@ -329,10 +329,10 @@ int do_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
                return 1;
 
        filename = argv[3];
-       addr = simple_strtoul(argv[4], NULL, cmdline_base);
-       bytes = simple_strtoul(argv[5], NULL, cmdline_base);
+       addr = simple_strtoul(argv[4], NULL, 16);
+       bytes = simple_strtoul(argv[5], NULL, 16);
        if (argc >= 7)
-               pos = simple_strtoul(argv[6], NULL, cmdline_base);
+               pos = simple_strtoul(argv[6], NULL, 16);
        else
                pos = 0;
 
index c837bae25cda0f9a0e8d52120269a009c7a1646c..7d9403ed87588c2f254ec0a4b514fe5840eac0b9 100644 (file)
@@ -59,10 +59,10 @@ int fs_read(const char *filename, ulong addr, int offset, int len);
  * to a specific filesystem type via the fstype parameter.
  */
 int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
-               int fstype, int cmdline_base);
+               int fstype);
 int do_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
                int fstype);
 int do_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
-               int fstype, int cmdline_base);
+               int fstype);
 
 #endif /* _FS_H */