Kernel - Added 'Flags' param to VFS Read/Write/FindDir
[tpg/acess2.git] / KernelLand / Modules / Storage / FDDv2 / main.c
index f6290d9..7bea476 100644 (file)
@@ -22,9 +22,9 @@
  int   FDD_RegisterFS(void);
 // --- VFS
  int   FDD_ReadDir(tVFS_Node *Node, int pos, char dest[FILENAME_MAX]);
-tVFS_Node      *FDD_FindDir(tVFS_Node *dirNode, const char *Name);
+tVFS_Node      *FDD_FindDir(tVFS_Node *dirNode, const char *Name, Uint Flags);
  int   FDD_IOCtl(tVFS_Node *Node, int ID, void *Data);
-size_t FDD_ReadFS(tVFS_Node *node, off_t Offset, size_t Len, void *buffer);
+size_t FDD_ReadFS(tVFS_Node *node, off_t Offset, size_t Len, void *buffer, Uint Flags);
 // --- Helpers
  int   FDD_int_ReadWriteWithinTrack(int Disk, int Track, int bWrite, size_t Offset, size_t Length, void *Buffer);
 
@@ -113,9 +113,9 @@ int FDD_RegisterFS(void)
  */
 int FDD_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
 {
-       if(Pos < 0 || Pos > MAX_DISKS )
+       if(Pos < 0 || Pos >= MAX_DISKS )
                return -ENOENT;
-       if(gaFDD_Disks[Pos].bValid)
+       if(!gaFDD_Disks[Pos].bValid)
                return 1;
        
        Dest[0] = '0' + Pos;
@@ -129,13 +129,14 @@ int FDD_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
  * \param Name Drive name
  * \return Pointer to node structure
  */
-tVFS_Node *FDD_FindDir(tVFS_Node *Node, const char *Name)
+tVFS_Node *FDD_FindDir(tVFS_Node *Node, const char *Name, Uint Flags)
 {
         int    pos;
        if( '0' > Name[0] || Name[0] > '9' )    return NULL;
        if( Name[1] != '\0' )   return NULL;
        
        pos = Name[0] - '0';
+       if( pos >= MAX_DISKS )  return NULL;
        
        return &gaFDD_DiskNodes[pos];
 }
@@ -168,7 +169,7 @@ int FDD_IOCtl(tVFS_Node *Node, int ID, void *Data)
  * \param Buffer       Destination buffer
  * \return Number of bytes read
  */
-size_t FDD_ReadFS(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer)
+size_t FDD_ReadFS(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags)
 {
         int    disk = Node->Inode;
         int    track;
@@ -186,7 +187,9 @@ size_t FDD_ReadFS(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer)
        rem_len = Length;
 
        track = Offset / BYTES_PER_TRACK;
-       Offset %= BYTES_PER_TRACK;      
+       Offset %= BYTES_PER_TRACK;
+
+       // TODO: Handle (Flags & VFS_IOFLAG_NOBLOCK)
 
        if( Offset )
        {

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