3 #include "fatvol_local.h"
6 void FatVol_SetNextCluster(C_FATVOL *self, FATVOL_UINT uiCluster, FATVOL_UINT uiNextCluster)
8 switch ( self->iFatType )
10 case FATVOL_TYPE_FAT12:
12 if ( uiCluster % 2 == 0 )
14 self->pubFatBuf[(uiCluster / 2) * 3 + 0] = uiNextCluster & 0xff;
15 self->pubFatBuf[(uiCluster / 2) * 3 + 1] = ((uiNextCluster >> 8) & 0x0f) | (self->pubFatBuf[(uiCluster / 2) * 3 + 1] & 0xf0);
19 self->pubFatBuf[(uiCluster / 2) * 3 + 1] = ((uiNextCluster << 4) & 0xf0) | (self->pubFatBuf[(uiCluster / 2) * 3 + 1] & 0x0f);
20 self->pubFatBuf[(uiCluster / 2) * 3 + 2] = ((uiNextCluster >> 4) & 0xff);
24 self->pubFatDirty[((uiCluster / 2) * 3 + 0) / self->uiBytesPerSector] = 1;
25 self->pubFatDirty[((uiCluster / 2) * 3 + 2) / self->uiBytesPerSector] = 1;
28 case FATVOL_TYPE_FAT16:
30 self->pubFatBuf[uiCluster * 2 + 0] = uiNextCluster % 256;
31 self->pubFatBuf[uiCluster * 2 + 1] = uiNextCluster / 256;
34 self->pubFatDirty[(uiCluster * 2) / self->uiBytesPerSector] = 1;
37 case FATVOL_TYPE_FAT32:
39 self->pubFatBuf[uiCluster * 2 + 0] = uiNextCluster % 256;
40 self->pubFatBuf[uiCluster * 2 + 1] = (uiNextCluster / 256) % 256;
41 self->pubFatBuf[uiCluster * 2 + 2] = (uiNextCluster / 256 / 256) % 256;
42 self->pubFatBuf[uiCluster * 2 + 3] = (uiNextCluster / 256 / 256 / 256) % 256;
45 self->pubFatDirty[(uiCluster * 4) / self->uiBytesPerSector] = 1;