fixed EOS calculation
[tpg/acess2.git] / Kernel / vfs / fs / fat.c
index 5bd7bac..bfae405 100644 (file)
@@ -342,6 +342,18 @@ Uint64 FAT_Read(tVFS_Node *node, Uint64 offset, Uint64 length, void *buffer)
                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
@@ -349,7 +361,7 @@ Uint64 FAT_Read(tVFS_Node *node, Uint64 offset, Uint64 length, void *buffer)
                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
@@ -379,7 +391,7 @@ Uint64 FAT_Read(tVFS_Node *node, Uint64 offset, Uint64 length, void *buffer)
        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
@@ -743,7 +755,7 @@ char *FAT_ReadDir(tVFS_Node *dirNode, int dirpos)
        #endif\r
        \r
        LEAVE('s', ret);\r
-       return VFS_FREEPLZ(ret);\r
+       return ret;\r
 }\r
 \r
 /**\r

UCC git Repository :: git.ucc.asn.au