Merge branch 'master' of git://localhost/acess2
[tpg/acess2.git] / KernelLand / Modules / Storage / FDDv2 / main.c
index bec157c..7bea476 100644 (file)
  int   FDD_Install(char **Arguments);
  int   FDD_RegisterFS(void);
 // --- VFS
-char   *FDD_ReadDir(tVFS_Node *Node, int pos);
-tVFS_Node      *FDD_FindDir(tVFS_Node *dirNode, const char *Name);
+ int   FDD_ReadDir(tVFS_Node *Node, int pos, char dest[FILENAME_MAX]);
+tVFS_Node      *FDD_FindDir(tVFS_Node *dirNode, const char *Name, Uint Flags);
  int   FDD_IOCtl(tVFS_Node *Node, int ID, void *Data);
-Uint64 FDD_ReadFS(tVFS_Node *node, Uint64 off, Uint64 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);
 
@@ -111,17 +111,16 @@ int FDD_RegisterFS(void)
  * \param Pos  Position
  * \return Heap string of node name
  */
-char *FDD_ReadDir(tVFS_Node *Node, int Pos)
+int FDD_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
 {
-       char    ret_tpl[2];
-       if(Pos < 0 || Pos > MAX_DISKS )
-               return NULL;
-       if(gaFDD_Disks[Pos].bValid)
-               return VFS_SKIP;
+       if(Pos < 0 || Pos >= MAX_DISKS )
+               return -ENOENT;
+       if(!gaFDD_Disks[Pos].bValid)
+               return 1;
        
-       ret_tpl[0] = '0' + Pos;
-       ret_tpl[1] = '\0';
-       return strdup(ret_tpl);
+       Dest[0] = '0' + Pos;
+       Dest[1] = '\0';
+       return 0;
 }
 
 /**
@@ -130,13 +129,14 @@ char *FDD_ReadDir(tVFS_Node *Node, int Pos)
  * \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];
 }
@@ -169,14 +169,14 @@ int FDD_IOCtl(tVFS_Node *Node, int ID, void *Data)
  * \param Buffer       Destination buffer
  * \return Number of bytes read
  */
-Uint64 FDD_ReadFS(tVFS_Node *Node, Uint64 Offset, Uint64 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;
         int    rem_len;
        char    *dest = Buffer;
 
-       ENTER("pNode XOffset XLength pBuffer", Node, Offset, Length, Buffer);
+       ENTER("pNode XOffset xLength pBuffer", Node, Offset, Length, Buffer);
 
        if( Offset > Node->Size )       LEAVE_RET('i', 0);
        if( Length > Node->Size )       Length = Node->Size;
@@ -187,7 +187,9 @@ Uint64 FDD_ReadFS(tVFS_Node *Node, Uint64 Offset, Uint64 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