672 DWORD startBaseSect, countBaseSect;
674 CHAR label[_MAX_ENTRYLENGTH + 1];
675 DWORD *labelTmp = NULL;
681 if (fs == NULL || (disk_status(fs->pdrv) & STA_NOINIT)) {
682 return FR_INVAILD_FATFS;
686 res = mount_volume(&path, &fs, FA_WRITE);
693 LEAVE_FF(fs, FR_INVAILD_FATFS);
696 virSect = fs->fatbase - 1;
699 countBaseSect = LD2PC(vol);
700 startBaseSect = LD2PS(vol);
708 work = (BYTE *)ff_memalloc(SS(fs));
710 LEAVE_FF(fs, FR_NOT_ENOUGH_CORE);
715 (
void)memset_s(work, SS(fs), 0, SS(fs));
717 for (i = 0; i < fs->vir_amount; i++) {
719 (
void)memset_s(label,
sizeof(label), 0,
sizeof(label));
720 (
void)memcpy_s(label, _MAX_ENTRYLENGTH + 1,
g_fatVirPart.virtualinfo.virpartname[i], _MAX_ENTRYLENGTH + 1);
721 labelTmp = (DWORD *)label;
723 st_dword(work + VR_PARTITION + i * VR_ITEMSIZE + VR_Entry + 0, tmp);
724 tmp = *((DWORD * )(label + 4));
725 st_dword(work + VR_PARTITION + i * VR_ITEMSIZE + VR_Entry + 4, tmp);
726 tmp = *((DWORD * )(label + 8));
727 st_dword(work + VR_PARTITION + i * VR_ITEMSIZE + VR_Entry + 8, tmp);
728 tmp = *((DWORD * )(label + 12));
729 st_dword(work + VR_PARTITION + i * VR_ITEMSIZE + VR_Entry + 12, tmp);
731 virpartper +=
g_fatVirPart.virtualinfo.virpartpercent[i];
733 (
void)memcpy_s((CHILDFS(fs, i))->namelabel, _MAX_ENTRYLENGTH + 1,
g_fatVirPart.virtualinfo.virpartname[i],
734 _MAX_ENTRYLENGTH + 1);
736 (CHILDFS(fs, i))->last_clst = (CHILDFS(fs, i))->st_clst - 1;
737 work[VR_PARTITION + i * VR_ITEMSIZE + VR_Available] = 0x80;
741 work[VR_PartitionCnt] = fs->vir_amount;
742 work[VR_PartitionFSType] = fs->fs_type;
743 st_dword(work + VR_PartitionStSec, startBaseSect);
744 st_dword(work + VR_PartitionCtSec, countBaseSect);
745 st_word(work + VR_PartitionClstSz, fs->csize);
746 st_dword(work + VR_PartitionCtClst, fs->n_fatent);
747 for (i = 0; i < fs->vir_amount; i++) {
748 st_dword(work + VR_PARTITION + i * VR_ITEMSIZE + VR_StartClust,
749 (CHILDFS(fs, i))->st_clst);
750 st_dword(work + VR_PARTITION + i * VR_ITEMSIZE + VR_CountClust,
751 (CHILDFS(fs, i))->ct_clst);
755 st_dword(work + VR_VertifyString, 0x4C495445);
758 if (disk_write(pdrv, work, virSect, 1) != RES_OK) {
static void FatfsClacPartInfo(FATFS *fs, DOUBLE virpartper, UINT i)
FAT_VIR_PART g_fatVirPart