- FAT_int_ReadCluster(disk, cluster, bpc, tmpBuf);\r
- memcpy((void*)(buffer+pos), tmpBuf, length-pos);\r
+ // Get next cluster in the chain\r
+ cluster = FAT_int_GetFatValue(disk, cluster);\r
+ if(cluster == -1) {\r
+ Warning("FAT_Read - Read past End of Cluster Chain");\r
+ free(tmpBuf);\r
+ LEAVE('i', 0);\r
+ return 0;\r
+ }\r
+ \r
+ // Read final cluster\r
+ if( Length - pos == bpc )\r
+ {\r
+ FAT_int_ReadCluster( disk, cluster, bpc, (void*)(Buffer+pos) );\r
+ }\r
+ else {\r
+ FAT_int_ReadCluster( disk, cluster, bpc, tmpBuf );\r
+ memcpy( (void*)(Buffer+pos), tmpBuf, Length-pos );\r
+ }\r