On Tuesday, October 30, 2012 10:18:03 PM, Stephen Warren wrote: > On 10/30/2012 02:23 PM, Benoît Thébaudeau wrote: > >> +int do_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const > >> argv[], > >> + int fstype) > >> +{ > >> + if (argc < 2) > >> + return CMD_RET_USAGE; > >> + > >> + if (fs_set_blk_dev(argv[1], (argc >= 3) ? argv[2] : NULL, > >> fstype)) > >> + return 1; > >> + > >> + if (fs_ls(argc == 4 ? argv[3] : "/")) > > > > IMHO, it would be better to just ignore the possible extra > > arguments, like in: > > + if (fs_ls(argc >= 4 ? argv[3] : "/")) > > Here I don't agree. If the command expects a certain set of > arguments, > we should validate that the user provided exactly that set, and no > more. > If we allow arbitrary cruft, then if we need to add new arguments > later, > we won't be able to guarantee that handling those extra arguments > won't > break some existing broken usage of the command.
My comment was misleading. Actually, with the current code, do_ls() can not be called (except directly) if there are more than 4 arguments, because of the way the ls command is declared through U_BOOT_CMD(). Hence, if ">=" is used, arguments can be added later without changing existing lines. And if we consider a direct call to do_ls() skipping the command system, then this function should return CMD_RET_USAGE if argc > 4. Best regards, Benoît _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot