Kernel - Implemented select(), partially debugged
[tpg/acess2.git] / Kernel / vfs / io.c
index b27e7f0..67d384c 100644 (file)
@@ -2,7 +2,7 @@
  * AcessMicro VFS
  * - File IO Passthru's
  */
-#include <common.h>
+#include <acess.h>
 #include "vfs.h"
 #include "vfs_int.h"
 
@@ -79,10 +79,10 @@ Uint64 VFS_ReadAt(int FD, Uint64 Offset, Uint64 Length, void *Buffer)
 }
 
 /**
- * \fn Uint64 VFS_Write(int FD, Uint64 Length, void *Buffer)
+ * \fn Uint64 VFS_Write(int FD, Uint64 Length, const void *Buffer)
  * \brief Read data from a node (file)
  */
-Uint64 VFS_Write(int FD, Uint64 Length, void *Buffer)
+Uint64 VFS_Write(int FD, Uint64 Length, const void *Buffer)
 {
        tVFS_Handle     *h;
        Uint64  ret;
@@ -95,17 +95,18 @@ Uint64 VFS_Write(int FD, Uint64 Length, void *Buffer)
 
        if(!h->Node->Write)     return 0;
        
-       ret = h->Node->Write(h->Node, h->Position, Length, Buffer);
+       // TODO: This is a hack, I need to change VFS_Node to have "const void*"
+       ret = h->Node->Write(h->Node, h->Position, Length, (void*)Buffer);
        if(ret == -1)   return -1;
        h->Position += ret;
        return ret;
 }
 
 /**
- * \fn Uint64 VFS_WriteAt(int FD, Uint64 Offset, Uint64 Length, void *Buffer)
- * \brief Write data to a file at a given offset (atomic)
+ * \fn Uint64 VFS_WriteAt(int FD, Uint64 Offset, Uint64 Length, const void *Buffer)
+ * \brief Write data to a file at a given offset
  */
-Uint64 VFS_WriteAt(int FD, Uint64 Offset, Uint64 Length, void *Buffer)
+Uint64 VFS_WriteAt(int FD, Uint64 Offset, Uint64 Length, const void *Buffer)
 {
        tVFS_Handle     *h;
        Uint64  ret;
@@ -117,7 +118,8 @@ Uint64 VFS_WriteAt(int FD, Uint64 Offset, Uint64 Length, void *Buffer)
        if( h->Node->Flags & VFS_FFLAG_DIRECTORY )      return -1;
 
        if(!h->Node->Write)     return 0;
-       ret = h->Node->Write(h->Node, Offset, Length, Buffer);
+       // TODO: This is a hack, I need to change VFS_Node to have "const void*"
+       ret = h->Node->Write(h->Node, Offset, Length, (void*)Buffer);
        if(ret == -1)   return -1;
        return ret;
 }
@@ -137,33 +139,36 @@ Uint64 VFS_Tell(int FD)
 }
 
 /**
- * \fn int VFS_Seek(int FD, Sint64 Distance, int Whence)
+ * \fn int VFS_Seek(int FD, Sint64 Offset, int Whence)
  * \brief Seek to a new location
  * \param FD   File descriptor
- * \param Distance     Where to go
+ * \param Offset       Where to go
  * \param Whence       From where
  */
-int VFS_Seek(int FD, Sint64 Distance, int Whence)
+int VFS_Seek(int FD, Sint64 Offset, int Whence)
 {
        tVFS_Handle     *h;
        
        h = VFS_GetHandle(FD);
        if(!h)  return -1;
        
+       //Log_Debug("VFS", "VFS_Seek: (fd=0x%x, Offset=0x%llx, Whence=%i)",
+       //      FD, Offset, Whence);
+       
        // Set relative to current position
        if(Whence == 0) {
-               h->Position += Distance;
+               h->Position += Offset;
                return 0;
        }
        
        // Set relative to end of file
        if(Whence < 0) {
-               h->Position = h->Node->Size - Distance;
+               h->Position = h->Node->Size - Offset;
                return 0;
        }
        
        // Set relative to start of file
-       h->Position = Distance;
+       h->Position = Offset;
        return 0;
 }
 
@@ -183,11 +188,11 @@ int VFS_IOCtl(int FD, int ID, void *Buffer)
 }
 
 /**
- * \fn int VFS_FInfo(int FD, struct s_sysFInfo *Dest, int MaxACLs)
+ * \fn int VFS_FInfo(int FD, tFInfo *Dest, int MaxACLs)
  * \brief Retrieve file information
  * \return Number of ACLs stored
  */
-int VFS_FInfo(int FD, struct s_sysFInfo *Dest, int MaxACLs)
+int VFS_FInfo(int FD, tFInfo *Dest, int MaxACLs)
 {
        tVFS_Handle     *h;
         int    max;
@@ -212,3 +217,12 @@ int VFS_FInfo(int FD, struct s_sysFInfo *Dest, int MaxACLs)
        
        return max;
 }
+
+// === EXPORTS ===
+EXPORT(VFS_Read);
+EXPORT(VFS_Write);
+EXPORT(VFS_ReadAt);
+EXPORT(VFS_WriteAt);
+EXPORT(VFS_IOCtl);
+EXPORT(VFS_Seek);
+EXPORT(VFS_Tell);

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