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 <k...@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.   *
******************************************************************
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to