X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fvfs%2Fmemfile.c;h=ad6867115eee4f641876250deb5c83ffde0e4da1;hb=b7d9f86f7a1c23be18b50d5c647fd5d3c08369c3;hp=14b39481d0c82d7adc503d605ace864855f27ead;hpb=48743e39650eb1ef988380e9d95f27fd40d3a9ce;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/vfs/memfile.c b/KernelLand/Kernel/vfs/memfile.c index 14b39481..ad686711 100644 --- a/KernelLand/Kernel/vfs/memfile.c +++ b/KernelLand/Kernel/vfs/memfile.c @@ -9,8 +9,8 @@ // === PROTOTYPES === tVFS_Node *VFS_MemFile_Create(const char *Path); void VFS_MemFile_Close(tVFS_Node *Node); -Uint64 VFS_MemFile_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer); -Uint64 VFS_MemFile_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, const void *Buffer); +size_t VFS_MemFile_Read(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags); +size_t VFS_MemFile_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags); // === GLOBALS === tVFS_NodeType gVFS_MemFileType = { @@ -64,6 +64,7 @@ tVFS_Node *VFS_MemFile_Create(const char *Path) memset(ret, 0, sizeof(tVFS_Node)); // State + ret->Inode = base; ret->ImplPtr = (void*)base; ret->Size = size; @@ -91,10 +92,9 @@ void VFS_MemFile_Close(tVFS_Node *Node) } /** - * \fn Uint64 VFS_MemFile_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) * \brief Read from a memory file */ -Uint64 VFS_MemFile_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) +size_t VFS_MemFile_Read(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags) { // Check for use of free'd file if(Node->ImplPtr == NULL) return 0; @@ -103,6 +103,8 @@ Uint64 VFS_MemFile_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buf if(Offset > Node->Size) return 0; // Truncate data read if needed + if(Length > Node->Size) + Length = Node->Size; if(Offset + Length > Node->Size) Length = Node->Size - Offset; @@ -113,10 +115,9 @@ Uint64 VFS_MemFile_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buf } /** - * \fn Uint64 VFS_MemFile_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) * \brief Write to a memory file */ -Uint64 VFS_MemFile_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, const void *Buffer) +size_t VFS_MemFile_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags) { // Check for use of free'd file if(Node->ImplPtr == NULL) return 0; @@ -125,6 +126,8 @@ Uint64 VFS_MemFile_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, const vo if(Offset > Node->Size) return 0; // Truncate data read if needed + if(Length > Node->Size) + Length = Node->Size; if(Offset + Length > Node->Size) Length = Node->Size - Offset;