|
From: Thomas P. <sh...@us...> - 2007-09-22 18:37:41
|
Update of /cvsroot/xbox-linux/kernel/fs/fatx In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv3285/fs/fatx Modified Files: cache.c Log Message: Make Linux created FatX file compatible with MS kernel created FatX files. Index: cache.c =================================================================== RCS file: /cvsroot/xbox-linux/kernel/fs/fatx/cache.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- cache.c 17 Dec 2005 23:36:24 -0000 1.3 +++ cache.c 22 Sep 2007 18:37:41 -0000 1.4 @@ -2,7 +2,8 @@ * linux/fs/fatx/cache.c * * Written 2003 by Edgar Hucek and Lehner Franz - * + * Updated 22-Sept-2007 by Thomas Pedley: + * Fix invalid final cluster in files: 0xfffffff8 -> 0xffffffff */ #include <linux/fatx_fs.h> @@ -60,9 +61,13 @@ PRINTK("FATX: fatx_access: 0x%x, nr=0x%x, first=0x%x, next=0x%x\n", b, nr, first, next); if (new_value != -1) { if (FATX_SB(sb)->fat_bits == 32) { + // Fix invalid linux FatX final file cluster for 32bit FSes. + if (new_value == (int)0xfffffff8) new_value = (int)0xffffffff; ((__u32 *)bh->b_data)[(first & (sb->s_blocksize - 1)) >> 2] = cpu_to_fs32(sb, new_value); } else if (FATX_SB(sb)->fat_bits == 16) { + // Fix invalid Linux FatX final file cluster for 16bit FSes. + if (new_value == 0xfff8) new_value = 0xffff; ((__u16 *)bh->b_data)[(first & (sb->s_blocksize - 1)) >> 1] = cpu_to_fs16(sb, new_value); } |