Merge branch 'master' of git://ted.mutabah.net/acess2
[tpg/acess2.git] / KernelLand / Kernel / vfs / memfile.c
index 14b3948..ad68671 100644 (file)
@@ -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;
        

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