diff options
Diffstat (limited to 'fs/fat/fat.c')
-rw-r--r-- | fs/fat/fat.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/fat/fat.c b/fs/fat/fat.c index fe899d0442..56540031d6 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -110,7 +110,7 @@ int fat_register_device(struct blk_desc *dev_desc, int part_no) info.name[0] = 0; info.type[0] = 0; info.bootable = 0; -#ifdef CONFIG_PARTITION_UUIDS +#if CONFIG_IS_ENABLED(PARTITION_UUIDS) info.uuid[0] = 0; #endif } @@ -179,7 +179,7 @@ int flush_dirty_fat_buffer(fsdata *mydata) static __u32 get_fatent(fsdata *mydata, __u32 entry) { __u32 bufnum; - __u32 off16, offset; + __u32 offset, off8; __u32 ret = 0x00; if (CHECK_CLUST(entry, mydata->fatsize)) { @@ -242,8 +242,9 @@ static __u32 get_fatent(fsdata *mydata, __u32 entry) ret = FAT2CPU16(((__u16 *) mydata->fatbuf)[offset]); break; case 12: - off16 = (offset * 3) / 2; - ret = FAT2CPU16(*(__u16 *)(mydata->fatbuf + off16)); + off8 = (offset * 3) / 2; + /* fatbut + off8 may be unaligned, read in byte granularity */ + ret = mydata->fatbuf[off8] + (mydata->fatbuf[off8 + 1] << 8); if (offset & 0x1) ret >>= 4; |