#include <vfs.h>\r
#include "fs_fat.h"\r
\r
-#define DEBUG 1\r
+#define DEBUG 0\r
#define VERBOSE 1\r
\r
#if DEBUG\r
return 0;\r
}\r
\r
+ // Sanity Check offset\r
+ if(offset > node->Size) {\r
+ //Log("FAT_Read: Reading past EOF (%i > %i)", offset, node->Size);\r
+ return 0;\r
+ }\r
+ // Clamp Size\r
+ if(offset + length > node->Size) {\r
+ //Log("FAT_Read: Reading past EOF (%lli + %lli > %lli), clamped to %lli",\r
+ // offset, length, node->Size, node->Size - offset);\r
+ length = node->Size - offset;\r
+ }\r
+ \r
// Single Cluster including offset\r
if(length + offset < bpc)\r
{\r
memcpy( buffer, (void*)( tmpBuf + offset%bpc ), length );\r
free(tmpBuf);\r
LEAVE('i', 1);\r
- return 1;\r
+ return length;\r
}\r
\r
preSkip = offset / bpc;\r
if (count == 1) {\r
free(tmpBuf);\r
LEAVE('i', 1);\r
- return 1;\r
+ return length;\r
}\r
\r
cluster = FAT_int_GetFatValue(handle, cluster);\r
\r
ENTER("pParent pFT sLongFileName", parent, ft, LongFileName);\r
\r
- // Get Name\r
- //node.Name = FAT_int_CreateName(parent, ft, LongFileName);\r
// Set Other Data\r
node.Inode = ft->cluster | (ft->clusterHi<<16);\r
node.Size = ft->size;\r
node.ReadDir = FAT_ReadDir;\r
node.FindDir = FAT_FindDir;\r
node.MkNod = FAT_Mknod;\r
+ node.Size = -1;\r
} else {\r
node.Read = FAT_Read;\r
node.Write = FAT_Write;\r
// Offset in sector\r
a = dirpos & 0xF;\r
\r
- LOG("offset=%i, a=%i\n", (Uint)offset, a);\r
+ LOG("offset=%i, a=%i", (Uint)offset, a);\r
\r
// Read Sector\r
VFS_ReadAt(disk->fileHandle, offset*512, 512, fileinfo); // Read Dir Data\r
\r
- LOG("name[0] = 0x%x\n", (Uint8)fileinfo[a].name[0]);\r
+ LOG("name[0] = 0x%x", (Uint8)fileinfo[a].name[0]);\r
//Check if this is the last entry\r
if(fileinfo[a].name[0] == '\0') {\r
dirNode->Size = dirpos;\r
- LOG("End of list\n");\r
+ LOG("End of list");\r
LEAVE('n');\r
return NULL; // break\r
}\r
#endif\r
\r
LEAVE('s', ret);\r
- return VFS_FREEPLZ(ret);\r
+ return ret;\r
}\r
\r
/**\r