On 07/20/2018 04:57 AM, AKASHI Takahiro wrote:
> FAT file system's long file name support is a bit complicated and has some
> restrictions on its naming. We should be careful about it especially for
> write as it may easily end up with wrong file system.
> 
> normalize_longname() check for the rules and normalize a file name
> if necessary. Please note, however, that this function is yet to be
> extended to fully comply with the standard.
> 
> Signed-off-by: AKASHI Takahiro <takahiro.aka...@linaro.org>

The patch has to be rebased on current master due to

fs: fat: cannot write to subdirectories
0dc1bfb7302d220a48364263d5632d6d572b069b

which has been merged into U-Boot master.

> ---
>  fs/fat/fat_write.c | 52 +++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 44 insertions(+), 8 deletions(-)
> 
> diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
> index 3b77557b3e..6c715a70f4 100644
> --- a/fs/fat/fat_write.c
> +++ b/fs/fat/fat_write.c
> @@ -899,6 +899,44 @@ static dir_entry *find_directory_entry(fsdata *mydata, 
> int startsect,
>       return NULL;
>  }
>  
> +static int normalize_longname(char *l_filename, const char *filename)
> +{
> +     const char *p, legal[] = "!#$%&\'()-.@^`_{}~";

The logic below gets simpler if you define the illegal characters like
in the aforementioned patch.

Best regards

Heinrich

> +     char c;
> +     int name_len;
> +
> +     /* Check that the filename is valid */
> +     for (p = filename; p < filename + strlen(filename); p++) {
> +             c = *p;
> +
> +             if (('0' <= c) && (c <= '9'))
> +                     continue;
> +             if (('A' <= c) && (c <= 'Z'))
> +                     continue;
> +             if (('a' <= c) && (c <= 'z'))
> +                     continue;
> +             if (strchr(legal, c))
> +                     continue;
> +             /* extended code */
> +             if ((0x80 <= c) && (c <= 0xff))
> +                     continue;
> +
> +             return -1;
> +     }
> +
<snip />
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to