fs/fat: Fix a bug that long file name cannot be found

The field of first cluster under LFN directory entry must be 0x0000. If
it is set a value other than 0, it causes a problem where the long file
name entry cannot be found on a Windows PC and the short file name is
always used. In addition, correct the macro error in big endian.
This commit is contained in:
SPRESENSE 2022-06-30 14:13:46 +09:00 committed by Xiang Xiao
parent 34e7ce5817
commit fa1fad50b9
2 changed files with 16 additions and 13 deletions

View File

@ -653,19 +653,20 @@
# define DIR_PUTFILESIZE(p,v) fat_putuint32(UBYTE_PTR(p,DIR_FILESIZE),v)
# ifdef CONFIG_FAT_LFN
# define LDIR_PUTWCHAR1(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5),v)
# define LDIR_PUTWCHAR2(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5+2),v)
# define LDIR_PUTWCHAR3(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5+4),v)
# define LDIR_PUTWCHAR4(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5+6),v)
# define LDIR_PUTWCHAR5(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5+8),v)
# define LDIR_PUTWCHAR6(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11),v)
# define LDIR_PUTWCHAR7(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+2),v)
# define LDIR_PUTWCHAR8(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+4),v)
# define LDIR_PUTWCHAR9(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+6),v)
# define LDIR_PUTWCHAR10(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+8),v)
# define LDIR_PUTWCHAR11(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+10),v)
# define LDIR_PUTWCHAR12(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR12_13),v)
# define LDIR_PUTWCHAR13(p) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR12_13+2),v)
# define LDIR_PUTWCHAR1(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5),v)
# define LDIR_PUTWCHAR2(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5+2),v)
# define LDIR_PUTWCHAR3(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5+4),v)
# define LDIR_PUTWCHAR4(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5+6),v)
# define LDIR_PUTWCHAR5(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR1_5+8),v)
# define LDIR_PUTWCHAR6(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11),v)
# define LDIR_PUTWCHAR7(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+2),v)
# define LDIR_PUTWCHAR8(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+4),v)
# define LDIR_PUTWCHAR9(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+6),v)
# define LDIR_PUTWCHAR10(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+8),v)
# define LDIR_PUTWCHAR11(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR6_11+10),v)
# define LDIR_PUTWCHAR12(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR12_13),v)
# define LDIR_PUTWCHAR13(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_WCHAR12_13+2),v)
# define LDIR_PUTFSTCLUSTLO(p,v) fat_putuint16(UBYTE_PTR(p,LDIR_FSTCLUSTLO),v)
# endif
# define FSI_PUTLEADSIG(p,v) fat_putuint32(UBYTE_PTR(p,FSI_LEADSIG),v)
@ -808,6 +809,7 @@
# define LDIR_PUTWCHAR11(p,v) UINT16_PUT(p,LDIR_WCHAR6_11+10,v)
# define LDIR_PUTWCHAR12(p,v) UINT16_PUT(p,LDIR_WCHAR12_13,v)
# define LDIR_PUTWCHAR13(p,v) UINT16_PUT(p,LDIR_WCHAR12_13+2,v)
# define LDIR_PUTFSTCLUSTLO(p,v) UINT16_PUT(p,LDIR_FSTCLUSTLO,v)
# endif
# define FSI_PUTLEADSIG(p,v) UINT32_PUT(p,FSI_LEADSIG,v)

View File

@ -2426,6 +2426,7 @@ static int fat_putlfname(FAR struct fat_mountpt_s *fs,
LDIR_PUTATTRIBUTES(direntry, LDDIR_LFNATTR);
LDIR_PUTNTRES(direntry, 0);
LDIR_PUTCHECKSUM(direntry, checksum);
LDIR_PUTFSTCLUSTLO(direntry, 0);
fs->fs_dirty = true;
/* Read next directory entry */