4 #include "fatfile_local.h"
8 FILE_SIZE FatFile_Read(
19 self = (C_FATFILE *)hFile;
22 if ( self->FilePos + Size > self->FileSize )
24 /* サイズ更新されていないかディレクトリテーブルを参照 */
25 if ( self->hDir != NULL )
31 if ( Size > self->FileSize - self->FilePos )
33 Size = self->FileSize - self->FilePos;
40 while ( Size > 0 && self->FilePos < self->FileSize )
44 unsigned char *pubClusterBuf;
47 ReadStart = self->FilePos % self->uiClusterSize;
48 ReadSize = self->uiClusterSize - ReadStart;
49 if ( ReadSize > Size )
55 if ( FatVol_GetClusterBuf(self->pFatVol, self->uiCurrentCluster, &pClusterBuf, 1) != FATVOL_ERR_OK )
61 memcpy(pBuf, (char *)pClusterBuf + ReadStart, ReadSize);
64 FatVol_RelClusterBuf(self->pFatVol, pClusterBuf, 0);
67 self->FilePos += ReadSize;
68 pBuf = (char *)pBuf + ReadSize;
72 self->uiCurrentCluster = FatVol_GetNextCluster(self->pFatVol, self->uiCurrentCluster);
75 return ReadSize - Size;