X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FStorage%2FFDDv2%2Fmain.c;h=0821a58908460592dc1f1500051d8f27b6295998;hb=1345302e0da9fe44b05709d5b3d2aa5889c55d9e;hp=1119de86c1600c98c95ac5989f171e38b1ff97b7;hpb=38e87df5d43412cc7b0194a9a5ac101a15870653;p=tpg%2Facess2.git diff --git a/Modules/Storage/FDDv2/main.c b/Modules/Storage/FDDv2/main.c index 1119de86..0821a589 100644 --- a/Modules/Storage/FDDv2/main.c +++ b/Modules/Storage/FDDv2/main.c @@ -174,6 +174,7 @@ Uint64 FDD_ReadFS(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) if( Length > Node->Size ) Length = Node->Size; if( Offset + Length > Node->Size ) Length = Node->Size - Offset; + if( Length == 0 ) return 0; rem_len = Length; @@ -183,7 +184,7 @@ Uint64 FDD_ReadFS(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) 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; @@ -193,15 +194,18 @@ Uint64 FDD_ReadFS(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) 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; @@ -217,6 +221,9 @@ int FDD_int_ReadWriteWithinTrack(int Disk, int Track, int bWrite, size_t Offset, 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);