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