OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / volume / fat / fatvol_setnextcluster.c
1
2
3 #include "fatvol_local.h"
4
5
6 void FatVol_SetNextCluster(C_FATVOL *self, FATVOL_UINT uiCluster, FATVOL_UINT uiNextCluster)
7 {
8         switch ( self->iFatType )
9         {
10         case FATVOL_TYPE_FAT12:
11                 /* FAT更新 */
12                 if ( uiCluster % 2 == 0 )
13                 {
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);
16                 }
17                 else
18                 {
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);
21                 }
22
23                 /* 更新フラグ設定 */
24                 self->pubFatDirty[((uiCluster / 2) * 3 + 0) / self->uiBytesPerSector] = 1;
25                 self->pubFatDirty[((uiCluster / 2) * 3 + 2) / self->uiBytesPerSector] = 1;
26                 break;
27                 
28         case FATVOL_TYPE_FAT16:
29                 /* FAT更新 */
30                 self->pubFatBuf[uiCluster * 2 + 0] = uiNextCluster % 256;
31                 self->pubFatBuf[uiCluster * 2 + 1] = uiNextCluster / 256;
32
33                 /* 更新フラグ設定 */
34                 self->pubFatDirty[(uiCluster * 2) / self->uiBytesPerSector] = 1;
35                 break;
36
37         case FATVOL_TYPE_FAT32:
38                 /* FAT更新 */
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;
43
44                 /* 更新フラグ設定 */
45                 self->pubFatDirty[(uiCluster * 4) / self->uiBytesPerSector] = 1;
46         }
47 }
48
49
50 /* end of file */