MODULE_DEFINE(0, FDD_VERSION, Storage_FDDv2, FDD_Install, NULL, "x86_ISADMA", NULL);
tDrive gaFDD_Disks[MAX_DISKS];
tVFS_Node gaFDD_DiskNodes[MAX_DISKS];
+tVFS_NodeType gFDD_RootNodeType = {
+ .TypeName = "FDD Root Node",
+ .ReadDir = FDD_ReadDir,
+ .FindDir = FDD_FindDir,
+ .IOCtl = FDD_IOCtl
+ };
+tVFS_NodeType gFDD_DevNodeType = {
+ .TypeName = "FDD Device",
+ .Read = FDD_ReadFS,
+ .Write = NULL // FDD_WriteFS?
+ };
tDevFS_Driver gFDD_DriverInfo = {
NULL, "fdd",
{
.NumACLs = 1,
.ACLs = &gVFS_ACL_EveryoneRX,
.Flags = VFS_FFLAG_DIRECTORY,
- .ReadDir = FDD_ReadDir,
- .FindDir = FDD_FindDir,
- .IOCtl = FDD_IOCtl
+ .Type = &gFDD_RootNodeType
}
};
gaFDD_DiskNodes[i].Inode = i;
gaFDD_DiskNodes[i].Flags = 0;
gaFDD_DiskNodes[i].NumACLs = 0;
- gaFDD_DiskNodes[i].Read = FDD_ReadFS;
- gaFDD_DiskNodes[i].Write = NULL;//FDD_WriteFS;
+ gaFDD_DiskNodes[i].Type = &gFDD_DevNodeType;
gaFDD_DiskNodes[i].Size = 1440*1024; // TODO: Non 1.44 disks
}
if( Offset )
{
int len;
- if(rem_len > BYTES_PER_TRACK-Offset)
+ if(rem_len > BYTES_PER_TRACK - Offset)
len = BYTES_PER_TRACK - Offset;
else
len = rem_len;
track ++;
}
- while( rem_len > BYTES_PER_TRACK )
+ if( rem_len > 0)
{
- FDD_int_ReadWriteWithinTrack(disk, track, 0, 0, BYTES_PER_TRACK, dest);
- dest += BYTES_PER_TRACK;
- rem_len -= BYTES_PER_TRACK;
- track ++;
- }
+ while( rem_len > BYTES_PER_TRACK )
+ {
+ FDD_int_ReadWriteWithinTrack(disk, track, 0, 0, BYTES_PER_TRACK, dest);
+ dest += BYTES_PER_TRACK;
+ rem_len -= BYTES_PER_TRACK;
+ track ++;
+ }
- FDD_int_ReadWriteWithinTrack(disk, track, 0, 0, rem_len, dest);
+ FDD_int_ReadWriteWithinTrack(disk, track, 0, 0, rem_len, dest);
+ }
LEAVE('X', Length);
return Length;
if( Offset + Length > BYTES_PER_TRACK )
return 1;
+ if( Length == 0 )
+ return 0;
+
ENTER("iDisk iTrack bbWrite xOffset xLength pBuffer",
Disk, Track, bWrite, Offset, Length, Buffer);