Context Navigation


Changeset 154 for branches


Ignore:
Timestamp:
Nov 9, 2016, 10:36:26 PM (9 years ago)
Author:
Valery V. Sedletski
Message:

fat32.ifs: Code cleanup and formatting in FS_MOUNT.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/fat32-0.10/src/ifs/ifsmount.c

    r152 r154
    4848
    4949} RP_GETDRIVERCAPS, FAR *PRP_GETDRIVERCAPS;
    50(削除) (削除ここまで)
    51(削除) (削除ここまで)
    52(削除) //static BOOL RemoveVolume(PVOLINFO pVolInfo); (削除ここまで)
    53(削除) //static USHORT CheckWriteProtect(PVOLINFO); (削除ここまで)
    5450
    5551PRIVATE BOOL RemoveVolume(PVOLINFO pVolInfo);
    7571USHORT usVolCount;
    7672
    77(削除) //PBOOTSECT pSect; (削除ここまで)
    78(削除) //PVOLINFO pVolInfo; (削除ここまで)
    79(削除) //PVOLINFO pNext, pPrev; (削除ここまで)
    80(削除) //USHORT hDupVBP; (削除ここまで)
    81(削除) //USHORT rc; (削除ここまで)
    82(削除) (削除ここまで)
    8373P_DriverCaps pDevCaps;
    8474P_VolChars pVolChars;
    9989 {
    10090 case MOUNT_MOUNT :
    101(削除) (削除ここまで)
    10291 pSect = (PBOOTSECT)pBoot;
    10392
    104(削除) // if (FSH_FINDDUPHVPB(hVBP, &hDupVBP)) (削除ここまで)
    105(削除) // hDupVBP = 0; (削除ここまで)
    106(削除) (削除ここまで)
    107(削除) // pSect = (PBOOTSECT)pBoot; (削除ここまで)
    108(削除) // if (memicmp(pSect->FileSystem, "FAT32", 5)) (削除ここまで)
    10993 if (!IsFAT32(pSect))
    11094 {
    116100 hDupVBP = 0;
    117101
    118// if (pSect->bpb.BytesPerSector != SECTOR_SIZE)
    119// {
    120// rc = ERROR_VOLUME_NOT_MOUNTED;
    121// goto FS_MOUNT_EXIT;
    122// }
    123
    124 if (!hDupVBP) /* initial mounting of the volume */
    125// if(( ULONG )pSect->bpb.BytesPerSector * pSect->bpb.SectorsPerCluster > MAX_CLUSTER_SIZE )
    102 if (!hDupVBP) /* initial mounting of the volume */
    126103 {
    127104 pVolInfo = gdtAlloc(STORAGE_NEEDED, FALSE);
    139116 }
    140117 *((PVOLINFO *)(pvpfsd->vpd_work)) = pVolInfo;
    141(削除) // rc = ERROR_VOLUME_NOT_MOUNTED; (削除ここまで)
    142(削除) // goto FS_MOUNT_EXIT; (削除ここまで)
    143(削除) // } (削除ここまで)
    144118
    145119 memset(pVolInfo, 0, (size_t)STORAGE_NEEDED);
    146120 pVolInfo->pNextVolInfo = NULL;
    147(削除) (削除ここまで)
    148(削除) // pvpfsi->vpi_vid = pSect->ulVolSerial; (削除ここまで)
    149(削除) // pvpfsi->vpi_bsize = pSect->bpb.BytesPerSector; (削除ここまで)
    150(削除) // pvpfsi->vpi_totsec = pSect->bpb.BigTotalSectors; (削除ここまで)
    151(削除) // pvpfsi->vpi_trksec = pSect->bpb.SectorsPerTrack; (削除ここまで)
    152(削除) // pvpfsi->vpi_nhead = pSect->bpb.Heads; (削除ここまで)
    153(削除) // memset(pvpfsi->vpi_text, 0, sizeof pvpfsi->vpi_text); (削除ここまで)
    154(削除) // memcpy(pvpfsi->vpi_text, pSect->VolumeLabel, sizeof pSect->VolumeLabel); (削除ここまで)
    155121
    156122 if (!pGlobVolInfo)
    167133 pNext->pNextVolInfo = pVolInfo;
    168134 }
    169 (削除) (削除ここまで)pvpfsi->vpi_vid = pSect->ulVolSerial;
    170 (削除) (削除ここまで)pvpfsi->vpi_bsize = pSect->bpb.BytesPerSector;
    171 (削除) (削除ここまで)pvpfsi->vpi_totsec = pSect->bpb.BigTotalSectors;
    172 (削除) (削除ここまで)pvpfsi->vpi_trksec = pSect->bpb.SectorsPerTrack;
    173 (削除) (削除ここまで)pvpfsi->vpi_nhead = pSect->bpb.Heads;
    174 (削除) (削除ここまで)memset(pvpfsi->vpi_text, 0, sizeof pvpfsi->vpi_text);
    175 (削除) (削除ここまで)memcpy(pvpfsi->vpi_text, pSect->VolumeLabel, sizeof pSect->VolumeLabel);
    135 (追記) (追記ここまで)pvpfsi->vpi_vid = pSect->ulVolSerial;
    136 (追記) (追記ここまで)pvpfsi->vpi_bsize = pSect->bpb.BytesPerSector;
    137 (追記) (追記ここまで)pvpfsi->vpi_totsec = pSect->bpb.BigTotalSectors;
    138 (追記) (追記ここまで)pvpfsi->vpi_trksec = pSect->bpb.SectorsPerTrack;
    139 (追記) (追記ここまで)pvpfsi->vpi_nhead = pSect->bpb.Heads;
    140 (追記) (追記ここまで)memset(pvpfsi->vpi_text, 0, sizeof pvpfsi->vpi_text);
    141 (追記) (追記ここまで)memcpy(pvpfsi->vpi_text, pSect->VolumeLabel, sizeof pSect->VolumeLabel);
    176142 }
    177143 else /* remount of volume */
    178// pVolInfo = gdtAlloc(STORAGE_NEEDED, FALSE);
    179// if (!pVolInfo)
    180 {
    181 FSH_GETVOLPARM(hDupVBP,&pvpfsi,&pvpfsd); /* Get the volume dependent/independent structure from the original volume block */
    144 {
    145 FSH_GETVOLPARM(hDupVBP,&pvpfsi,&pvpfsd); /* Get the volume dependent/independent structure from the original volume block */
    182146 pVolInfo = *((PVOLINFO *)(pvpfsd->vpd_work)); /* Get the pointer to the FAT32 Volume structure from the original block */
    183 hVBP = hDupVBP; /* indicate that the old duplicate will become the remaining block */
    184 /* since the new VPB will be discarded if there already is an old one according to IFS.INF */
    185// rc = ERROR_NOT_ENOUGH_MEMORY;
    186// goto FS_MOUNT_EXIT;
    187 }
    188// rc = FSH_FORCENOSWAP(SELECTOROF(pVolInfo));
    189// if (rc)
    190// FatalMessage("FSH_FORCENOSWAP on VOLINFO Segment failed, rc=%u", rc);
    191//
    192// memset(pVolInfo, 0, (size_t)STORAGE_NEEDED);
    193//
    194// InitCache(ulCacheSectors); //// ?
    147 hVBP = hDupVBP; /* indicate that the old duplicate will become the remaining block */
    148 /* since the new VPB will be discarded if there already is an old one according to IFS.INF */
    149 }
    195150
    196151 /* continue mount in both cases:
    198153 for the n-th remount it's a reinitialization of the old VPB
    199154 */
    200(削除) //pVolInfo->hVBP = hVBP; (削除ここまで)
    201155 memcpy(&pVolInfo->BootSect, pSect, sizeof (BOOTSECT));
    202156
    215169 pVolInfo->ulTotalClusters = (pSect->bpb.BigTotalSectors - pVolInfo->ulStartOfData) / pSect->bpb.SectorsPerCluster;
    216170
    217 pVolInfo->hVBP = hVBP;(削除) // (削除ここまで)
    218 pVolInfo->hDupVBP = hDupVBP;(削除) // (削除ここまで)
    171 pVolInfo->hVBP = hVBP;(追記) (追記ここまで)
    172 pVolInfo->hDupVBP = hDupVBP;(追記) (追記ここまで)
    219173
    220174 pVolInfo->bDrive = pvpfsi->vpi_drive;
    245199 memset(pVolInfo->pBootFSInfo, 0, sizeof (BOOTFSINFO));
    246200
    247 rc = CheckWriteProtect(pVolInfo);
    248 if (rc && rc != ERROR_WRITE_PROTECT)
    249 {
    250
    251// *((PVOLINFO *)(pvpfsd->vpd_work)) = pVolInfo;
    252//
    253// if (!pGlobVolInfo)
    254// {
    255// pGlobVolInfo = pVolInfo;
    256// usVolCount = 1;
    257// }
    258// else
    259// {
    260// pNext = pGlobVolInfo;
    261// usVolCount = 1;
    262// if (pNext->bDrive == pvpfsi->vpi_drive && !pVolInfo->hDupVBP)
    263// pVolInfo->hDupVBP = pNext->hVBP;
    264// while (pNext->pNextVolInfo)
    265// {
    266// pNext = (PVOLINFO)pNext->pNextVolInfo;
    267// if (pNext->bDrive == pvpfsi->vpi_drive && !pVolInfo->hDupVBP)
    268// pVolInfo->hDupVBP = pNext->hVBP;
    269// usVolCount++;
    270// }
    271// pNext->pNextVolInfo = pVolInfo;
    272// usVolCount++;
    273// }
    274// if (f32Parms.fMessageActive & LOG_FS)
    275// Message("%u Volumes mounted!", usVolCount);
    276//
    277// rc = CheckWriteProtect(pVolInfo);
    278// if (rc && rc != ERROR_WRITE_PROTECT)
    279// {
    201 rc = CheckWriteProtect(pVolInfo);
    202 if (rc && rc != ERROR_WRITE_PROTECT)
    203 {
    280204 Message("Cannot access drive, rc = %u", rc);
    281205 goto FS_MOUNT_EXIT;
    282 (削除) (削除ここまで)}
    206 (追記) (追記ここまで)}
    283207 if (rc == ERROR_WRITE_PROTECT)
    284208 pVolInfo->fWriteProtected = TRUE;
    290214 pVolInfo->fDiskCleanOnMount = TRUE;
    291215
    292 (削除) (削除ここまで)if (f32Parms.fCalcFree ||
    216 (追記) (追記ここまで)if (f32Parms.fCalcFree ||
    293217 pVolInfo->pBootFSInfo->ulFreeClusters == 0xFFFFFFFF ||
    294218 /*!pVolInfo->fDiskClean ||*/
    295219 pVolInfo->BootSect.bpb.FSinfoSec == 0xFFFF)
    296 GetFreeSpace(pVolInfo);
    297
    298// if (!pVolInfo->hDupVBP &&
    299// (f32Parms.fCalcFree ||
    300// pVolInfo->pBootFSInfo->ulFreeClusters == 0xFFFFFFFF ||
    301// /*!pVolInfo->fDiskClean ||*/
    302// pVolInfo->BootSect.bpb.FSinfoSec == 0xFFFF))
    303// GetFreeSpace(pVolInfo);
    304
    305 pDevCaps = pvpfsi->vpi_pDCS;
    306 pVolChars = pvpfsi->vpi_pVCS;
    307
    308 if (!pDevCaps)
    309 {
    310 Message("Strategy2 not found, searching Device Driver chain !");
    311 pDevCaps = ReturnDriverCaps(pvpfsi->vpi_unit);
    312 }
    313
    314 if (f32Parms.fMessageActive & LOG_FS)
    315 {
    316 if (pDevCaps->Capabilities & GDC_DD_Read2)
    317 Message("Read2 supported");
    318 if (pDevCaps->Capabilities & GDC_DD_DMA_Word)
    319 Message("DMA on word alligned buffers supported");
    320 if (pDevCaps->Capabilities & GDC_DD_DMA_Byte)
    321 Message("DMA on byte alligned buffers supported");
    322 if (pDevCaps->Capabilities & GDC_DD_Mirror)
    323 Message("Disk Mirroring supported");
    324 if (pDevCaps->Capabilities & GDC_DD_Duplex)
    325 Message("Disk Duplexing supported");
    326 if (pDevCaps->Capabilities & GDC_DD_No_Block)
    327 Message("Strategy2 does not block");
    328 if (pDevCaps->Capabilities & GDC_DD_16M)
    329 Message(">16M supported");
    330 }
    331
    332 if (pDevCaps->Strategy2)
    333 {
    334 if (f32Parms.fMessageActive & LOG_FS)
    335 {
    336 Message("Strategy2 address at %lX", pDevCaps->Strategy2);
    337 Message("ChgPriority address at %lX", pDevCaps->ChgPriority);
    338 }
    339
    340 pVolInfo->pfnStrategy = (STRATFUNC)pDevCaps->Strategy2;
    341 pVolInfo->pfnPriority = (STRATFUNC)pDevCaps->ChgPriority;
    342 }
    343
    344 rc = 0;
    345 break;
    346
    347 case MOUNT_ACCEPT :
    348
    349 if (FSH_FINDDUPHVPB(hVBP, &hDupVBP))
    350 hDupVBP = 0;
    351
    352 if (pvpfsi->vpi_bsize != SECTOR_SIZE)
    353 {
    354 rc = ERROR_VOLUME_NOT_MOUNTED;
    355 goto FS_MOUNT_EXIT;
    356 }
    357
    358 pVolInfo = gdtAlloc(STORAGE_NEEDED, FALSE);
    359 if (!pVolInfo)
    360 {
    361 rc = ERROR_NOT_ENOUGH_MEMORY;
    362 goto FS_MOUNT_EXIT;
    363 }
    364 rc = FSH_FORCENOSWAP(SELECTOROF(pVolInfo));
    365 if (rc)
    366 FatalMessage("FSH_FORCENOSWAP on VOLINFO Segment failed, rc=%u", rc);
    367
    368 memset(pVolInfo, 0, (size_t)STORAGE_NEEDED);
    369
    370 //InitCache(ulCacheSectors);
    371
    372 memset(&pVolInfo->BootSect, 0, sizeof (BOOTSECT));
    373 pVolInfo->BootSect.bpb.BigTotalSectors = pvpfsi->vpi_totsec;
    374 pVolInfo->BootSect.bpb.BytesPerSector = pvpfsi->vpi_bsize;
    375 pVolInfo->fWriteProtected = FALSE;
    376 pVolInfo->fDiskCleanOnMount = FALSE;
    377
    378 pVolInfo->hVBP = hVBP;
    379 pVolInfo->hDupVBP = hDupVBP; //// ?
    380 pVolInfo->bDrive = pvpfsi->vpi_drive;
    381 pVolInfo->bUnit = pvpfsi->vpi_unit;
    382 pVolInfo->pNextVolInfo = NULL;
    383
    384 // the volume is being formatted
    385 pVolInfo->fFormatInProgress = TRUE;
    386
    387 // fake values assuming sector == cluster
    388 pVolInfo->ulClusterSize = pvpfsi->vpi_bsize;
    389 pVolInfo->ulTotalClusters = pvpfsi->vpi_totsec;
    390
    391 pVolInfo->usRASectors = usDefaultRASectors;
    392
    393 // undefined
    394 pVolInfo->ulStartOfData = 0;
    395
    396 *((PVOLINFO *)(pvpfsd->vpd_work)) = pVolInfo; //
    397
    398 if (!pGlobVolInfo)
    399 {
    400 pGlobVolInfo = pVolInfo;
    401 usVolCount = 1;
    402 }
    403 else
    404 {
    405 pNext = pGlobVolInfo;
    406 usVolCount = 1;
    407 if (pNext->bDrive == pvpfsi->vpi_drive && !pVolInfo->hDupVBP)
    408 pVolInfo->hDupVBP = pNext->hVBP;
    409 while (pNext->pNextVolInfo)
    410 {
    411 pNext = (PVOLINFO)pNext->pNextVolInfo;
    412 if (pNext->bDrive == pvpfsi->vpi_drive && !pVolInfo->hDupVBP)
    413 pVolInfo->hDupVBP = pNext->hVBP;
    414 usVolCount++;
    415 }
    416 pNext->pNextVolInfo = pVolInfo;
    417 usVolCount++;
    418 }
    419 if (f32Parms.fMessageActive & LOG_FS)
    420 Message("%u Volumes mounted!", usVolCount);
    220 GetFreeSpace(pVolInfo);
    421221
    422222 pDevCaps = pvpfsi->vpi_pDCS;
    462262 break;
    463263
    264(追記) case MOUNT_ACCEPT : (追記ここまで)
    265(追記) if (FSH_FINDDUPHVPB(hVBP, &hDupVBP)) (追記ここまで)
    266(追記) hDupVBP = 0; (追記ここまで)
    267(追記) (追記ここまで)
    268(追記) if (pvpfsi->vpi_bsize != SECTOR_SIZE) (追記ここまで)
    269(追記) { (追記ここまで)
    270(追記) rc = ERROR_VOLUME_NOT_MOUNTED; (追記ここまで)
    271(追記) goto FS_MOUNT_EXIT; (追記ここまで)
    272(追記) } (追記ここまで)
    273(追記) (追記ここまで)
    274(追記) pVolInfo = gdtAlloc(STORAGE_NEEDED, FALSE); (追記ここまで)
    275(追記) if (!pVolInfo) (追記ここまで)
    276(追記) { (追記ここまで)
    277(追記) rc = ERROR_NOT_ENOUGH_MEMORY; (追記ここまで)
    278(追記) goto FS_MOUNT_EXIT; (追記ここまで)
    279(追記) } (追記ここまで)
    280(追記) rc = FSH_FORCENOSWAP(SELECTOROF(pVolInfo)); (追記ここまで)
    281(追記) if (rc) (追記ここまで)
    282(追記) FatalMessage("FSH_FORCENOSWAP on VOLINFO Segment failed, rc=%u", rc); (追記ここまで)
    283(追記) (追記ここまで)
    284(追記) memset(pVolInfo, 0, (size_t)STORAGE_NEEDED); (追記ここまで)
    285(追記) (追記ここまで)
    286(追記) memset(&pVolInfo->BootSect, 0, sizeof (BOOTSECT)); (追記ここまで)
    287(追記) pVolInfo->BootSect.bpb.BigTotalSectors = pvpfsi->vpi_totsec; (追記ここまで)
    288(追記) pVolInfo->BootSect.bpb.BytesPerSector = pvpfsi->vpi_bsize; (追記ここまで)
    289(追記) pVolInfo->fWriteProtected = FALSE; (追記ここまで)
    290(追記) pVolInfo->fDiskCleanOnMount = FALSE; (追記ここまで)
    291(追記) (追記ここまで)
    292(追記) pVolInfo->hVBP = hVBP; (追記ここまで)
    293(追記) pVolInfo->hDupVBP = hDupVBP; //// ? (追記ここまで)
    294(追記) pVolInfo->bDrive = pvpfsi->vpi_drive; (追記ここまで)
    295(追記) pVolInfo->bUnit = pvpfsi->vpi_unit; (追記ここまで)
    296(追記) pVolInfo->pNextVolInfo = NULL; (追記ここまで)
    297(追記) (追記ここまで)
    298(追記) // the volume is being formatted (追記ここまで)
    299(追記) pVolInfo->fFormatInProgress = TRUE; (追記ここまで)
    300(追記) (追記ここまで)
    301(追記) // fake values assuming sector == cluster (追記ここまで)
    302(追記) pVolInfo->ulClusterSize = pvpfsi->vpi_bsize; (追記ここまで)
    303(追記) pVolInfo->ulTotalClusters = pvpfsi->vpi_totsec; (追記ここまで)
    304(追記) (追記ここまで)
    305(追記) pVolInfo->usRASectors = usDefaultRASectors; (追記ここまで)
    306(追記) (追記ここまで)
    307(追記) // undefined (追記ここまで)
    308(追記) pVolInfo->ulStartOfData = 0; (追記ここまで)
    309(追記) (追記ここまで)
    310(追記) *((PVOLINFO *)(pvpfsd->vpd_work)) = pVolInfo; (追記ここまで)
    311(追記) (追記ここまで)
    312(追記) if (!pGlobVolInfo) (追記ここまで)
    313(追記) { (追記ここまで)
    314(追記) pGlobVolInfo = pVolInfo; (追記ここまで)
    315(追記) usVolCount = 1; (追記ここまで)
    316(追記) } (追記ここまで)
    317(追記) else (追記ここまで)
    318(追記) { (追記ここまで)
    319(追記) pNext = pGlobVolInfo; (追記ここまで)
    320(追記) usVolCount = 1; (追記ここまで)
    321(追記) if (pNext->bDrive == pvpfsi->vpi_drive && !pVolInfo->hDupVBP) (追記ここまで)
    322(追記) pVolInfo->hDupVBP = pNext->hVBP; (追記ここまで)
    323(追記) while (pNext->pNextVolInfo) (追記ここまで)
    324(追記) { (追記ここまで)
    325(追記) pNext = (PVOLINFO)pNext->pNextVolInfo; (追記ここまで)
    326(追記) if (pNext->bDrive == pvpfsi->vpi_drive && !pVolInfo->hDupVBP) (追記ここまで)
    327(追記) pVolInfo->hDupVBP = pNext->hVBP; (追記ここまで)
    328(追記) usVolCount++; (追記ここまで)
    329(追記) } (追記ここまで)
    330(追記) pNext->pNextVolInfo = pVolInfo; (追記ここまで)
    331(追記) usVolCount++; (追記ここまで)
    332(追記) } (追記ここまで)
    333(追記) if (f32Parms.fMessageActive & LOG_FS) (追記ここまで)
    334(追記) Message("%u Volumes mounted!", usVolCount); (追記ここまで)
    335(追記) (追記ここまで)
    336(追記) pDevCaps = pvpfsi->vpi_pDCS; (追記ここまで)
    337(追記) pVolChars = pvpfsi->vpi_pVCS; (追記ここまで)
    338(追記) (追記ここまで)
    339(追記) if (!pDevCaps) (追記ここまで)
    340(追記) { (追記ここまで)
    341(追記) Message("Strategy2 not found, searching Device Driver chain !"); (追記ここまで)
    342(追記) pDevCaps = ReturnDriverCaps(pvpfsi->vpi_unit); (追記ここまで)
    343(追記) } (追記ここまで)
    344(追記) (追記ここまで)
    345(追記) if (f32Parms.fMessageActive & LOG_FS) (追記ここまで)
    346(追記) { (追記ここまで)
    347(追記) if (pDevCaps->Capabilities & GDC_DD_Read2) (追記ここまで)
    348(追記) Message("Read2 supported"); (追記ここまで)
    349(追記) if (pDevCaps->Capabilities & GDC_DD_DMA_Word) (追記ここまで)
    350(追記) Message("DMA on word alligned buffers supported"); (追記ここまで)
    351(追記) if (pDevCaps->Capabilities & GDC_DD_DMA_Byte) (追記ここまで)
    352(追記) Message("DMA on byte alligned buffers supported"); (追記ここまで)
    353(追記) if (pDevCaps->Capabilities & GDC_DD_Mirror) (追記ここまで)
    354(追記) Message("Disk Mirroring supported"); (追記ここまで)
    355(追記) if (pDevCaps->Capabilities & GDC_DD_Duplex) (追記ここまで)
    356(追記) Message("Disk Duplexing supported"); (追記ここまで)
    357(追記) if (pDevCaps->Capabilities & GDC_DD_No_Block) (追記ここまで)
    358(追記) Message("Strategy2 does not block"); (追記ここまで)
    359(追記) if (pDevCaps->Capabilities & GDC_DD_16M) (追記ここまで)
    360(追記) Message(">16M supported"); (追記ここまで)
    361(追記) } (追記ここまで)
    362(追記) (追記ここまで)
    363(追記) if (pDevCaps->Strategy2) (追記ここまで)
    364(追記) { (追記ここまで)
    365(追記) if (f32Parms.fMessageActive & LOG_FS) (追記ここまで)
    366(追記) { (追記ここまで)
    367(追記) Message("Strategy2 address at %lX", pDevCaps->Strategy2); (追記ここまで)
    368(追記) Message("ChgPriority address at %lX", pDevCaps->ChgPriority); (追記ここまで)
    369(追記) } (追記ここまで)
    370(追記) (追記ここまで)
    371(追記) pVolInfo->pfnStrategy = (STRATFUNC)pDevCaps->Strategy2; (追記ここまで)
    372(追記) pVolInfo->pfnPriority = (STRATFUNC)pDevCaps->ChgPriority; (追記ここまで)
    373(追記) } (追記ここまで)
    374(追記) (追記ここまで)
    375(追記) rc = 0; (追記ここまで)
    376(追記) break; (追記ここまで)
    377(追記) (追記ここまで)
    464378 case MOUNT_VOL_REMOVED:
    465379 case MOUNT_RELEASE:
    469383 {
    470384 if (f32Parms.fMessageActive & LOG_FS)
    471 (削除) (削除ここまで)Message("pVolInfo == 0\n");
    385 (追記) (追記ここまで)Message("pVolInfo == 0\n");
    472386
    473387 rc = ERROR_VOLUME_NOT_MOUNTED;
    475389 }
    476390
    477 //if (!pVolInfo->hDupVBP)
    478 // {
    479 // if (f32Parms.fMessageActive & LOG_FS)
    480 // Message("hDupVBP == 0\n");
    481
    482 usFlushVolume( pVolInfo, FLUSH_DISCARD, TRUE, PRIO_URGENT );
    483
    484 //if (f32Parms.usDirtySectors) // vs
    485 UpdateFSInfo(pVolInfo); //
    486
    487 MarkDiskStatus(pVolInfo, TRUE);
    488 // }
    391 usFlushVolume( pVolInfo, FLUSH_DISCARD, TRUE, PRIO_URGENT );
    392 UpdateFSInfo(pVolInfo);
    393 MarkDiskStatus(pVolInfo, TRUE);
    489394
    490395 // delete pVolInfo from the list
    491(削除) /* if (pGlobVolInfo) (削除ここまで)
    492(削除) { (削除ここまで)
    493(削除) pNext = pPrev = pGlobVolInfo; (削除ここまで)
    494(削除) (削除ここまで)
    495(削除) // search for pVolInfo in the list (削除ここまで)
    496(削除) while (pNext != pVolInfo) (削除ここまで)
    497(削除) { (削除ここまで)
    498(削除) pPrev = pNext; (削除ここまで)
    499(削除) pNext = (PVOLINFO)pNext->pNextVolInfo; (削除ここまで)
    500(削除) } (削除ここまで)
    501(削除) (削除ここまで)
    502(削除) // found (削除ここまで)
    503(削除) if (pNext == pVolInfo) (削除ここまで)
    504(削除) { (削除ここまで)
    505(削除) if (pPrev == pVolInfo) // the very 1st list item (削除ここまで)
    506(削除) pGlobVolInfo = NULL; (削除ここまで)
    507(削除) else (削除ここまで)
    508(削除) { (削除ここまで)
    509(削除) // delete it (削除ここまで)
    510(削除) pNext = pNext->pNextVolInfo; (削除ここまで)
    511(削除) pPrev->pNextVolInfo = pNext; (削除ここまで)
    512(削除) } (削除ここまで)
    513(削除) usVolCount--; (削除ここまで)
    514(削除) } (削除ここまで)
    515(削除) } */ (削除ここまで)
    516(削除) (削除ここまで)
    517396 RemoveVolume(pVolInfo);
    518(削除) // free() should free a selector as well (削除ここまで)
    519(削除) //freeseg(pVolInfo); (削除ここまで)
    520397 *(PVOLINFO *)(pvpfsd->vpd_work) = NULL;
    521398 free(pVolInfo);
    531408 if (f32Parms.fMessageActive & LOG_FS)
    532409 Message("FS_MOUNT returned %u\n", rc);
    533(削除) (削除ここまで)
    534410
    535411 _asm pop es;
    593469static BOOL IsFAT32(PBOOTSECT pSect)
    594470{
    595/*
    596 check for FAT32 according to the Microsoft FAT32 specification
    597*/
    598 PBPB pbpb;
    599 ULONG FATSz;
    600 ULONG TotSec;
    601 ULONG RootDirSectors;
    602 ULONG NonDataSec;
    603 ULONG DataSec;
    604 ULONG CountOfClusters;
    605
    606 if (!pSect)
    607 {
    608 return FALSE;
    609 } /* endif */
    610
    611 pbpb = &pSect->bpb;
    612
    613 if (!pbpb->BytesPerSector)
    614 {
    471 /*
    472 * check for FAT32 according to the Microsoft FAT32 specification
    473 */
    474 PBPB pbpb;
    475 ULONG FATSz;
    476 ULONG TotSec;
    477 ULONG RootDirSectors;
    478 ULONG NonDataSec;
    479 ULONG DataSec;
    480 ULONG CountOfClusters;
    481
    482 if (!pSect)
    483 {
    615484 return FALSE;
    616 }
    617
    618 if (pbpb->BytesPerSector != SECTOR_SIZE)
    619 {
    620 return FALSE;
    621 }
    622
    623 if(( ULONG )pSect->bpb.BytesPerSector * pSect->bpb.SectorsPerCluster > MAX_CLUSTER_SIZE )
    624 {
    625 return FALSE;
    626 }
    627
    628 RootDirSectors = ((pbpb->RootDirEntries * 32UL) + (pbpb->BytesPerSector-1UL)) / pbpb->BytesPerSector;
    629
    630 if (pbpb->SectorsPerFat)
    631 {
    632 FATSz = pbpb->SectorsPerFat;
    633 }
    634 else
    635 {
    636 FATSz = pbpb->BigSectorsPerFat;
    637 } /* endif */
    638
    639 if (pbpb->TotalSectors)
    640 {
    641 TotSec = pbpb->TotalSectors;
    642 }
    643 else
    644 {
    645 TotSec = pbpb->BigTotalSectors;
    646 } /* endif */
    647
    648 NonDataSec = pbpb->ReservedSectors
    649 + (pbpb->NumberOfFATs * FATSz)
    650 + RootDirSectors;
    651
    652 if (TotSec < NonDataSec)
    653 {
    654 return FALSE;
    655 } /* endif */
    656
    657 DataSec = TotSec - NonDataSec;
    658 CountOfClusters = DataSec / pbpb->SectorsPerCluster;
    659
    660 if ((CountOfClusters >= 65525UL) && !memicmp(pSect->FileSystem, "FAT32", 5))
    661 {
    662 return TRUE;
    663 }
    664 else
    665 {
    666 return FALSE;
    667 } /* endif */
    485 } /* endif */
    486
    487 pbpb = &pSect->bpb;
    488
    489 if (!pbpb->BytesPerSector)
    490 {
    491 return FALSE;
    492 }
    493
    494 if (pbpb->BytesPerSector != SECTOR_SIZE)
    495 {
    496 return FALSE;
    497 }
    498
    499 if(( ULONG )pbpb->BytesPerSector * pbpb->SectorsPerCluster > MAX_CLUSTER_SIZE )
    500 {
    501 return FALSE;
    502 }
    503
    504 RootDirSectors = ((pbpb->RootDirEntries * 32UL) + (pbpb->BytesPerSector-1UL)) / pbpb->BytesPerSector;
    505
    506 if (pbpb->SectorsPerFat)
    507 {
    508 FATSz = pbpb->SectorsPerFat;
    509 }
    510 else
    511 {
    512 FATSz = pbpb->BigSectorsPerFat;
    513 } /* endif */
    514
    515 if (pbpb->TotalSectors)
    516 {
    517 TotSec = pbpb->TotalSectors;
    518 }
    519 else
    520 {
    521 TotSec = pbpb->BigTotalSectors;
    522 } /* endif */
    523
    524 NonDataSec = pbpb->ReservedSectors
    525 + (pbpb->NumberOfFATs * FATSz)
    526 + RootDirSectors;
    527
    528 if (TotSec < NonDataSec)
    529 {
    530 return FALSE;
    531 } /* endif */
    532
    533 DataSec = TotSec - NonDataSec;
    534 CountOfClusters = DataSec / pbpb->SectorsPerCluster;
    535
    536 if ((CountOfClusters < 65525UL) || memicmp(pSect->FileSystem, "FAT32", 5))
    537 {
    538 return FALSE;
    539 } /* endif */
    540
    541 return TRUE;
    668542}
    669543
    673547P_DriverCaps ReturnDriverCaps(UCHAR ucUnit)
    674548{
    675 RP_GETDRIVERCAPS rp={0};
    676 PRP_GETDRIVERCAPS pRH = &rp;
    677 PFN pStrat = NULL;
    678 SEL dsSel = 0;
    679 SEL SAS_selector;
    680 struct SAS far *pSas;
    681 struct SAS_dd_section far *pDDSection;
    682 struct SysDev far *pDD;
    683
    684 SAS_selector = SaSSel();
    685 pSas = (struct SAS far *)MAKEP(SAS_selector,0);
    686 pDDSection = (struct SAS_dd_section far *)MAKEP(SAS_selector,pSas->SAS_dd_data);
    687 pDD = (struct SysDev far *)MAKEP(SAS_selector,pDDSection->SAS_dd_bimodal_chain);
    688
    689 while (pDD && (pDD != (struct SysDev far *)-1))
    690 {
    691 if (
    692 (memicmp(&pDD->SDevName[1],"Disk DD",7) == 0) && // found OS2DASD.DMD
    693 (pDD->SDevAtt == (DEV_NON_IBM | DEVLEV_1 | DEV_30)) // found OS2DASD.DMD
    694 )
    695 {
    696 pStrat = (PFN)MAKEP(pDD->SDevProtCS,pDD->SDevStrat);
    697 dsSel = pDD->SDevProtDS;
    698
    699 if (pStrat)
    700 {
    701
    702 pRH->rph.Len = sizeof(rp);
    703 pRH->rph.Unit = ucUnit;
    704 pRH->rph.Cmd = CMDGetDevSupport;
    705
    706 _asm {
    707 push ds
    708 push es
    709 push bx
    710 mov ax,dsSel
    711 mov ds,ax
    712 mov es,word ptr pRH+2
    713 mov bx,word ptr pRH
    714 call dword ptr pStrat
    715 pop bx
    716 pop es
    717 pop ds
    718 }
    719 return pRH->pDCS;
    549 RP_GETDRIVERCAPS rp={0};
    550 PRP_GETDRIVERCAPS pRH = &rp;
    551 PFN pStrat = NULL;
    552 SEL dsSel = 0;
    553 SEL SAS_selector;
    554 struct SAS far *pSas;
    555 struct SAS_dd_section far *pDDSection;
    556 struct SysDev far *pDD;
    557
    558 SAS_selector = SaSSel();
    559 pSas = (struct SAS far *)MAKEP(SAS_selector,0);
    560 pDDSection = (struct SAS_dd_section far *)MAKEP(SAS_selector,pSas->SAS_dd_data);
    561 pDD = (struct SysDev far *)MAKEP(SAS_selector,pDDSection->SAS_dd_bimodal_chain);
    562
    563 while (pDD && (pDD != (struct SysDev far *)-1))
    564 {
    565 if (
    566 (memicmp(&pDD->SDevName[1],"Disk DD",7) == 0) && // found OS2DASD.DMD
    567 (pDD->SDevAtt == (DEV_NON_IBM | DEVLEV_1 | DEV_30)) // found OS2DASD.DMD
    568 )
    569 {
    570 pStrat = (PFN)MAKEP(pDD->SDevProtCS,pDD->SDevStrat);
    571 dsSel = pDD->SDevProtDS;
    572
    573 if (pStrat)
    574 {
    575
    576 pRH->rph.Len = sizeof(rp);
    577 pRH->rph.Unit = ucUnit;
    578 pRH->rph.Cmd = CMDGetDevSupport;
    579
    580 _asm
    581 {
    582 push ds
    583 push es
    584 push bx
    585 mov ax,dsSel
    586 mov ds,ax
    587 mov es,word ptr pRH+2
    588 mov bx,word ptr pRH
    589 call dword ptr pStrat
    590 pop bx
    591 pop es
    592 pop ds
    593 }
    594 return pRH->pDCS;
    720595 }
    721596
    722597 break;
    723 (削除) (削除ここまで)}
    724 (削除) (削除ここまで)pDD = (struct SysDev far *)pDD->SDevNext;
    725 (削除) (削除ここまで)}
    726 (削除) (削除ここまで)return NULL;
    598 (追記) (追記ここまで)}
    599 (追記) (追記ここまで)pDD = (struct SysDev far *)pDD->SDevNext;
    600 (追記) (追記ここまで)}
    601 (追記) (追記ここまで)return NULL;
    727602}
    728603
    729604#pragma optimize("",on)
    730(削除) (削除ここまで)
Note: See TracChangeset for help on using the changeset viewer.

AltStyle によって変換されたページ (->オリジナル) /