- 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
- fat32chk (added)
- fat32chk/_wcc.cmd (added)
- fat32chk/fat32chk.c (added)
- fat32chk/makefile.wcc (added)
- ifs/fat32.c (modified) (4 diffs)
- ifs/ifsachk.c (added)
- ifs/libc/mem.c (modified) (1 diff)
- ifs/makefile.wcc (modified) (1 diff)
- include/extboot.h (added)
- partfilt/makefile.wcc (modified) (2 diffs)
- ufat32/chkdsk.c (modified) (56 diffs)
- ufat32/fatfunc.c (added)
- ufat32/makefile.wcc (modified) (2 diffs)
- ufat32/ufat32.c (modified) (2 diffs)
- util/cachef32.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/fat32-0.10/src/ifs/fat32.c
r115 r117 56 56 static USHORT GetSetFileEAS(PVOLINFO pVolInfo, USHORT usFunc, PMARKFILEEASBUF pMark); 57 57 static USHORT DBCSStrlen( const PSZ pszStr ); 58 (追記) (追記ここまで) 59 (追記) extern ULONG autocheck_mask; (追記ここまで) 60 (追記) extern ULONG force_mask; (追記ここまで) 61 (追記) (追記ここまで) 62 (追記) void _cdecl autocheck(char *args); (追記ここまで) 58 63 59 64 /****************************************************************** … … 1277 1282 BOOL fSilent = FALSE; 1278 1283 PSZ p; 1284 (追記) PSZ cmd = NULL; (追記ここまで) 1279 1285 1280 1286 _asm push es; … … 1359 1365 f32Parms.fCalcFree = TRUE; 1360 1366 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 (追記) (追記ここまで) 1361 1415 #if 1 1362 1416 if (!DosGetInfoSeg(&sGlob, &sLoc)) … … 1377 1431 if (!ulCacheSectors) 1378 1432 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); (追記ここまで) 1379 1439 1380 1440 _asm pop es; -
branches/fat32-0.10/src/ifs/libc/mem.c
r97 r117 395 395 } 396 396 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 29 29 OBJS=fat32.obj ifsmount.obj ifsfind.obj ifsdir.obj ifsattr.obj & 30 30 ifsfile.obj ifslog.obj ifscache.obj ifsswap.obj ifsmem.obj & 31 ifsea.obj ifslang.obj (削除) (削除ここまで)31 ifsea.obj ifslang.obj (追記) ifsachk.obj (追記ここまで) 32 32 33 33 # helpers.obj -
branches/fat32-0.10/src/partfilt/makefile.wcc
r102 r117 3 3 LNK=wlink op q 4 4 MAPCNV=..\mapsym.awk 5 (追記) _VENDOR=Netlabs (追記ここまで) 6 (追記) _VERSION=0.10a4 (追記ここまで) 7 (追記) FILEVER=@$#$(_VENDOR):$(_VERSION)$#@ (追記ここまで) 8 (追記) DESC="General Partition filter, Deon van der Westhuysen" (追記ここまで) 5 9 6 10 # create OS/2 binaries … … 30 34 @%append $^@ format os2 lx phys 31 35 @%append $^@ name $^*.flt 32 @%append $^@ option description ' (削除) General Partition filter (削除ここまで)'36 @%append $^@ option description '(追記) $(FILEVER) $(DESC) (追記ここまで)' 33 37 #@%append $^@ option mixed1632 34 38 @%append $^@ option quiet -
branches/fat32-0.10/src/ufat32/chkdsk.c
r97 r117 32 32 #define INCL_DOSDEVICES 33 33 #define INCL_DOSDEVIOCTL 34 (追記) #define INCL_LONGLONG (追記ここまで) 34 35 #include <os2.h> 35 36 #include "portable.h" … … 38 39 PRIVATE ULONG ChkDskMain(PCDINFO pCD); 39 40 PRIVATE ULONG MarkVolume(PCDINFO pCD, BOOL fClean); 40 (削除) PRIVATE ULONG ReadSector(PCDINFO pCD, ULONG ulSector, USHORT nSectors, PBYTE pbSector); (削除ここまで)41 41 PRIVATE ULONG CheckFats(PCDINFO pCD); 42 42 PRIVATE ULONG CheckFiles(PCDINFO pCD); … … 46 46 PRIVATE ULONG GetNextCluster(PCDINFO pCD, ULONG ulCluster, BOOL fAllowBad); 47 47 PRIVATE ULONG SetNextCluster(PCDINFO pCD, ULONG ulCluster, ULONG ulNextCluster); 48 (削除) PRIVATE ULONG ReadCluster(PCDINFO pDrive, ULONG ulCluster, PBYTE pbCluster); (削除ここまで)49 48 PRIVATE ULONG GetClusterCount(PCDINFO pCD, ULONG ulCluster, PSZ pszFile); 50 49 PRIVATE BOOL MarkCluster(PCDINFO pCD, ULONG ulCluster, PSZ pszFile); … … 58 57 PRIVATE BOOL OutputToFile(VOID); 59 58 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 (追記) (追記ここまで) 60 77 INT cdecl iShowMessage(PCDINFO pCD, USHORT usNr, USHORT usNumFields, ...); 61 78 PSZ GetOS2Error(USHORT rc); 62 79 63 (削除) static F32PARMS f32Parms (削除ここまで);80 (追記) F32PARMS f32Parms = {0} (追記ここまで); 64 81 static BOOL fToFile; 65 82 … … 73 90 ULONG ulParamSize; 74 91 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 ); 78 96 } 79 97 … … 88 106 ULONG ulParamSize; 89 107 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); 93 112 } 94 113 … … 126 145 ULONG ulDataSize; 127 146 ULONG cbDataLen; 147 (追記) LONGLONG llSize; (追記ここまで) 128 148 129 149 DosError(1); /* Enable hard errors */ 150 (追記) (追記ここまで) 151 (追記) f32Parms.fEAS = TRUE; (追記ここまで) 152 (追記) (追記ここまで) 153 (追記) LoadTranslateTable(); (追記ここまで) 130 154 131 155 TranslateInitDBCSEnv(); … … 175 199 176 200 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 // } 192 215 193 216 if (!strlen(pCD->szDrive)) … … 199 222 pCD->szDrive[1] = ':'; 200 223 } 201 //printf("000\n"); 202 //printf("DosOpen pCD->szDrive=%s\n", pCD->szDrive); 203 rc = DosOpen(pCD->szDrive, 224 rc = DosOpenL(pCD->szDrive, 204 225 &hFile, 205 226 &ulAction, /* action taken */ 206 0L (削除) , (削除ここまで)/* new size */227 0L(追記) L, (追記ここまで) /* new size */ 207 228 0, /* attributes */ 208 229 OPEN_ACTION_OPEN_IF_EXISTS, /* open flags */ … … 210 231 OPEN_FLAGS_WRITE_THROUGH, /* OPEN_FLAGS_NO_CACHE , */ 211 232 0L); 212 (削除) //printf("rc=%lu\n", rc); (削除ここまで)213 (削除) //printf("001\n"); (削除ここまで)214 233 if (rc) 215 234 { … … 221 240 } 222 241 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); 239 256 //rc = DosDevIOCtl2((PVOID)&pCD->fCleanOnBoot, sizeof(pCD->fCleanOnBoot), 240 257 // NULL, 0, 241 258 // FAT32_GETVOLCLEAN, IOCTL_FAT32, hFile); 242 //printf("DosDevIOCtl, rc=%lu\n", rc); 259 pCD->fCleanOnBoot = GetDiskStatus(pCD); 260 243 261 if (pCD->fAutoRecover && pCD->fCleanOnBoot) 244 262 pCD->fAutoRecover = FALSE; … … 246 264 if (pCD->fFix) 247 265 { 248 (削除) //printf("004\n"); (削除ここまで)249 266 rc = DosDevIOCtl(hFile, IOCTL_DISK, DSK_LOCKDRIVE, 250 267 NULL, 0, NULL, … … 260 277 } 261 278 } 262 (削除) //printf("005\n"); (削除ここまで)263 279 264 280 rc = DosQueryFSInfo(pCD->szDrive[0] - '@', FSIL_ALLOC, … … 271 287 pCD->hDisk = hFile; 272 288 273 (削除) //printf("006\n"); (削除ここまで)274 289 rc = ReadSector(pCD, 0, 1, bSector); 275 290 if (rc) … … 280 295 memcpy(&pCD->BootSect, bSector, sizeof (BOOTSECT)); 281 296 282 (削除) //printf("007\n"); (削除ここまで)283 297 rc = ReadSector(pCD, pCD->BootSect.bpb.FSinfoSec, 1, bSector); 284 298 if (rc) … … 288 302 } 289 303 290 (削除) //printf("008\n"); (削除ここまで)291 304 rc = ChkDskMain(pCD); 292 (削除) //printf("009\n"); (削除ここまで)293 305 294 306 if (pCD->fFix) 295 307 { 296 (削除) //printf("0090\n"); (削除ここまで)297 308 rc = DosDevIOCtl(hFile, IOCTL_DISK, DSK_UNLOCKDRIVE, 298 309 NULL, 0, NULL, … … 307 318 DosClose(hFile); 308 319 free(pCD); 309 (削除) (削除ここまで)310 (削除) //printf("010\n"); (削除ここまで)311 320 312 321 DosExit(EXIT_PROCESS, rc); … … 338 347 } 339 348 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 (追記ここまで) 340 371 ULONG ReadCluster(PCDINFO pCD, ULONG ulCluster, PBYTE pbCluster) 341 372 { … … 344 375 ULONG rc; 345 376 346 (削除) //printf("pCD->usClusterSize=%lu\n", ulDataSize); (削除ここまで)347 (削除) //printf("ulCluster=%lu\n", ulCluster); (削除ここまで)348 377 // return DosDevIOCtl2( 349 378 // (PVOID)pbCluster, pCD->usClusterSize, 350 379 // (PVOID)&ulCluster, sizeof(ulCluster), 351 380 // FAT32_READCLUSTER, IOCTL_FAT32, pCD->hDisk); 352 (削除) //printf("240\n"); (削除ここまで)353 381 rc = DosDevIOCtl(pCD->hDisk, IOCTL_FAT32, FAT32_READCLUSTER, 354 382 (PVOID)&ulCluster, sizeof(ulCluster), &dummy1, 355 383 (PVOID)pbCluster, ulDataSize, &dummy2); 356 (削除) //printf("241\n"); (削除ここまで)357 384 return rc; 358 385 } 359 386 #endif 387 388 #if 1 360 389 ULONG ReadSector(PCDINFO pCD, ULONG ulSector, USHORT nSectors, PBYTE pbSector) 361 390 { 362 READSECTORDATA rsd; 363 ULONG ulDataSize; 364 ULONG dummy1 = 0, dummy2 = 0; 365 ULONG 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 472 ULONG ReadSector(PCDINFO pCD, ULONG ulSector, USHORT nSectors, PBYTE pbSector) 473 { 474 READSECTORDATA rsd; 475 ULONG ulDataSize; 476 ULONG dummy1 = 0, dummy2 = 0; 366 477 367 478 rsd.ulSector = ulSector; … … 374 485 // (PVOID)&rsd, sizeof(rsd), 375 486 // 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 493 ULONG 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 576 ULONG 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; 379 602 } 380 603 … … 415 638 return ERROR_NOT_ENOUGH_MEMORY; 416 639 } 417 (削除) //printf("100\n"); (削除ここまで)418 640 419 641 memset(szString, 0, sizeof(szString)); … … 421 643 strncpy(szString, pCD->BootSect.VolumeLabel, 11); 422 644 #else 423 (削除) //printf("101\n"); (削除ここまで)424 645 fGetVolLabel( pCD, szString ); 425 (削除) //printf("102\n"); (削除ここまで)426 646 #endif 427 647 p = szString + strlen(szString); … … 435 655 HIUSHORT(pCD->BootSect.ulVolSerial), LOUSHORT(pCD->BootSect.ulVolSerial)); 436 656 iShowMessage(pCD, 1243, 1, TYPE_STRING, szString); 437 (削除) //printf("103\n"); (削除ここまで)438 657 if (pCD->BootSect.bpb.MediaDescriptor != 0xF8) 439 658 { … … 441 660 pCD->ulErrorCount++; 442 661 } 443 (削除) //printf("104\n"); (削除ここまで)444 662 445 663 rc = CheckFats(pCD); 446 (削除) //printf("105\n"); (削除ここまで)447 664 if (rc) 448 665 { … … 451 668 return rc; 452 669 } 453 (削除) //printf("106\n"); (削除ここまで)454 670 rc = CheckFiles(pCD); 455 (削除) //printf("107\n"); (削除ここまで)456 671 rc = CheckFreeSpace(pCD); 457 (削除) //printf("108\n"); (削除ここまで)458 (削除) (削除ここまで)459 672 460 673 if (pCD->DiskInfo.total_clusters != pCD->ulTotalClusters) … … 469 682 { 470 683 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); 475 687 //rc = DosDevIOCtl2(&ulFreeBlocks, sizeof(ulFreeBlocks), 476 688 // NULL, 0, 477 689 // FAT32_GETFREESPACE, IOCTL_FAT32, pCD->hDisk); 478 (削除) //printf("110\n" (削除ここまで));479 (削除) (削除ここまで)if (!rc)690 (追記) ulFreeBlocks = GetFreeSpace(pCD (追記ここまで)); 691 (追記) // (追記ここまで)if (!rc) 480 692 printf("The correct free space is set to %lu allocation units.\n", 481 693 ulFreeBlocks); 482 (削除) (削除ここまで)else483 (削除) (削除ここまで){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 (追記) // (追記ここまで)} 487 699 } 488 700 else … … 490 702 } 491 703 492 (削除) //printf("111\n"); (削除ここまで)493 704 iShowMessage(pCD, 1361, 1, 494 705 TYPE_DOUBLE, (DOUBLE)pCD->ulTotalClusters * pCD->usClusterSize); … … 508 719 TYPE_LONG, pCD->ulUserFiles); 509 720 510 (削除) //printf("112\n"); (削除ここまで)511 721 if (pCD->ulRecoveredClusters) 512 722 iShowMessage(pCD, 1365, 2, … … 514 724 TYPE_LONG, pCD->ulRecoveredFiles); 515 725 516 (削除) //printf("113\n"); (削除ここまで)517 726 if (pCD->ulLostClusters) 518 727 iShowMessage(pCD, 1359, 1, 519 728 TYPE_DOUBLE, (DOUBLE)pCD->ulLostClusters * pCD->usClusterSize); 520 729 521 (削除) (削除ここまで)522 (削除) //printf("114\n"); (削除ここまで)523 730 iShowMessage(pCD, 1368, 2, 524 731 TYPE_DOUBLE, (DOUBLE)pCD->ulFreeClusters * pCD->usClusterSize, … … 527 734 printf("\n"); 528 735 529 (削除) (削除ここまで)530 (削除) //printf("115\n"); (削除ここまで)531 736 iShowMessage(pCD, 1304, 1, 532 737 TYPE_LONG, (ULONG)pCD->usClusterSize); 533 738 534 (削除) //printf("116\n"); (削除ここまで)535 739 iShowMessage(pCD, 1305, 1, 536 740 TYPE_LONG, pCD->ulTotalClusters); 537 741 538 (削除) //printf("117\n"); (削除ここまで)539 742 iShowMessage(pCD, 1306, 1, 540 743 TYPE_LONG, pCD->ulFreeClusters); 541 744 542 (削除) //printf("118\n"); (削除ここまで)543 745 if (pCD->ulTotalChains > 0) 544 746 printf("\n%u%% of the files and directories are fragmented.\n", 545 747 (USHORT)(pCD->ulFragmentedChains * 100 / pCD->ulTotalChains)); 546 748 547 (削除) //printf("119\n"); (削除ここまで)548 749 if (pCD->ulErrorCount) 549 750 { … … 554 755 printf("Still errors found on disk. Please run Windows 95 ScanDisk!\n"); 555 756 } 556 (削除) (削除ここまで)else if (pCD->fFix)757 (追記) // (追記ここまで)else if (pCD->fFix) 557 758 //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 562 762 return 0; 563 763 } … … 569 769 ULONG dummy = 0; 570 770 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); 576 776 // rc = DosDevIOCtl2( NULL, 0, 577 777 // (PVOID)&fClean, sizeof(fClean), … … 579 779 // IOCTL_FAT32, 580 780 // pCD->hDisk); 781 (追記) rc = MarkDiskStatus(pCD, fClean); (追記ここまで) 581 782 582 783 return rc; … … 608 809 } 609 810 610 (削除) (削除ここまで)611 811 //pSector = halloc(pCD->BootSect.bpb.NumberOfFATs, BLOCK_SIZE); 612 812 pSector = calloc(pCD->BootSect.bpb.NumberOfFATs, BLOCK_SIZE); … … 614 814 return ERROR_NOT_ENOUGH_MEMORY; 615 815 616 (削除) (削除ここまで)617 816 fDiff = FALSE; 618 817 ulCluster = 0L; … … 622 821 USHORT usNew = (USHORT)(ulSector * 100 / pCD->BootSect.bpb.BigSectorsPerFat); 623 822 USHORT nSectors; 624 (削除) (削除ここまで)625 823 626 824 if (!pCD->fPM && !fToFile && usNew != usPerc) … … 673 871 ulCluster++; 674 872 } 675 (削除) (削除ここまで)676 (削除) (削除ここまで)677 873 } 678 874 … … 802 998 else 803 999 { 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); 807 1003 //rc = DosDevIOCtl2(NULL, 0, 808 1004 // (PVOID)&pCD->rgulLost[usIndex], 4, 809 1005 // FAT32_DELETECHAIN, IOCTL_FAT32, pCD->hDisk); 810 if (rc) 1006 rc = DeleteFatChain(pCD, pCD->rgulLost[usIndex]); 1007 if (rc == FALSE) 811 1008 { 812 1009 printf("CHKDSK was unable to delete a lost chain.\n"); … … 1011 1208 strcpy(Mark.szFileName, pbPath); 1012 1209 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); 1016 1213 //rc = DosDevIOCtl2(NULL, 0, 1017 1214 // (PVOID)&Mark, sizeof(Mark), 1018 1215 // FAT32_SETEAS, IOCTL_FAT32, pCD->hDisk); 1216 (追記) rc = GetSetFileEAS(pCD, FAT32_SETEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで) 1019 1217 if (!rc) 1020 1218 printf("This has been corrected.\n"); … … 1053 1251 strcpy(Mark.szFileName, pbPath); 1054 1252 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); 1058 1256 //rc = DosDevIOCtl2(NULL, 0, 1059 1257 // (PVOID)&Mark, sizeof(Mark), 1060 1258 // FAT32_SETEAS, IOCTL_FAT32, pCD->hDisk); 1259 (追記) rc = GetSetFileEAS(pCD, FAT32_SETEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで) 1061 1260 if (!rc) 1062 1261 printf("This has been corrected.\n"); … … 1073 1272 strcpy(Mark.szFileName, pbPath); 1074 1273 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); 1078 1277 //rc = DosDevIOCtl2(NULL, 0, 1079 1278 // (PVOID)&Mark, sizeof(Mark), 1080 1279 // FAT32_SETEAS, IOCTL_FAT32, pCD->hDisk); 1280 (追記) rc = GetSetFileEAS(pCD, FAT32_SETEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで) 1081 1281 if (!rc) 1082 1282 printf("This has been corrected.\n"); … … 1103 1303 memcpy(Mark.szFileName, pbPath, pEA - pbPath); 1104 1304 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); 1108 1308 //rc = DosDevIOCtl2(NULL, 0, 1109 1309 // (PVOID)&Mark, sizeof(Mark), 1110 1310 // FAT32_QUERYEAS, IOCTL_FAT32, pCD->hDisk); 1311 (追記) rc = GetSetFileEAS(pCD, FAT32_QUERYEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで) 1111 1312 if (rc == 2 || rc == 3) 1112 1313 { … … 1150 1351 { 1151 1352 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); 1155 1356 //rc = DosDevIOCtl2(NULL, 0, 1156 1357 // (PVOID)&Mark, sizeof(Mark), 1157 1358 // FAT32_SETEAS, IOCTL_FAT32, pCD->hDisk); 1359 (追記) rc = GetSetFileEAS(pCD, FAT32_SETEAS, (PMARKFILEEASBUF)&Mark); (追記ここまで) 1158 1360 if (!rc) 1159 1361 printf("This has been corrected.\n"); … … 1197 1399 strcat(fs.szFileName, MakeName(pDir, szShortName, sizeof(szShortName))); 1198 1400 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); 1202 1404 //rc = DosDevIOCtl2(NULL, 0, 1203 1405 // (PVOID)&fs, sizeof(fs), 1204 1406 // FAT32_SETFILESIZE, IOCTL_FAT32, pCD->hDisk); 1407 (追記) rc = SetFileSize(pCD, (PFILESIZEDATA)&fs); (追記ここまで) 1205 1408 strcpy( strrchr( fs.szFileName, '\\' ) + 1, szLongName ); 1206 1409 if (rc) … … 1464 1667 pDir = NULL; 1465 1668 1466 (削除) //printf("200\n"); (削除ここまで)1467 (削除) (削除ここまで)1468 1669 pDirStart = malloc(pCD->usClusterSize); 1469 1670 if (!pDirStart) 1470 1671 return ERROR_NOT_ENOUGH_MEMORY; 1471 (削除) //printf("210\n"); (削除ここまで)1472 1672 1473 1673 fFound = FALSE; … … 1475 1675 while (!fFound && ulCluster != FAT_EOF) 1476 1676 { 1477 (削除) //printf("211\n"); (削除ここまで)1478 1677 ReadCluster(pCD, ulCluster, (PBYTE)pDirStart); 1479 (削除) //printf("212\n"); (削除ここまで)1480 1678 pDir = pDirStart; 1481 1679 pDirEnd = (PDIRENTRY)((PBYTE)pDirStart + pCD->usClusterSize); 1482 (削除) //printf("213\n"); (削除ここまで)1483 1680 while (pDir < pDirEnd) 1484 1681 { … … 1487 1684 fFound = TRUE; 1488 1685 memcpy(&DirEntry, pDir, sizeof (DIRENTRY)); 1489 (削除) //printf("xx\n"); (削除ここまで)1490 1686 break; 1491 1687 } … … 1494 1690 if (!fFound) 1495 1691 { 1496 (削除) //printf("220\n"); (削除ここまで)1497 1692 ulCluster = GetNextCluster(pCD, ulCluster, FALSE); 1498 1693 if (!ulCluster) … … 1505 1700 else 1506 1701 memcpy(pszVolLabel, DirEntry.bFileName, 11); 1507 (削除) //printf("230\n"); (削除ここまで)1508 1702 1509 1703 return 0; … … 1549 1743 // FSCTL_FSDNAME, 1550 1744 // 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); 1557 1752 1558 1753 wNameSize = strlen( szLongName ); … … 1574 1769 ULONG ulRet; 1575 1770 1576 (削除) //printf("300\n"); (削除ここまで)1577 1771 ulSector = ulCluster / 128; 1578 1772 if (!ReadFATSector(pCD, ulSector)) 1579 1773 return FAT_EOF; 1580 (削除) //printf("301\n"); (削除ここまで)1581 1774 1582 1775 pulCluster = (PULONG)pCD->pbFATSector + ulCluster % 128; … … 1586 1779 return FAT_EOF; 1587 1780 1588 (削除) //printf("302\n"); (削除ここまで)1589 (削除) (削除ここまで)1590 1781 if (ulRet == FAT_BAD_CLUSTER && fAllowBad) 1591 1782 return ulRet; 1592 (削除) (削除ここまで)1593 (削除) //printf("303\n"); (削除ここまで)1594 1783 1595 1784 if (ulRet >= pCD->ulTotalClusters + 2) … … 1599 1788 return FAT_EOF; 1600 1789 } 1601 (削除) //printf("304\n"); (削除ここまで)1602 1790 1603 1791 return ulRet; … … 1616 1804 1617 1805 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); 1621 1809 //rc = DosDevIOCtl2(NULL, 0, 1622 1810 // (PVOID)&SetCluster, sizeof(SetCluster), 1623 1811 // 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 (追記) (追記ここまで) 1624 1818 if (rc) 1625 1819 return rc; … … 1663 1857 return TRUE; 1664 1858 } 1665 (削除) (削除ここまで)1666 1859 1667 1860 for (usIndex = 0; usIndex < pCD->usLostChains && … … 1711 1904 1712 1905 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); 1716 1909 //rc = DosDevIOCtl2(szRecovered, sizeof(szRecovered), 1717 1910 // (PVOID)&ulCluster, 4, 1718 1911 // FAT32_RECOVERCHAIN, IOCTL_FAT32, pCD->hDisk); 1912 (追記) rc = RecoverChain2(pCD, ulCluster, szRecovered, sizeof(szRecovered)); (追記ここまで) 1719 1913 if (rc) 1720 1914 { -
branches/fat32-0.10/src/ufat32/makefile.wcc
r116 r117 11 11 !ifneq T win32 12 12 # create OS/2 binaries 13 OBJS1=ufat32.obj format.obj os2.obj msg.obj chkdsk.obj (削除) (削除ここまで)13 OBJS1=ufat32.obj format.obj os2.obj msg.obj chkdsk.obj(追記) fatfunc.obj (追記ここまで) 14 14 OBJS2=format.obh os2.obh msg.obh 15 15 COPT=-3s -s -sg -hw -mf -od -zq -q -fp3 -fpi87 -i=. -i=.. -i=..\include -i=$(%WATCOM)\h -i=$(%WATCOM)\h\os2 … … 20 20 OBJS1= 21 21 OBJS2=format.obh win32.obh 22 COPT=-3s -s (削除) -s (削除ここまで)g -hw -mf -od -zq -q -u__OS2__ -i=. -i=.. -i=..\include -i=$(%WATCOM)\h -i=$(%WATCOM)\h\nt22 COPT=-3s -s(追記) (追記ここまで)g -hw -mf -od -zq -q -u__OS2__ -i=. -i=.. -i=..\include -i=$(%WATCOM)\h -i=$(%WATCOM)\h\nt 23 23 TARGETS=fat32fmt.exe 24 24 SYS=nt -
branches/fat32-0.10/src/ufat32/ufat32.c
r97 r117 13 13 { 14 14 short Argc = argc; 15 char **Argv (削除) (削除ここまで);16 char **Envp (削除) (削除ここまで);15 char **Argv(追記) = NULL (追記ここまで); 16 char **Envp(追記) = NULL (追記ここまで); 17 17 char * _Seg16 * _Seg16 p; 18 18 short rc; 19 19 int i, n; 20 20 21 Argv = (char **)malloc( (削除) Argc (削除ここまで)* sizeof(char * _Seg16));21 Argv = (char **)malloc((追記) (Argc + 1) (追記ここまで) * sizeof(char * _Seg16)); 22 22 23 23 for (i = 0, p = argv; i < argc; i++, p++) 24 24 Argv[i] = (char *)(*p); 25 25 26 (削除) for (n = 0, p = envp; *p; n++, p++) (削除ここまで);26 (追記) Argv[argc] = NULL (追記ここまで); 27 27 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)); 29 31 30 32 for (i = 0, p = envp; i < n; i++, p++) 31 33 Envp[i] = (char *)(*p); 34 (追記) (追記ここまで) 35 (追記) Envp[n] = NULL; (追記ここまで) 32 36 33 37 rc = chkdsk(Argc, Argv, Envp); … … 51 55 Argv[i] = (char *)(*p); 52 56 53 for (n = 0, p = envp; (削除) (削除ここまで)*p; n++, p++) ;57 for (n = 0, p = envp; (追記) p && (追記ここまで)*p; n++, p++) ; 54 58 55 59 Envp = (char **)malloc(n * sizeof(char * _Seg16)); -
branches/fat32-0.10/src/util/cachef32.c
r97 r117 92 92 BYTE bPrevPrio; 93 93 94 (削除) (削除ここまで)DoCheckDisk(FALSE);94 (追記) // (追記ここまで)DoCheckDisk(FALSE); 95 95 96 96 InitProg(iArgc, rgArgv); … … 100 100 if (fForeGround) 101 101 { 102 (削除) (削除ここまで)DoCheckDisk(TRUE);102 (追記) // (追記ここまで)DoCheckDisk(TRUE); 103 103 if (!f32Parms.usCacheSize && !f32Parms.fForceLoad ) 104 104 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.