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);
*/
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)
return 1;
* \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];
}
* \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;
rem_len = Length;
track = Offset / BYTES_PER_TRACK;
- Offset %= BYTES_PER_TRACK;
+ Offset %= BYTES_PER_TRACK;
+
+ // TODO: Handle (Flags & VFS_IOFLAG_NOBLOCK)
if( Offset )
{