mirror of
https://xff.cz/git/u-boot/
synced 2025-09-02 17:22:22 +02:00
fs/fat: simplify get_fatent for FAT12
Instead of shuffling bits from two adjacent 16 bit words, use one 16 bit word with the appropriate byte offset in the buffer. Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
This commit is contained in:
34
fs/fat/fat.c
34
fs/fat/fat.c
@@ -181,7 +181,6 @@ static __u32 get_fatent(fsdata *mydata, __u32 entry)
|
|||||||
__u32 bufnum;
|
__u32 bufnum;
|
||||||
__u32 off16, offset;
|
__u32 off16, offset;
|
||||||
__u32 ret = 0x00;
|
__u32 ret = 0x00;
|
||||||
__u16 val1, val2;
|
|
||||||
|
|
||||||
if (CHECK_CLUST(entry, mydata->fatsize)) {
|
if (CHECK_CLUST(entry, mydata->fatsize)) {
|
||||||
printf("Error: Invalid FAT entry: 0x%08x\n", entry);
|
printf("Error: Invalid FAT entry: 0x%08x\n", entry);
|
||||||
@@ -243,35 +242,12 @@ static __u32 get_fatent(fsdata *mydata, __u32 entry)
|
|||||||
ret = FAT2CPU16(((__u16 *) mydata->fatbuf)[offset]);
|
ret = FAT2CPU16(((__u16 *) mydata->fatbuf)[offset]);
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
off16 = (offset * 3) / 4;
|
off16 = (offset * 3) / 2;
|
||||||
|
ret = FAT2CPU16(*(__u16 *)(mydata->fatbuf + off16));
|
||||||
|
|
||||||
switch (offset & 0x3) {
|
if (offset & 0x1)
|
||||||
case 0:
|
ret >>= 4;
|
||||||
ret = FAT2CPU16(((__u16 *) mydata->fatbuf)[off16]);
|
ret &= 0xfff;
|
||||||
ret &= 0xfff;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
val1 = FAT2CPU16(((__u16 *)mydata->fatbuf)[off16]);
|
|
||||||
val1 &= 0xf000;
|
|
||||||
val2 = FAT2CPU16(((__u16 *)mydata->fatbuf)[off16 + 1]);
|
|
||||||
val2 &= 0x00ff;
|
|
||||||
ret = (val2 << 4) | (val1 >> 12);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
val1 = FAT2CPU16(((__u16 *)mydata->fatbuf)[off16]);
|
|
||||||
val1 &= 0xff00;
|
|
||||||
val2 = FAT2CPU16(((__u16 *)mydata->fatbuf)[off16 + 1]);
|
|
||||||
val2 &= 0x000f;
|
|
||||||
ret = (val2 << 8) | (val1 >> 8);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
ret = FAT2CPU16(((__u16 *)mydata->fatbuf)[off16]);
|
|
||||||
ret = (ret & 0xfff0) >> 4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
debug("FAT%d: ret: 0x%08x, entry: 0x%08x, offset: 0x%04x\n",
|
debug("FAT%d: ret: 0x%08x, entry: 0x%08x, offset: 0x%04x\n",
|
||||||
mydata->fatsize, ret, entry, offset);
|
mydata->fatsize, ret, entry, offset);
|
||||||
|
Reference in New Issue
Block a user