3 #include "fatvol_local.h"
6 FATVOL_UINT FatVol_GetNextCluster(C_FATVOL *self, FATVOL_UINT uiCluster)
8 FATVOL_UINT uiNextCluster = FATVOL_CLUSTER_ENDMARKER;
10 switch ( self->iFatType )
12 case FATVOL_TYPE_FAT12:
13 /* 0xffff0000 からルートディレクトリをマップ */
14 if ( uiCluster >= 0xffff0000 )
20 if ( uiCluster % 2 == 0 )
22 uiNextCluster = self->pubFatBuf[(uiCluster / 2) * 3 + 0]
23 + ((self->pubFatBuf[(uiCluster / 2) * 3 + 1] & 0x0f) << 8);
27 uiNextCluster = ((self->pubFatBuf[(uiCluster / 2) * 3 + 1] >> 4) & 0xf)
28 + (self->pubFatBuf[(uiCluster / 2) * 3 + 2] << 4);
31 if ( uiNextCluster >= 0x0ff7 )
33 uiNextCluster = FATVOL_CLUSTER_ENDMARKER;
37 case FATVOL_TYPE_FAT16:
38 /* 0xffff0000 からルートディレクトリをマップ */
39 if ( uiCluster >= 0xffff0000 )
45 uiNextCluster = self->pubFatBuf[uiCluster * 2] + self->pubFatBuf[uiCluster * 2 + 1] * 256;
46 if ( uiNextCluster >= 0xfff7 )
48 uiNextCluster = FATVOL_CLUSTER_ENDMARKER;
52 case FATVOL_TYPE_FAT32:
53 uiNextCluster = self->pubFatBuf[uiCluster * 4]
54 + self->pubFatBuf[uiCluster * 4 + 1] * 256
55 + self->pubFatBuf[uiCluster * 4 + 2] * 256 * 256
56 + self->pubFatBuf[uiCluster * 4 + 3] * 256 * 256 * 256;