2 * Hyper Operating System Application Framework
5 * @brief %jp{FATボリューム用デバイスドライバ}
7 * Copyright (C) 2006-2007 by Project HOS
8 * http://sourceforge.jp/projects/hos/
13 #include "fatvol_local.h"
16 static int FatVol_AlloctClusterBuf(C_FATVOL *self, FATVOL_UINT uiCluster, int iRead);
19 T_FATVOL_CLUSTERBUF *FatVol_GetClusterBuf(C_FATVOL *self, FATVOL_UINT uiCluster, int iRead)
24 iIndex = FatVol_AlloctClusterBuf(self, uiCluster, iRead);
33 T_FATVOL_CLUSTERBUF Tmp;
34 Tmp = self->pClusterBuf[iIndex];
35 memmove(&self->pClusterBuf[1], &self->pClusterBuf[0], iIndex * sizeof(T_FATVOL_CLUSTERBUF));
36 self->pClusterBuf[0] = Tmp;
39 return &self->pClusterBuf[0];
43 int FatVol_AlloctClusterBuf(C_FATVOL *self, FATVOL_UINT uiCluster, int iRead)
48 for ( iIndex = 0; iIndex < self->iClusterBufNum; iIndex++ )
51 if ( self->pClusterBuf[iIndex].uiClusterNum == uiCluster )
59 for ( iIndex = 0; iIndex < self->iClusterBufNum; iIndex++ )
61 if ( self->pClusterBuf[iIndex].uiClusterNum == FATVOL_CLUSTER_ENDMARKER )
68 if ( iIndex >= self->iClusterBufNum )
71 iIndex = self->iClusterBufNum - 1;
74 if ( self->pClusterBuf[iIndex].iDirty )
76 if ( FatVol_ClusterWrite(self, self->pClusterBuf[iIndex].uiClusterNum, self->pClusterBuf[iIndex].pubBuf) != FATVOL_ERR_OK )
80 self->pClusterBuf[iIndex].iDirty = 0;
82 self->pClusterBuf[iIndex].uiClusterNum = FATVOL_CLUSTER_ENDMARKER;
88 if ( FatVol_ClusterRead(self, uiCluster, self->pClusterBuf[iIndex].pubBuf) != FATVOL_ERR_OK )
93 self->pClusterBuf[iIndex].iDirty = 0;
94 self->pClusterBuf[iIndex].uiClusterNum = uiCluster;