Context Navigation


Changeset 117


Ignore:
Timestamp:
Aug 21, 2016, 4:31:07 AM (9 years ago)
Author:
Valery V. Sedletski
Message:

FAT32 autocheck on init. Remived ioctl and fsctl calls to fat32.ifs from CHKDSK and ported the corresponding code from fat32.ifs to CHKDSK.

Location:
branches/fat32-0.10/src
Files:
7 added
8 edited

Legend:

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

    r115 r117
    5656static USHORT GetSetFileEAS(PVOLINFO pVolInfo, USHORT usFunc, PMARKFILEEASBUF pMark);
    5757static USHORT DBCSStrlen( const PSZ pszStr );
    58(追記) (追記ここまで)
    59(追記) extern ULONG autocheck_mask; (追記ここまで)
    60(追記) extern ULONG force_mask; (追記ここまで)
    61(追記) (追記ここまで)
    62(追記) void _cdecl autocheck(char *args); (追記ここまで)
    5863
    5964/******************************************************************
    12771282BOOL fSilent = FALSE;
    12781283PSZ p;
    1284(追記) PSZ cmd = NULL; (追記ここまで)
    12791285
    12801286 _asm push es;
    13591365 f32Parms.fCalcFree = TRUE;
    13601366
    1367(追記) p = strstr( szArguments, "/cacheopt"); (追記ここまで)
    1368(追記) if( !p ) (追記ここまで)
    1369(追記) p = strstr( szArguments, "-cacheopt"); (追記ここまで)
    1370(追記) if( p ) (追記ここまで)
    1371(追記) { (追記ここまで)
    1372(追記) p += 9; (追記ここまで)
    1373(追記) cmd = p; (追記ここまで)
    1374(追記) } (追記ここまで)
    1375(追記) (追記ここまで)
    1376(追記) p = strstr(szArguments, "/autocheck:"); (追記ここまで)
    1377(追記) if (!p) (追記ここまで)
    1378(追記) p = strstr(szArguments, "-autocheck:"); (追記ここまで)
    1379(追記) if (p) (追記ここまで)
    1380(追記) { (追記ここまで)
    1381(追記) p += 11; (追記ここまで)
    1382(追記) } (追記ここまで)
    1383(追記) else (追記ここまで)
    1384(追記) { (追記ここまで)
    1385(追記) p = strstr(szArguments, "/ac:"); (追記ここまで)
    1386(追記) if (!p) (追記ここまで)
    1387(追記) p = strstr(szArguments, "-ac:"); (追記ここまで)
    1388(追記) if (p) (追記ここまで)
    1389(追記) { (追記ここまで)
    1390(追記) p += 4; (追記ここまで)
    1391(追記) (追記ここまで)
    1392(追記) while (*p != '0円' && *p != ' ') (追記ここまで)
    1393(追記) { (追記ここまで)
    1394(追記) char ch = tolower(*p); (追記ここまで)
    1395(追記) int num; (追記ここまで)
    1396(追記) if ('a' <= ch && ch <= 'z') (追記ここまで)
    1397(追記) { (追記ここまで)
    1398(追記) num = ch - 'a'; (追記ここまで)
    1399(追記) autocheck_mask |= (1UL << num); (追記ここまで)
    1400(追記) } (追記ここまで)
    1401(追記) else if (*p == '+') (追記ここまで)
    1402(追記) { (追記ここまで)
    1403(追記) force_mask |= (1UL << num); (追記ここまで)
    1404(追記) } (追記ここまで)
    1405(追記) else if (*p == '*') (追記ここまで)
    1406(追記) { (追記ここまで)
    1407(追記) autocheck_mask = 0xffffffff; (追記ここまで)
    1408(追記) break; (追記ここまで)
    1409(追記) } (追記ここまで)
    1410(追記) p++; (追記ここまで)
    1411(追記) } (追記ここまで)
    1412(追記) } (追記ここまで)
    1413(追記) } (追記ここまで)
    1414(追記) (追記ここまで)
    13611415#if 1
    13621416 if (!DosGetInfoSeg(&sGlob, &sLoc))
    13771431 if (!ulCacheSectors)
    13781432 InitMessage("FAT32: Warning CACHE size is zero!\r\n");
    1433(追記) (追記ここまで)
    1434(追記) // add bootdrive to autocheck mask (追記ここまで)
    1435(追記) autocheck_mask |= (1UL << pGI->bootdrive); (追記ここまで)
    1436(追記) (追記ここまで)
    1437(追記) /* disk autocheck */ (追記ここまで)
    1438(追記) autocheck(cmd); (追記ここまで)
    13791439
    13801440 _asm pop es;
  • branches/fat32-0.10/src/ifs/libc/mem.c

    r97 r117
    395395}
    396396
    397(追記) int tolower (int c) (追記ここまで)
    398(追記) { (追記ここまで)
    399(追記) if (c >= 'A' && c <= 'Z') (追記ここまで)
    400(追記) return (c + ('a' - 'A')); (追記ここまで)
    401(追記) (追記ここまで)
    402(追記) return c; (追記ここまで)
    403(追記) } (追記ここまで)
  • branches/fat32-0.10/src/ifs/makefile.wcc

    r116 r117
    2929OBJS=fat32.obj ifsmount.obj ifsfind.obj ifsdir.obj ifsattr.obj &
    3030 ifsfile.obj ifslog.obj ifscache.obj ifsswap.obj ifsmem.obj &
    31 ifsea.obj ifslang.obj (削除) (削除ここまで)
    31 ifsea.obj ifslang.obj (追記) ifsachk.obj (追記ここまで)
    3232
    3333# helpers.obj
  • branches/fat32-0.10/src/partfilt/makefile.wcc

    r102 r117
    33LNK=wlink op q
    44MAPCNV=..\mapsym.awk
    5(追記) _VENDOR=Netlabs (追記ここまで)
    6(追記) _VERSION=0.10a4 (追記ここまで)
    7(追記) FILEVER=@$#$(_VENDOR):$(_VERSION)$#@ (追記ここまで)
    8(追記) DESC="General Partition filter, Deon van der Westhuysen" (追記ここまで)
    59
    610# create OS/2 binaries
    3034 @%append $^@ format os2 lx phys
    3135 @%append $^@ name $^*.flt
    32 @%append $^@ option description '(削除) General Partition filter (削除ここまで)'
    36 @%append $^@ option description '(追記) $(FILEVER) $(DESC) (追記ここまで)'
    3337 #@%append $^@ option mixed1632
    3438 @%append $^@ option quiet
  • branches/fat32-0.10/src/ufat32/chkdsk.c

    r97 r117
    3232#define INCL_DOSDEVICES
    3333#define INCL_DOSDEVIOCTL
    34(追記) #define INCL_LONGLONG (追記ここまで)
    3435#include <os2.h>
    3536#include "portable.h"
    3839PRIVATE ULONG ChkDskMain(PCDINFO pCD);
    3940PRIVATE ULONG MarkVolume(PCDINFO pCD, BOOL fClean);
    40(削除) PRIVATE ULONG ReadSector(PCDINFO pCD, ULONG ulSector, USHORT nSectors, PBYTE pbSector); (削除ここまで)
    4141PRIVATE ULONG CheckFats(PCDINFO pCD);
    4242PRIVATE ULONG CheckFiles(PCDINFO pCD);
    4646PRIVATE ULONG GetNextCluster(PCDINFO pCD, ULONG ulCluster, BOOL fAllowBad);
    4747PRIVATE ULONG SetNextCluster(PCDINFO pCD, ULONG ulCluster, ULONG ulNextCluster);
    48(削除) PRIVATE ULONG ReadCluster(PCDINFO pDrive, ULONG ulCluster, PBYTE pbCluster); (削除ここまで)
    4948PRIVATE ULONG GetClusterCount(PCDINFO pCD, ULONG ulCluster, PSZ pszFile);
    5049PRIVATE BOOL MarkCluster(PCDINFO pCD, ULONG ulCluster, PSZ pszFile);
    5857PRIVATE BOOL OutputToFile(VOID);
    5958
    59(追記) ULONG ReadSector(PCDINFO pCD, ULONG ulSector, USHORT nSectors, PBYTE pbSector); (追記ここまで)
    60(追記) ULONG ReadCluster(PCDINFO pDrive, ULONG ulCluster, PBYTE pbCluster); (追記ここまで)
    61(追記) ULONG WriteSector(PCDINFO pCD, ULONG ulSector, USHORT nSectors, PBYTE pbSector); (追記ここまで)
    62(追記) ULONG WriteCluster(PCDINFO pCD, ULONG ulCluster, PVOID pbCluster); (追記ここまで)
    63(追記) (追記ここまで)
    64(追記) BOOL GetDiskStatus(PCDINFO pCD); (追記ここまで)
    65(追記) ULONG GetFreeSpace(PCDINFO pVolInfo); (追記ここまで)
    66(追記) BOOL MarkDiskStatus(PCDINFO pCD, BOOL fClean); (追記ここまで)
    67(追記) USHORT GetSetFileEAS(PCDINFO pCD, USHORT usFunc, PMARKFILEEASBUF pMark); (追記ここまで)
    68(追記) USHORT SetFileSize(PCDINFO pCD, PFILESIZEDATA pFileSize); (追記ここまで)
    69(追記) USHORT RecoverChain2(PCDINFO pCD, ULONG ulCluster, PBYTE pData, USHORT cbData); (追記ここまで)
    70(追記) USHORT MakeDirEntry(PCDINFO pCD, ULONG ulDirCluster, PDIRENTRY pNew, PSZ pszName); (追記ここまで)
    71(追記) BOOL DeleteFatChain(PCDINFO pCD, ULONG ulCluster); (追記ここまで)
    72(追記) BOOL LoadTranslateTable(VOID); (追記ここまで)
    73(追記) VOID GetFirstInfo( PBOOL pFirstInfo ); (追記ここまで)
    74(追記) VOID GetCaseConversion( PUCHAR pCase ); (追記ここまで)
    75(追記) VOID Translate2OS2(PUSHORT pusUni, PSZ pszName, USHORT usLen); (追記ここまで)
    76(追記) (追記ここまで)
    6077INT cdecl iShowMessage(PCDINFO pCD, USHORT usNr, USHORT usNumFields, ...);
    6178PSZ GetOS2Error(USHORT rc);
    6279
    63(削除) static F32PARMS f32Parms (削除ここまで);
    80(追記) F32PARMS f32Parms = {0} (追記ここまで);
    6481static BOOL fToFile;
    6582
    7390 ULONG ulParamSize;
    7491
    75 DosFSCtl( rgFirstInfo, sizeof( rgFirstInfo ), &ulDataSize,
    76 NULL, 0, &ulParamSize,
    77 FAT32_GETFIRSTINFO, "FAT32", -1, FSCTL_FSDNAME );
    92 //DosFSCtl( rgFirstInfo, sizeof( rgFirstInfo ), &ulDataSize,
    93 // NULL, 0, &ulParamSize,
    94 // FAT32_GETFIRSTINFO, "FAT32", -1, FSCTL_FSDNAME );
    95 GetFirstInfo(( PBOOL )rgFirstInfo );
    7896}
    7997
    88106 ULONG ulParamSize;
    89107
    90 DosFSCtl( rgLCase, sizeof( rgLCase ), &ulDataSize,
    91 NULL, 0, &ulParamSize,
    92 FAT32_GETCASECONVERSION, "FAT32", -1, FSCTL_FSDNAME );
    108 //DosFSCtl( rgLCase, sizeof( rgLCase ), &ulDataSize,
    109 // NULL, 0, &ulParamSize,
    110 // FAT32_GETCASECONVERSION, "FAT32", -1, FSCTL_FSDNAME );
    111 GetCaseConversion(rgLCase);
    93112}
    94113
    126145ULONG ulDataSize;
    127146ULONG cbDataLen;
    147(追記) LONGLONG llSize; (追記ここまで)
    128148
    129149 DosError(1); /* Enable hard errors */
    150(追記) (追記ここまで)
    151(追記) f32Parms.fEAS = TRUE; (追記ここまで)
    152(追記) (追記ここまで)
    153(追記) LoadTranslateTable(); (追記ここまで)
    130154
    131155 TranslateInitDBCSEnv();
    175199
    176200 ulDataSize = sizeof(f32Parms);
    177 rc = DosFSCtl(
    178 (PVOID)&f32Parms, ulDataSize, &ulDataSize,
    179 NULL, 0, &ulParmSize,
    180 FAT32_GETPARMS, "FAT32", -1, FSCTL_FSDNAME);
    181 if (rc)
    182 {
    183 printf("DosFSCtl, FAT32_GETPARMS failed, rc = %d\n", rc);
    184 DosExit(EXIT_PROCESS, 1);
    185 }
    186 if (strcmp(f32Parms.szVersion, FAT32_VERSION))
    187 {
    188 printf("ERROR: FAT32 version (%s) differs from UFAT32.DLL version (%s)\n", f32Parms.szVersion, FAT32_VERSION);
    189 DosExit(EXIT_PROCESS, 1);
    190 }
    191
    201 //rc = DosFSCtl(
    202 // (PVOID)&f32Parms, ulDataSize, &ulDataSize,
    203 // NULL, 0, &ulParmSize,
    204 // FAT32_GETPARMS, "FAT32", -1, FSCTL_FSDNAME);
    205 //if (rc)
    206 // {
    207 // printf("DosFSCtl, FAT32_GETPARMS failed, rc = %d\n", rc);
    208 // DosExit(EXIT_PROCESS, 1);
    209 // }
    210 //if (strcmp(f32Parms.szVersion, FAT32_VERSION))
    211 // {
    212 // printf("ERROR: FAT32 version (%s) differs from UFAT32.DLL version (%s)\n", f32Parms.szVersion, FAT32_VERSION);
    213 // DosExit(EXIT_PROCESS, 1);
    214 // }
    192215
    193216 if (!strlen(pCD->szDrive))
    199222 pCD->szDrive[1] = ':';
    200223 }
    201 //printf("000\n");
    202 //printf("DosOpen pCD->szDrive=%s\n", pCD->szDrive);
    203 rc = DosOpen(pCD->szDrive,
    224 rc = DosOpenL(pCD->szDrive,
    204225 &hFile,
    205226 &ulAction, /* action taken */
    206 0L(削除) , (削除ここまで) /* new size */
    227 0L(追記) L, (追記ここまで) /* new size */
    207228 0, /* attributes */
    208229 OPEN_ACTION_OPEN_IF_EXISTS, /* open flags */
    210231 OPEN_FLAGS_WRITE_THROUGH, /* OPEN_FLAGS_NO_CACHE , */
    211232 0L);
    212(削除) //printf("rc=%lu\n", rc); (削除ここまで)
    213(削除) //printf("001\n"); (削除ここまで)
    214233 if (rc)
    215234 {
    221240 }
    222241 ulParmSize = sizeof(ulDeadFace);
    223 //printf("002\n");
    224 rc = DosFSCtl(NULL, 0, 0,
    225 (PBYTE)&ulDeadFace, ulParmSize, &ulParmSize,
    226 FAT32_SECTORIO,
    227 NULL,
    228 hFile,
    229 FSCTL_HANDLE);
    230 if (rc)
    231 {
    232 printf("DosFSCtl (SectorIO) failed:\n%s\n", GetOS2Error(rc));
    233 exit(1);
    234 }
    235 //printf("003\n");
    236 rc = DosDevIOCtl(hFile, IOCTL_FAT32, FAT32_GETVOLCLEAN,
    237 NULL, 0, NULL,
    238 (PVOID)&pCD->fCleanOnBoot, sizeof(pCD->fCleanOnBoot), &cbDataLen);
    242 //rc = DosFSCtl(NULL, 0, 0,
    243 // (PBYTE)&ulDeadFace, ulParmSize, &ulParmSize,
    244 // FAT32_SECTORIO,
    245 // NULL,
    246 // hFile,
    247 // FSCTL_HANDLE);
    248 //if (rc)
    249 // {
    250 // printf("DosFSCtl (SectorIO) failed:\n%s\n", GetOS2Error(rc));
    251 // exit(1);
    252 // }
    253 //rc = DosDevIOCtl(hFile, IOCTL_FAT32, FAT32_GETVOLCLEAN,
    254 // NULL, 0, NULL,
    255 // (PVOID)&pCD->fCleanOnBoot, sizeof(pCD->fCleanOnBoot), &cbDataLen);
    239256 //rc = DosDevIOCtl2((PVOID)&pCD->fCleanOnBoot, sizeof(pCD->fCleanOnBoot),
    240257 // NULL, 0,
    241258 // FAT32_GETVOLCLEAN, IOCTL_FAT32, hFile);
    242 //printf("DosDevIOCtl, rc=%lu\n", rc);
    259 pCD->fCleanOnBoot = GetDiskStatus(pCD);
    260
    243261 if (pCD->fAutoRecover && pCD->fCleanOnBoot)
    244262 pCD->fAutoRecover = FALSE;
    246264 if (pCD->fFix)
    247265 {
    248(削除) //printf("004\n"); (削除ここまで)
    249266 rc = DosDevIOCtl(hFile, IOCTL_DISK, DSK_LOCKDRIVE,
    250267 NULL, 0, NULL,
    260277 }
    261278 }
    262(削除) //printf("005\n"); (削除ここまで)
    263279
    264280 rc = DosQueryFSInfo(pCD->szDrive[0] - '@', FSIL_ALLOC,
    271287 pCD->hDisk = hFile;
    272288
    273(削除) //printf("006\n"); (削除ここまで)
    274289 rc = ReadSector(pCD, 0, 1, bSector);
    275290 if (rc)
    280295 memcpy(&pCD->BootSect, bSector, sizeof (BOOTSECT));
    281296
    282(削除) //printf("007\n"); (削除ここまで)
    283297 rc = ReadSector(pCD, pCD->BootSect.bpb.FSinfoSec, 1, bSector);
    284298 if (rc)
    288302 }
    289303
    290(削除) //printf("008\n"); (削除ここまで)
    291304 rc = ChkDskMain(pCD);
    292(削除) //printf("009\n"); (削除ここまで)
    293305
    294306 if (pCD->fFix)
    295307 {
    296(削除) //printf("0090\n"); (削除ここまで)
    297308 rc = DosDevIOCtl(hFile, IOCTL_DISK, DSK_UNLOCKDRIVE,
    298309 NULL, 0, NULL,
    307318 DosClose(hFile);
    308319 free(pCD);
    309(削除) (削除ここまで)
    310(削除) //printf("010\n"); (削除ここまで)
    311320
    312321 DosExit(EXIT_PROCESS, rc);
    338347}
    339348
    349(追記) #if 1 (追記ここまで)
    350(追記) ULONG ReadCluster(PCDINFO pCD, ULONG ulCluster, PBYTE pbCluster) (追記ここまで)
    351(追記) { (追記ここまで)
    352(追記) ULONG ulSector; (追記ここまで)
    353(追記) USHORT rc; (追記ここまで)
    354(追記) (追記ここまで)
    355(追記) if (ulCluster < 2 || ulCluster >= pCD->ulTotalClusters + 2) (追記ここまで)
    356(追記) return ERROR_SECTOR_NOT_FOUND; (追記ここまで)
    357(追記) (追記ここまで)
    358(追記) ulSector = pCD->ulStartOfData + (追記ここまで)
    359(追記) (ulCluster - 2) * pCD->BootSect.bpb.SectorsPerCluster; (追記ここまで)
    360(追記) (追記ここまで)
    361(追記) rc = ReadSector(pCD, ulSector, (追記ここまで)
    362(追記) pCD->BootSect.bpb.SectorsPerCluster, (追記ここまで)
    363(追記) pbCluster); (追記ここまで)
    364(追記) (追記ここまで)
    365(追記) if (rc) (追記ここまで)
    366(追記) return rc; (追記ここまで)
    367(追記) (追記ここまで)
    368(追記) return 0; (追記ここまで)
    369(追記) } (追記ここまで)
    370(追記) #else (追記ここまで)
    340371ULONG ReadCluster(PCDINFO pCD, ULONG ulCluster, PBYTE pbCluster)
    341372{
    344375 ULONG rc;
    345376
    346(削除) //printf("pCD->usClusterSize=%lu\n", ulDataSize); (削除ここまで)
    347(削除) //printf("ulCluster=%lu\n", ulCluster); (削除ここまで)
    348377// return DosDevIOCtl2(
    349378// (PVOID)pbCluster, pCD->usClusterSize,
    350379// (PVOID)&ulCluster, sizeof(ulCluster),
    351380// FAT32_READCLUSTER, IOCTL_FAT32, pCD->hDisk);
    352(削除) //printf("240\n"); (削除ここまで)
    353381 rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_READCLUSTER,
    354382 (PVOID)&ulCluster, sizeof(ulCluster), &dummy1,
    355383 (PVOID)pbCluster, ulDataSize, &dummy2);
    356(削除) //printf("241\n"); (削除ここまで)
    357384 return rc;
    358385}
    359
    386#endif
    387
    388#if 1
    360389ULONG ReadSector(PCDINFO pCD, ULONG ulSector, USHORT nSectors, PBYTE pbSector)
    361390{
    362READSECTORDATA rsd;
    363ULONG ulDataSize;
    364ULONG dummy1 = 0, dummy2 = 0;
    365ULONG rc;
    391 ULONG ulDataSize;
    392 BIOSPARAMETERBLOCK bpb;
    393
    394 #pragma pack(1)
    395
    396 /* parameter packet */
    397 struct {
    398 unsigned char command;
    399 unsigned char drive;
    400 } parm2;
    401
    402 #pragma pack()
    403
    404 #define BUFSIZE 0x4000
    405
    406 char buf[BUFSIZE];
    407
    408 ULONG parmlen2 = sizeof(parm2);
    409 ULONG datalen2 = sizeof(bpb);
    410 ULONG cbRead32;
    411 ULONG rc;
    412 ULONG parmlen4;
    413 char trkbuf[sizeof(TRACKLAYOUT) + sizeof(USHORT) * 2 * 255];
    414 PTRACKLAYOUT ptrk = (PTRACKLAYOUT)trkbuf;
    415 ULONG datalen4 = BUFSIZE;
    416 USHORT cyl, head, sec, n;
    417 ULONGLONG off;
    418 int i;
    419
    420 ulDataSize = nSectors * SECTOR_SIZE;
    421
    422 if ( (rc = DosDevIOCtl(pCD->hDisk, IOCTL_DISK, DSK_GETDEVICEPARAMS,
    423 &parm2, parmlen2, &parmlen2, &bpb, datalen2, &datalen2)) )
    424 return rc;
    425
    426 parmlen4 = sizeof(TRACKLAYOUT) + sizeof(USHORT) * 2 * (bpb.usSectorsPerTrack - 1);
    427 cbRead32 = (ulDataSize > BUFSIZE) ? BUFSIZE : (ULONG)ulDataSize;
    428 memset((char *)trkbuf, 0, sizeof(trkbuf));
    429 off = ulSector + bpb.cHiddenSectors;
    430 off *= SECTOR_SIZE;
    431
    432 for (i = 0; i < bpb.usSectorsPerTrack; i++)
    433 {
    434 ptrk->TrackTable[i].usSectorNumber = i + 1;
    435 ptrk->TrackTable[i].usSectorSize = SECTOR_SIZE;
    436 }
    437
    438 do
    439 {
    440 cyl = off / (SECTOR_SIZE * bpb.cHeads * bpb.usSectorsPerTrack);
    441 head = (off / SECTOR_SIZE - bpb.cHeads * bpb.usSectorsPerTrack * cyl) / bpb.usSectorsPerTrack;
    442 sec = off / SECTOR_SIZE - bpb.cHeads * bpb.usSectorsPerTrack * cyl - head * bpb.usSectorsPerTrack;
    443
    444 if (sec + cbRead32 / SECTOR_SIZE > bpb.usSectorsPerTrack)
    445 n = bpb.usSectorsPerTrack - sec + 1;
    446 else
    447 n = cbRead32 / SECTOR_SIZE;
    448
    449 ptrk->bCommand = 1;
    450 ptrk->usHead = head;
    451 ptrk->usCylinder = cyl;
    452 ptrk->usFirstSector = sec;
    453 ptrk->cSectors = n;
    454
    455 rc = DosDevIOCtl(pCD->hDisk, IOCTL_DISK, DSK_READTRACK,
    456 trkbuf, parmlen4, &parmlen4, buf, datalen4, &datalen4);
    457
    458 if (rc)
    459 break;
    460
    461 memcpy(pbSector, buf, min(datalen4, ulDataSize));
    462
    463 off += cbRead32;
    464 ulDataSize -= cbRead32;
    465 pbSector = (char *)pbSector + cbRead32;
    466
    467 } while ((ulDataSize > 0) && ! rc);
    468
    469 return rc;
    470}
    471#else
    472ULONG ReadSector(PCDINFO pCD, ULONG ulSector, USHORT nSectors, PBYTE pbSector)
    473{
    474 READSECTORDATA rsd;
    475 ULONG ulDataSize;
    476 ULONG dummy1 = 0, dummy2 = 0;
    366477
    367478 rsd.ulSector = ulSector;
    374485// (PVOID)&rsd, sizeof(rsd),
    375486// FAT32_READSECTOR, IOCTL_FAT32, pCD->hDisk);
    376 return DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_READSECTOR,
    377 (PVOID)&rsd, sizeof(rsd), &dummy1,
    378 (PVOID)pbSector, ulDataSize, &dummy2);
    487 rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_READSECTOR,
    488 (PVOID)&rsd, sizeof(rsd), &dummy1,
    489 (PVOID)pbSector, ulDataSize, &dummy2);
    490}
    491#endif
    492
    493ULONG WriteSector(PCDINFO pCD, ULONG ulSector, USHORT nSectors, PBYTE pbSector)
    494{
    495 ULONG ulDataSize;
    496 BIOSPARAMETERBLOCK bpb;
    497
    498 #pragma pack(1)
    499
    500 /* parameter packet */
    501 struct {
    502 unsigned char command;
    503 unsigned char drive;
    504 } parm2;
    505
    506 #pragma pack()
    507
    508 #define BUFSIZE 0x4000
    509
    510 char buf[BUFSIZE];
    511
    512 ULONG parmlen2 = sizeof(parm2);
    513 ULONG datalen2 = sizeof(bpb);
    514 ULONG cbWrite32;
    515 ULONG rc;
    516 ULONG parmlen4;
    517 char trkbuf[sizeof(TRACKLAYOUT) + sizeof(USHORT) * 2 * 255];
    518 PTRACKLAYOUT ptrk = (PTRACKLAYOUT)trkbuf;
    519 ULONG datalen4 = BUFSIZE;
    520 USHORT cyl, head, sec, n;
    521 ULONGLONG off;
    522 int i;
    523
    524 ulDataSize = nSectors * SECTOR_SIZE;
    525
    526 if ( (rc = DosDevIOCtl(pCD->hDisk, IOCTL_DISK, DSK_GETDEVICEPARAMS,
    527 &parm2, parmlen2, &parmlen2, &bpb, datalen2, &datalen2)) )
    528 return rc;
    529
    530 parmlen4 = sizeof(TRACKLAYOUT) + sizeof(USHORT) * 2 * (bpb.usSectorsPerTrack - 1);
    531 cbWrite32 = (ulDataSize > BUFSIZE) ? BUFSIZE : (ULONG)ulDataSize;
    532 memset((char *)trkbuf, 0, sizeof(trkbuf));
    533 off = ulSector + bpb.cHiddenSectors;
    534 off *= SECTOR_SIZE;
    535
    536 for (i = 0; i < bpb.usSectorsPerTrack; i++)
    537 {
    538 ptrk->TrackTable[i].usSectorNumber = i + 1;
    539 ptrk->TrackTable[i].usSectorSize = SECTOR_SIZE;
    540 }
    541
    542 do
    543 {
    544 cyl = off / (SECTOR_SIZE * bpb.cHeads * bpb.usSectorsPerTrack);
    545 head = (off / SECTOR_SIZE - bpb.cHeads * bpb.usSectorsPerTrack * cyl) / bpb.usSectorsPerTrack;
    546 sec = off / SECTOR_SIZE - bpb.cHeads * bpb.usSectorsPerTrack * cyl - head * bpb.usSectorsPerTrack;
    547
    548 if (sec + cbWrite32 / SECTOR_SIZE > bpb.usSectorsPerTrack)
    549 n = bpb.usSectorsPerTrack - sec + 1;
    550 else
    551 n = cbWrite32 / SECTOR_SIZE;
    552
    553 ptrk->bCommand = 1;
    554 ptrk->usHead = head;
    555 ptrk->usCylinder = cyl;
    556 ptrk->usFirstSector = sec;
    557 ptrk->cSectors = n;
    558
    559 memcpy(buf, pbSector, min(datalen4, ulDataSize));
    560
    561 rc = DosDevIOCtl(pCD->hDisk, IOCTL_DISK, DSK_WRITETRACK,
    562 trkbuf, parmlen4, &parmlen4, buf, datalen4, &datalen4);
    563
    564 if (rc)
    565 break;
    566
    567 off += cbWrite32;
    568 ulDataSize -= cbWrite32;
    569 pbSector = (char *)pbSector + cbWrite32;
    570
    571 } while ((ulDataSize > 0) && ! rc);
    572
    573 return rc;
    574}
    575
    576ULONG WriteCluster(PCDINFO pCD, ULONG ulCluster, PVOID pbCluster)
    577{
    578 ULONG ulSector;
    579 ULONG rc;
    580
    581 if (ulCluster < 2 || ulCluster >= pCD->ulTotalClusters + 2)
    582 //{
    583 //CritMessage("ERROR: Cluster %ld does not exist on disk %c:",
    584 // ulCluster, pVolInfo->bDrive + 'A');
    585 //Message("ERROR: Cluster %ld does not exist on disk %c:",
    586 // ulCluster, pVolInfo->bDrive + 'A');
    587 return ERROR_SECTOR_NOT_FOUND;
    588 //}
    589
    590 ulSector = pCD->ulStartOfData +
    591 (ulCluster - 2) * pCD->BootSect.bpb.SectorsPerCluster;
    592
    593 rc = WriteSector(pCD, ulSector,
    594 pCD->BootSect.bpb.SectorsPerCluster, pbCluster);
    595 if (rc)
    596 //{
    597 //Message("WriteCluster: Cluster %lu failed!", ulCluster);
    598 return rc;
    599 //}
    600
    601 return 0;
    379602}
    380603
    415638 return ERROR_NOT_ENOUGH_MEMORY;
    416639 }
    417(削除) //printf("100\n"); (削除ここまで)
    418640
    419641 memset(szString, 0, sizeof(szString));
    421643 strncpy(szString, pCD->BootSect.VolumeLabel, 11);
    422644#else
    423(削除) //printf("101\n"); (削除ここまで)
    424645 fGetVolLabel( pCD, szString );
    425(削除) //printf("102\n"); (削除ここまで)
    426646#endif
    427647 p = szString + strlen(szString);
    435655 HIUSHORT(pCD->BootSect.ulVolSerial), LOUSHORT(pCD->BootSect.ulVolSerial));
    436656 iShowMessage(pCD, 1243, 1, TYPE_STRING, szString);
    437(削除) //printf("103\n"); (削除ここまで)
    438657 if (pCD->BootSect.bpb.MediaDescriptor != 0xF8)
    439658 {
    441660 pCD->ulErrorCount++;
    442661 }
    443(削除) //printf("104\n"); (削除ここまで)
    444662
    445663 rc = CheckFats(pCD);
    446(削除) //printf("105\n"); (削除ここまで)
    447664 if (rc)
    448665 {
    451668 return rc;
    452669 }
    453(削除) //printf("106\n"); (削除ここまで)
    454670 rc = CheckFiles(pCD);
    455(削除) //printf("107\n"); (削除ここまで)
    456671 rc = CheckFreeSpace(pCD);
    457(削除) //printf("108\n"); (削除ここまで)
    458(削除) (削除ここまで)
    459672
    460673 if (pCD->DiskInfo.total_clusters != pCD->ulTotalClusters)
    469682 {
    470683 ULONG ulFreeBlocks;
    471 //printf("109\n");
    472 rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_GETFREESPACE,
    473 NULL, 0, NULL,
    474 &ulFreeBlocks, sizeof(ulFreeBlocks), &dummy);
    684 //rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_GETFREESPACE,
    685 // NULL, 0, NULL,
    686 // &ulFreeBlocks, sizeof(ulFreeBlocks), &dummy);
    475687 //rc = DosDevIOCtl2(&ulFreeBlocks, sizeof(ulFreeBlocks),
    476688 // NULL, 0,
    477689 // FAT32_GETFREESPACE, IOCTL_FAT32, pCD->hDisk);
    478 (削除) //printf("110\n" (削除ここまで));
    479 (削除) (削除ここまで)if (!rc)
    690 (追記) ulFreeBlocks = GetFreeSpace(pCD (追記ここまで));
    691 (追記) // (追記ここまで)if (!rc)
    480692 printf("The correct free space is set to %lu allocation units.\n",
    481693 ulFreeBlocks);
    482 (削除) (削除ここまで)else
    483 (削除) (削除ここまで){
    484 (削除) (削除ここまで)printf("Setting correct free space failed, rc = %u.\n", rc);
    485 (削除) (削除ここまで)pCD->ulErrorCount++;
    486 (削除) (削除ここまで)}
    694 (追記) // (追記ここまで)else
    695 (追記) // (追記ここまで){
    696 (追記) // (追記ここまで)printf("Setting correct free space failed, rc = %u.\n", rc);
    697 (追記) // (追記ここまで)pCD->ulErrorCount++;
    698 (追記) // (追記ここまで)}
    487699 }
    488700 else
    490702 }
    491703
    492(削除) //printf("111\n"); (削除ここまで)
    493704 iShowMessage(pCD, 1361, 1,
    494705 TYPE_DOUBLE, (DOUBLE)pCD->ulTotalClusters * pCD->usClusterSize);
    508719 TYPE_LONG, pCD->ulUserFiles);
    509720
    510(削除) //printf("112\n"); (削除ここまで)
    511721 if (pCD->ulRecoveredClusters)
    512722 iShowMessage(pCD, 1365, 2,
    514724 TYPE_LONG, pCD->ulRecoveredFiles);
    515725
    516(削除) //printf("113\n"); (削除ここまで)
    517726 if (pCD->ulLostClusters)
    518727 iShowMessage(pCD, 1359, 1,
    519728 TYPE_DOUBLE, (DOUBLE)pCD->ulLostClusters * pCD->usClusterSize);
    520729
    521(削除) (削除ここまで)
    522(削除) //printf("114\n"); (削除ここまで)
    523730 iShowMessage(pCD, 1368, 2,
    524731 TYPE_DOUBLE, (DOUBLE)pCD->ulFreeClusters * pCD->usClusterSize,
    527734 printf("\n");
    528735
    529(削除) (削除ここまで)
    530(削除) //printf("115\n"); (削除ここまで)
    531736 iShowMessage(pCD, 1304, 1,
    532737 TYPE_LONG, (ULONG)pCD->usClusterSize);
    533738
    534(削除) //printf("116\n"); (削除ここまで)
    535739 iShowMessage(pCD, 1305, 1,
    536740 TYPE_LONG, pCD->ulTotalClusters);
    537741
    538(削除) //printf("117\n"); (削除ここまで)
    539742 iShowMessage(pCD, 1306, 1,
    540743 TYPE_LONG, pCD->ulFreeClusters);
    541744
    542(削除) //printf("118\n"); (削除ここまで)
    543745 if (pCD->ulTotalChains > 0)
    544746 printf("\n%u%% of the files and directories are fragmented.\n",
    545747 (USHORT)(pCD->ulFragmentedChains * 100 / pCD->ulTotalChains));
    546748
    547(削除) //printf("119\n"); (削除ここまで)
    548749 if (pCD->ulErrorCount)
    549750 {
    554755 printf("Still errors found on disk. Please run Windows 95 ScanDisk!\n");
    555756 }
    556 (削除) (削除ここまで)else if (pCD->fFix)
    757 (追記) // (追記ここまで)else if (pCD->fFix)
    557758 //DosDevIOCtl(NULL, NULL, FAT32_MARKVOLCLEAN, IOCTL_FAT32, pCD->hDisk);
    558 DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_MARKVOLCLEAN,
    559 NULL, 0, NULL, NULL, 0, NULL);
    560
    561 //printf("120\n");
    759 //DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_MARKVOLCLEAN,
    760 // NULL, 0, NULL, NULL, 0, NULL);
    761
    562762 return 0;
    563763}
    569769ULONG dummy = 0;
    570770
    571 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk,
    572 (削除) (削除ここまで) IOCTL_FAT32,
    573 (削除) (削除ここまで) FAT32_FORCEVOLCLEAN,
    574 (削除) (削除ここまで) (PVOID)&fClean, sizeof(fClean), &dummy,
    575 (削除) (削除ここまで) NULL, 0, NULL);
    771 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk,
    772 (追記) // (追記ここまで) IOCTL_FAT32,
    773 (追記) // (追記ここまで) FAT32_FORCEVOLCLEAN,
    774 (追記) // (追記ここまで) (PVOID)&fClean, sizeof(fClean), &dummy,
    775 (追記) // (追記ここまで) NULL, 0, NULL);
    576776// rc = DosDevIOCtl2( NULL, 0,
    577777// (PVOID)&fClean, sizeof(fClean),
    579779// IOCTL_FAT32,
    580780// pCD->hDisk);
    781(追記) rc = MarkDiskStatus(pCD, fClean); (追記ここまで)
    581782
    582783 return rc;
    608809 }
    609810
    610(削除) (削除ここまで)
    611811 //pSector = halloc(pCD->BootSect.bpb.NumberOfFATs, BLOCK_SIZE);
    612812 pSector = calloc(pCD->BootSect.bpb.NumberOfFATs, BLOCK_SIZE);
    614814 return ERROR_NOT_ENOUGH_MEMORY;
    615815
    616(削除) (削除ここまで)
    617816 fDiff = FALSE;
    618817 ulCluster = 0L;
    622821 USHORT usNew = (USHORT)(ulSector * 100 / pCD->BootSect.bpb.BigSectorsPerFat);
    623822 USHORT nSectors;
    624(削除) (削除ここまで)
    625823
    626824 if (!pCD->fPM && !fToFile && usNew != usPerc)
    673871 ulCluster++;
    674872 }
    675(削除) (削除ここまで)
    676(削除) (削除ここまで)
    677873 }
    678874
    802998 else
    803999 {
    804 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_DELETECHAIN,
    805 (削除) (削除ここまで) (PVOID)&pCD->rgulLost[usIndex], 4, &dummy,
    806 (削除) (削除ここまで) NULL, 0, NULL);
    1000 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_DELETECHAIN,
    1001 (追記) // (追記ここまで) (PVOID)&pCD->rgulLost[usIndex], 4, &dummy,
    1002 (追記) // (追記ここまで) NULL, 0, NULL);
    8071003 //rc = DosDevIOCtl2(NULL, 0,
    8081004 // (PVOID)&pCD->rgulLost[usIndex], 4,
    8091005 // FAT32_DELETECHAIN, IOCTL_FAT32, pCD->hDisk);
    810 if (rc)
    1006 rc = DeleteFatChain(pCD, pCD->rgulLost[usIndex]);
    1007 if (rc == FALSE)
    8111008 {
    8121009 printf("CHKDSK was unable to delete a lost chain.\n");
    10111208 strcpy(Mark.szFileName, pbPath);
    10121209 Mark.fEAS = ( BYTE )( pDir->fEAS == FILE_HAS_OLD_EAS ? FILE_HAS_EAS : FILE_HAS_CRITICAL_EAS );
    1013 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETEAS,
    1014 (削除) (削除ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1015 (削除) (削除ここまで) NULL, 0, NULL);
    1210 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETEAS,
    1211 (追記) // (追記ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1212 (追記) // (追記ここまで) NULL, 0, NULL);
    10161213 //rc = DosDevIOCtl2(NULL, 0,
    10171214 // (PVOID)&Mark, sizeof(Mark),
    10181215 // FAT32_SETEAS, IOCTL_FAT32, pCD->hDisk);
    1216(追記) rc = GetSetFileEAS(pCD, FAT32_SETEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで)
    10191217 if (!rc)
    10201218 printf("This has been corrected.\n");
    10531251 strcpy(Mark.szFileName, pbPath);
    10541252 Mark.fEAS = FILE_HAS_NO_EAS;
    1055 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETEAS,
    1056 (削除) (削除ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1057 (削除) (削除ここまで) NULL, 0, NULL);
    1253 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETEAS,
    1254 (追記) // (追記ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1255 (追記) // (追記ここまで) NULL, 0, NULL);
    10581256 //rc = DosDevIOCtl2(NULL, 0,
    10591257 // (PVOID)&Mark, sizeof(Mark),
    10601258 // FAT32_SETEAS, IOCTL_FAT32, pCD->hDisk);
    1259(追記) rc = GetSetFileEAS(pCD, FAT32_SETEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで)
    10611260 if (!rc)
    10621261 printf("This has been corrected.\n");
    10731272 strcpy(Mark.szFileName, pbPath);
    10741273 Mark.fEAS = FILE_HAS_NO_EAS;
    1075 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETEAS,
    1076 (削除) (削除ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1077 (削除) (削除ここまで) NULL, 0, NULL);
    1274 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETEAS,
    1275 (追記) // (追記ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1276 (追記) // (追記ここまで) NULL, 0, NULL);
    10781277 //rc = DosDevIOCtl2(NULL, 0,
    10791278 // (PVOID)&Mark, sizeof(Mark),
    10801279 // FAT32_SETEAS, IOCTL_FAT32, pCD->hDisk);
    1280(追記) rc = GetSetFileEAS(pCD, FAT32_SETEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで)
    10811281 if (!rc)
    10821282 printf("This has been corrected.\n");
    11031303 memcpy(Mark.szFileName, pbPath, pEA - pbPath);
    11041304
    1105 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_QUERYEAS,
    1106 (削除) (削除ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1107 (削除) (削除ここまで) NULL, 0, NULL);
    1305 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_QUERYEAS,
    1306 (追記) // (追記ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1307 (追記) // (追記ここまで) NULL, 0, NULL);
    11081308 //rc = DosDevIOCtl2(NULL, 0,
    11091309 // (PVOID)&Mark, sizeof(Mark),
    11101310 // FAT32_QUERYEAS, IOCTL_FAT32, pCD->hDisk);
    1311(追記) rc = GetSetFileEAS(pCD, FAT32_QUERYEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで)
    11111312 if (rc == 2 || rc == 3)
    11121313 {
    11501351 {
    11511352 Mark.fEAS = FILE_HAS_EAS;
    1152 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETEAS,
    1153 (削除) (削除ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1154 (削除) (削除ここまで) NULL, 0, NULL);
    1353 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETEAS,
    1354 (追記) // (追記ここまで) (PVOID)&Mark, sizeof(Mark), &dummy,
    1355 (追記) // (追記ここまで) NULL, 0, NULL);
    11551356 //rc = DosDevIOCtl2(NULL, 0,
    11561357 // (PVOID)&Mark, sizeof(Mark),
    11571358 // FAT32_SETEAS, IOCTL_FAT32, pCD->hDisk);
    1359(追記) rc = GetSetFileEAS(pCD, FAT32_SETEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで)
    11581360 if (!rc)
    11591361 printf("This has been corrected.\n");
    11971399 strcat(fs.szFileName, MakeName(pDir, szShortName, sizeof(szShortName)));
    11981400 fs.ulFileSize = ulClustersUsed * pCD->usClusterSize;
    1199 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETFILESIZE,
    1200 (削除) (削除ここまで) (PVOID)&fs, sizeof(fs), &dummy,
    1201 (削除) (削除ここまで) NULL, 0, NULL);
    1401 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETFILESIZE,
    1402 (追記) // (追記ここまで) (PVOID)&fs, sizeof(fs), &dummy,
    1403 (追記) // (追記ここまで) NULL, 0, NULL);
    12021404 //rc = DosDevIOCtl2(NULL, 0,
    12031405 // (PVOID)&fs, sizeof(fs),
    12041406 // FAT32_SETFILESIZE, IOCTL_FAT32, pCD->hDisk);
    1407(追記) rc = SetFileSize(pCD, (PFILESIZEDATA)&fs); (追記ここまで)
    12051408 strcpy( strrchr( fs.szFileName, '\\' ) + 1, szLongName );
    12061409 if (rc)
    14641667 pDir = NULL;
    14651668
    1466(削除) //printf("200\n"); (削除ここまで)
    1467(削除) (削除ここまで)
    14681669 pDirStart = malloc(pCD->usClusterSize);
    14691670 if (!pDirStart)
    14701671 return ERROR_NOT_ENOUGH_MEMORY;
    1471(削除) //printf("210\n"); (削除ここまで)
    14721672
    14731673 fFound = FALSE;
    14751675 while (!fFound && ulCluster != FAT_EOF)
    14761676 {
    1477(削除) //printf("211\n"); (削除ここまで)
    14781677 ReadCluster(pCD, ulCluster, (PBYTE)pDirStart);
    1479(削除) //printf("212\n"); (削除ここまで)
    14801678 pDir = pDirStart;
    14811679 pDirEnd = (PDIRENTRY)((PBYTE)pDirStart + pCD->usClusterSize);
    1482(削除) //printf("213\n"); (削除ここまで)
    14831680 while (pDir < pDirEnd)
    14841681 {
    14871684 fFound = TRUE;
    14881685 memcpy(&DirEntry, pDir, sizeof (DIRENTRY));
    1489(削除) //printf("xx\n"); (削除ここまで)
    14901686 break;
    14911687 }
    14941690 if (!fFound)
    14951691 {
    1496(削除) //printf("220\n"); (削除ここまで)
    14971692 ulCluster = GetNextCluster(pCD, ulCluster, FALSE);
    14981693 if (!ulCluster)
    15051700 else
    15061701 memcpy(pszVolLabel, DirEntry.bFileName, 11);
    1507(削除) //printf("230\n"); (削除ここまで)
    15081702
    15091703 return 0;
    15491743 // FSCTL_FSDNAME,
    15501744 // 0);
    1551 DosFSCtl(szLongName, ulDataSize, &ulDataSize,
    1552 (PVOID)uniName, ulParmSize, &ulParmSize,
    1553 FAT32_WIN2OS,
    1554 "FAT32",
    1555 -1,
    1556 FSCTL_FSDNAME);
    1745 //DosFSCtl(szLongName, ulDataSize, &ulDataSize,
    1746 // (PVOID)uniName, ulParmSize, &ulParmSize,
    1747 // FAT32_WIN2OS,
    1748 // "FAT32",
    1749 // -1,
    1750 // FSCTL_FSDNAME);
    1751 Translate2OS2((PUSHORT)uniName, szLongName, ulDataSize);
    15571752
    15581753 wNameSize = strlen( szLongName );
    15741769ULONG ulRet;
    15751770
    1576(削除) //printf("300\n"); (削除ここまで)
    15771771 ulSector = ulCluster / 128;
    15781772 if (!ReadFATSector(pCD, ulSector))
    15791773 return FAT_EOF;
    1580(削除) //printf("301\n"); (削除ここまで)
    15811774
    15821775 pulCluster = (PULONG)pCD->pbFATSector + ulCluster % 128;
    15861779 return FAT_EOF;
    15871780
    1588(削除) //printf("302\n"); (削除ここまで)
    1589(削除) (削除ここまで)
    15901781 if (ulRet == FAT_BAD_CLUSTER && fAllowBad)
    15911782 return ulRet;
    1592(削除) (削除ここまで)
    1593(削除) //printf("303\n"); (削除ここまで)
    15941783
    15951784 if (ulRet >= pCD->ulTotalClusters + 2)
    15991788 return FAT_EOF;
    16001789 }
    1601(削除) //printf("304\n"); (削除ここまで)
    16021790
    16031791 return ulRet;
    16161804
    16171805
    1618 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETCLUSTER,
    1619 (削除) (削除ここまで) (PVOID)&SetCluster, sizeof(SetCluster), &dummy,
    1620 (削除) (削除ここまで) NULL, 0, NULL);
    1806 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_SETCLUSTER,
    1807 (追記) // (追記ここまで) (PVOID)&SetCluster, sizeof(SetCluster), &dummy,
    1808 (追記) // (追記ここまで) NULL, 0, NULL);
    16211809 //rc = DosDevIOCtl2(NULL, 0,
    16221810 // (PVOID)&SetCluster, sizeof(SetCluster),
    16231811 // FAT32_SETCLUSTER, IOCTL_FAT32, pCD->hDisk);
    1812(追記) if (SetNextCluster(pCD, SetCluster.ulCluster, (追記ここまで)
    1813(追記) SetCluster.ulNextCluster) != SetCluster.ulNextCluster) (追記ここまで)
    1814(追記) rc = ERROR_SECTOR_NOT_FOUND; (追記ここまで)
    1815(追記) else (追記ここまで)
    1816(追記) rc = 0; (追記ここまで)
    1817(追記) (追記ここまで)
    16241818 if (rc)
    16251819 return rc;
    16631857 return TRUE;
    16641858 }
    1665(削除) (削除ここまで)
    16661859
    16671860 for (usIndex = 0; usIndex < pCD->usLostChains &&
    17111904
    17121905 memset(szRecovered, 0, sizeof(szRecovered));
    1713 (削除) (削除ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_RECOVERCHAIN,
    1714 (削除) (削除ここまで) (PVOID)&ulCluster, 4, &dummy1,
    1715 (削除) (削除ここまで) szRecovered, sizeof(szRecovered), &dummy2);
    1906 (追記) // (追記ここまで)rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_RECOVERCHAIN,
    1907 (追記) // (追記ここまで) (PVOID)&ulCluster, 4, &dummy1,
    1908 (追記) // (追記ここまで) szRecovered, sizeof(szRecovered), &dummy2);
    17161909 //rc = DosDevIOCtl2(szRecovered, sizeof(szRecovered),
    17171910 // (PVOID)&ulCluster, 4,
    17181911 // FAT32_RECOVERCHAIN, IOCTL_FAT32, pCD->hDisk);
    1912(追記) rc = RecoverChain2(pCD, ulCluster, szRecovered, sizeof(szRecovered)); (追記ここまで)
    17191913 if (rc)
    17201914 {
  • branches/fat32-0.10/src/ufat32/makefile.wcc

    r116 r117
    1111!ifneq T win32
    1212# create OS/2 binaries
    13OBJS1=ufat32.obj format.obj os2.obj msg.obj chkdsk.obj(削除) (削除ここまで)
    13OBJS1=ufat32.obj format.obj os2.obj msg.obj chkdsk.obj(追記) fatfunc.obj (追記ここまで)
    1414OBJS2=format.obh os2.obh msg.obh
    1515COPT=-3s -s -sg -hw -mf -od -zq -q -fp3 -fpi87 -i=. -i=.. -i=..\include -i=$(%WATCOM)\h -i=$(%WATCOM)\h\os2
    2020OBJS1=
    2121OBJS2=format.obh win32.obh
    22COPT=-3s -s(削除) -s (削除ここまで)g -hw -mf -od -zq -q -u__OS2__ -i=. -i=.. -i=..\include -i=$(%WATCOM)\h -i=$(%WATCOM)\h\nt
    22COPT=-3s -s(追記) (追記ここまで)g -hw -mf -od -zq -q -u__OS2__ -i=. -i=.. -i=..\include -i=$(%WATCOM)\h -i=$(%WATCOM)\h\nt
    2323TARGETS=fat32fmt.exe
    2424SYS=nt
  • branches/fat32-0.10/src/ufat32/ufat32.c

    r97 r117
    1313{
    1414 short Argc = argc;
    15 char **Argv(削除) (削除ここまで);
    16 char **Envp(削除) (削除ここまで);
    15 char **Argv(追記) = NULL (追記ここまで);
    16 char **Envp(追記) = NULL (追記ここまで);
    1717 char * _Seg16 * _Seg16 p;
    1818 short rc;
    1919 int i, n;
    2020
    21 Argv = (char **)malloc((削除) Argc (削除ここまで) * sizeof(char * _Seg16));
    21 Argv = (char **)malloc((追記) (Argc + 1) (追記ここまで) * sizeof(char * _Seg16));
    2222
    2323 for (i = 0, p = argv; i < argc; i++, p++)
    2424 Argv[i] = (char *)(*p);
    2525
    26 (削除) for (n = 0, p = envp; *p; n++, p++) (削除ここまで);
    26 (追記) Argv[argc] = NULL (追記ここまで);
    2727
    28 Envp = (char **)malloc(n * sizeof(char * _Seg16));
    28 for (n = 0, p = envp; p && *p; n++, p++) ;
    29
    30 Envp = (char **)malloc((n + 1) * sizeof(char * _Seg16));
    2931
    3032 for (i = 0, p = envp; i < n; i++, p++)
    3133 Envp[i] = (char *)(*p);
    34(追記) (追記ここまで)
    35(追記) Envp[n] = NULL; (追記ここまで)
    3236
    3337 rc = chkdsk(Argc, Argv, Envp);
    5155 Argv[i] = (char *)(*p);
    5256
    53 for (n = 0, p = envp; (削除) (削除ここまで)*p; n++, p++) ;
    57 for (n = 0, p = envp; (追記) p && (追記ここまで)*p; n++, p++) ;
    5458
    5559 Envp = (char **)malloc(n * sizeof(char * _Seg16));
  • branches/fat32-0.10/src/util/cachef32.c

    r97 r117
    9292BYTE bPrevPrio;
    9393
    94 (削除) (削除ここまで)DoCheckDisk(FALSE);
    94 (追記) // (追記ここまで)DoCheckDisk(FALSE);
    9595
    9696 InitProg(iArgc, rgArgv);
    100100 if (fForeGround)
    101101 {
    102 (削除) (削除ここまで)DoCheckDisk(TRUE);
    102 (追記) // (追記ここまで)DoCheckDisk(TRUE);
    103103 if (!f32Parms.usCacheSize && !f32Parms.fForceLoad )
    104104 printf("FAT32: Cache size has been set to zero, lazy writer will not be started!\n");
Note: See TracChangeset for help on using the changeset viewer.

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