
On Sat, 8 Oct 2016, Sergey Kubushyn wrote:
On Sat, 8 Oct 2016, Tom Rini wrote:
On Wed, Oct 05, 2016 at 12:38:01PM -0700, Sergey Kubushyn wrote:
This adds "file exists" commands to generic FS as well as to FAT, EXT4, and UBIFS. Also adds "file size" command to UBIFS.
The return value for "file exists" commands is REVERSED i.e. they return 1 if file exists and 0 otherwise. This is a deliberate decision because those commands are supposed to be used almost exclusively in scripts and TRUE value is _not_ zero while FALSE is zero.
As of now the only way to check for a file existence is to attempt a read on that file (aka load.) That works but it makes an unnecessary read, overwrites memory at destination address if file not a zero length one, and outputs unnecessary messages to the console in any case.
Checking file existence in scripts is a valuable feature that allows the higher level software (e.g. Linux) to interact with U-Boot by creating some semaphore files and rebooting. We do use it quite extensively for system setup at manufacturing time and for other purposes (e.g. our Android "recovery" is implemented this way.)
Signed-off-by: Sergey Kubushyn ksi@koi8.net
Can you please do this in at least two patches? file size to ubi should be its own patch. Also:
Sure, will do later today.
+int do_ext4_file_exists(cmd_tbl_t *cmdtp, int flag, int argc,
char *const argv[])
+{
- int ret;
- ret = do_file_exists(cmdtp, flag, argc, argv, FS_TYPE_EXT);
- if (ret == 0) return 1;
- if (ret == 1) return 0;
- return ret;
+}
I can only assume this hasn't been compile tested in a while, and you should simplify the code into a single if/else and a comment on what we want/mean. Thanks!
The problem is do_file_exists() can return not just 0 if file exists or 1 if it doesn't but also a negative value for "I don't know" i.e. when e.g. FS mount failed.
I don't know if those return codes are somehow processed further up (too much time to dig everything to the bare metal) so I decided to return that value as-is if it happened. Sure it could be done like e.g.
return (ret == 0);
even without any if-elses and it is probably the proper way to do it but I fell victim of perfectionism :))
Will re-do it with the above construction and split in 2 parts. Will also send it with git send-email so it won't end up garbled.
OK, please disregard this patch altogether. I somehow missed "test -e" command that has been implemented something like 2 years ago and that command makes this entire patch unnecessary.
I will rewrite my scripts with "test -e" before submitting new boards.
--- ****************************************************************** * KSI@home KOI8 Net < > The impossible we do immediately. * * Las Vegas NV, USA < > Miracles require 24-hour notice. * ******************************************************************