- Timestamp:
- Dec 13, 2008, 2:11:21 PM (17 years ago)
- Author:
- KO Myung-Hun
- Message:
-
Removed unnecessary codes.
- Location:
- branches/fat32-0.9/src
- Files:
-
- 2 edited
- ifscache.c (modified) (3 diffs)
- ifsfile.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/fat32-0.9/src/ifscache.c
r80 r81 479 479 break; 480 480 case TRUE : 481 { 482 BOOL fIdent = FALSE; 483 484 if( fDirty ) 485 { 486 PCACHE pCache; 487 488 pCache = GetAddress(usCBIndex); 489 fIdent = memcmp(p, pCache->bSector, SECTOR_SIZE) == 0; 490 } 491 492 if( !fIdent ) 493 vReplaceSectorInCache(usCBIndex, p, fDirty); 481 vReplaceSectorInCache(usCBIndex, p, fDirty); 494 482 UnlockBuffer(pCacheBase + usCBIndex); 495 483 break; 496 (削除) } (削除ここまで)497 484 } 498 485 p += SECTOR_SIZE; … … 998 985 while (!f32Parms.fInShutDown && !pOptions->fTerminate && 999 986 rc == WAIT_TIMED_OUT) 1000 /* f32Parms.usDirtySectors - f32Parms.usPendingFlush <= f32Parms.usDirtyT (削除) h (削除ここまで)reshold */987 /* f32Parms.usDirtySectors - f32Parms.usPendingFlush <= f32Parms.usDirtyT(追記) (追記ここまで)reshold */ 1001 988 { 1002 989 rc = DevHelp_ProcBlock((ULONG)DoEmergencyFlush, 5000L, 1); … … 1483 1470 memcpy(pTar, pCache->bSector, SECTOR_SIZE); 1484 1471 1485 (削除) /* (削除ここまで)1486 (削除) rgfDirty[usCBIndex] = FALSE; (削除ここまで)1487 (削除) f32Parms.usDirtySectors--; (削除ここまで)1488 (削除) */ (削除ここまで)1489 (削除) (削除ここまで)1490 1472 pBase->fFlushPending = SET; 1491 1473 f32Parms.usPendingFlush++; -
branches/fat32-0.9/src/ifsfile.c
r78 r81 619 619 } 620 620 621 (削除) #if 0 (削除ここまで)622 (削除) /****************************************************************** (削除ここまで)623 (削除) * (削除ここまで)624 (削除) ******************************************************************/ (削除ここまで)625 (削除) int far pascal FS_READ( (削除ここまで)626 (削除) struct sffsi far * psffsi, /* psffsi */ (削除ここまで)627 (削除) struct sffsd far * psffsd, /* psffsd */ (削除ここまで)628 (削除) char far * pData, /* pData */ (削除ここまで)629 (削除) unsigned short far * pLen, /* pLen */ (削除ここまで)630 (削除) unsigned short usIOFlag /* IOflag */ (削除ここまで)631 (削除) ) (削除ここまで)632 (削除) { (削除ここまで)633 (削除) USHORT rc; (削除ここまで)634 (削除) PVOLINFO pVolInfo; (削除ここまで)635 (削除) POPENINFO pOpenInfo = GetOpenInfo(psffsd); (削除ここまで)636 (削除) USHORT usOffset; (削除ここまで)637 (削除) USHORT usBytesAvail; (削除ここまで)638 (削除) USHORT usBytesRead; (削除ここまで)639 (削除) USHORT usBytesToRead; (削除ここまで)640 (削除) PBYTE pbCluster; (削除ここまで)641 (削除) ULONG ulSector; (削除ここまで)642 (削除) USHORT usSectors; (削除ここまで)643 (削除) USHORT usAlign; (削除ここまで)644 (削除) ULONG ulClusterSector; (削除ここまで)645 (削除) USHORT usClusterOffset; (削除ここまで)646 (削除) (削除ここまで)647 (削除) usBytesToRead = *pLen; (削除ここまで)648 (削除) *pLen = 0; (削除ここまで)649 (削除) pbCluster = NULL; (削除ここまで)650 (削除) (削除ここまで)651 (削除) if (f32Parms.fMessageActive & LOG_FS) (削除ここまで)652 (削除) Message("FS_READ, %u bytes at offset %ld", (削除ここまで)653 (削除) usBytesToRead, psffsi->sfi_position); (削除ここまで)654 (削除) (削除ここまで)655 (削除) pVolInfo = GetVolInfo(psffsi->sfi_hVPB); (削除ここまで)656 (削除) if (IsDriveLocked(pVolInfo)) (削除ここまで)657 (削除) { (削除ここまで)658 (削除) rc = ERROR_DRIVE_LOCKED; (削除ここまで)659 (削除) goto FS_READEXIT; (削除ここまで)660 (削除) } (削除ここまで)661 (削除) (削除ここまで)662 (削除) if (psffsi->sfi_mode & OPEN_ACCESS_WRITEONLY) (削除ここまで)663 (削除) { (削除ここまで)664 (削除) rc = ERROR_ACCESS_DENIED; (削除ここまで)665 (削除) goto FS_READEXIT; (削除ここまで)666 (削除) } (削除ここまで)667 (削除) (削除ここまで)668 (削除) if (!usBytesToRead) (削除ここまで)669 (削除) { (削除ここまで)670 (削除) rc = 0; (削除ここまで)671 (削除) goto FS_READEXIT; (削除ここまで)672 (削除) } (削除ここまで)673 (削除) (削除ここまで)674 (削除) rc = MY_PROBEBUF(PB_OPWRITE, pData, usBytesToRead); (削除ここまで)675 (削除) if (rc) (削除ここまで)676 (削除) { (削除ここまで)677 (削除) Message("Protection VIOLATION in FS_READ! (SYS%d)", rc); (削除ここまで)678 (削除) return rc; (削除ここまで)679 (削除) } (削除ここまで)680 (削除) (削除ここまで)681 (削除) pbCluster = malloc(pVolInfo->usClusterSize); (削除ここまで)682 (削除) if (!pbCluster) (削除ここまで)683 (削除) { (削除ここまで)684 (削除) rc = ERROR_NOT_ENOUGH_MEMORY; (削除ここまで)685 (削除) goto FS_READEXIT; (削除ここまで)686 (削除) } (削除ここまで)687 (削除) (削除ここまで)688 (削除) usBytesRead = 0; (削除ここまで)689 (削除) (削除ここまで)690 (削除) if (psffsi->sfi_mode & OPEN_FLAGS_DASD) (削除ここまで)691 (削除) { (削除ここまで)692 (削除) ulSector = psffsi->sfi_position; (削除ここまで)693 (削除) (削除ここまで)694 (削除) if (!pOpenInfo->fSectorMode) (削除ここまで)695 (削除) ulSector /= SECTOR_SIZE; (削除ここまで)696 (削除) else (削除ここまで)697 (削除) usBytesToRead *= SECTOR_SIZE; (削除ここまで)698 (削除) (削除ここまで)699 (削除) if (ulSector >= pVolInfo->BootSect.bpb.BigTotalSectors) (削除ここまで)700 (削除) { (削除ここまで)701 (削除) rc = ERROR_SECTOR_NOT_FOUND; (削除ここまで)702 (削除) goto FS_READEXIT; (削除ここまで)703 (削除) } (削除ここまで)704 (削除) (削除ここまで)705 (削除) while (usBytesRead < usBytesToRead && (削除ここまで)706 (削除) ulSector < pVolInfo->BootSect.bpb.BigTotalSectors) (削除ここまで)707 (削除) { (削除ここまで)708 (削除) (削除ここまで)709 (削除) if (!pOpenInfo->fSectorMode) (削除ここまで)710 (削除) { (削除ここまで)711 (削除) usOffset = (USHORT)(psffsi->sfi_position % SECTOR_SIZE); (削除ここまで)712 (削除) (削除ここまで)713 (削除) usAlign = ( usBytesToRead - usBytesRead ); (削除ここまで)714 (削除) if( usOffset ) (削除ここまで)715 (削除) { (削除ここまで)716 (削除) if( usAlign <= ( USHORT )( SECTOR_SIZE - usOffset )) (削除ここまで)717 (削除) usAlign = 0; (削除ここまで)718 (削除) else (削除ここまで)719 (削除) usAlign -= SECTOR_SIZE - usOffset; (削除ここまで)720 (削除) } (削除ここまで)721 (削除) (削除ここまで)722 (削除) usSectors = ( USHORT )((( ULONG )usAlign + SECTOR_SIZE - 1 ) / SECTOR_SIZE ); (削除ここまで)723 (削除) if( usOffset ) (削除ここまで)724 (削除) usSectors++; (削除ここまで)725 (削除) } (削除ここまで)726 (削除) else (削除ここまで)727 (削除) { (削除ここまで)728 (削除) usOffset = 0; (削除ここまで)729 (削除) usSectors = ( usBytesToRead - usBytesRead ) / SECTOR_SIZE; (削除ここまで)730 (削除) } (削除ここまで)731 (削除) (削除ここまで)732 (削除) if(( ULONG )usSectors > ( pVolInfo->BootSect.bpb.BigTotalSectors - ulSector )) (削除ここまで)733 (削除) usSectors = ( USHORT )( pVolInfo->BootSect.bpb.BigTotalSectors - ulSector ); (削除ここまで)734 (削除) (削除ここまで)735 (削除) if( usSectors > pVolInfo->BootSect.bpb.SectorsPerCluster ) (削除ここまで)736 (削除) usSectors = pVolInfo->BootSect.bpb.SectorsPerCluster; (削除ここまで)737 (削除) (削除ここまで)738 (削除) usBytesAvail = (usSectors * pVolInfo->BootSect.bpb.BytesPerSector) - usOffset; (削除ここまで)739 (削除) if (usBytesAvail > (usBytesToRead - usBytesRead)) (削除ここまで)740 (削除) usBytesAvail = usBytesToRead - usBytesRead; (削除ここまで)741 (削除) (削除ここまで)742 (削除) #ifdef CALL_YIELD (削除ここまで)743 (削除) Yield(); (削除ここまで)744 (削除) #endif (削除ここまで)745 (削除) (削除ここまで)746 (削除) rc = ReadSector(pVolInfo, ulSector, usSectors, pbCluster, usIOFlag); (削除ここまで)747 (削除) if (rc) (削除ここまで)748 (削除) { (削除ここまで)749 (削除) goto FS_READEXIT; (削除ここまで)750 (削除) } (削除ここまで)751 (削除) (削除ここまで)752 (削除) memcpy(pData, pbCluster + usOffset, usBytesAvail); (削除ここまで)753 (削除) (削除ここまで)754 (削除) usBytesRead += usBytesAvail; (削除ここまで)755 (削除) if (!pOpenInfo->fSectorMode) (削除ここまで)756 (削除) psffsi->sfi_position += usBytesAvail; (削除ここまで)757 (削除) else (削除ここまで)758 (削除) psffsi->sfi_position += usSectors; (削除ここまで)759 (削除) pData += usBytesAvail; (削除ここまで)760 (削除) ulSector += usSectors; (削除ここまで)761 (削除) } (削除ここまで)762 (削除) (削除ここまで)763 (削除) if (!pOpenInfo->fSectorMode) (削除ここまで)764 (削除) *pLen = usBytesRead; (削除ここまで)765 (削除) else (削除ここまで)766 (削除) *pLen = usBytesRead / SECTOR_SIZE; (削除ここまで)767 (削除) psffsi->sfi_tstamp |= ST_SREAD | ST_PREAD; (削除ここまで)768 (削除) rc = 0; (削除ここまで)769 (削除) goto FS_READEXIT; (削除ここまで)770 (削除) } (削除ここまで)771 (削除) (削除ここまで)772 (削除) pOpenInfo->pSHInfo->fMustCommit = TRUE; (削除ここまで)773 (削除) if (pOpenInfo->ulCurCluster == FAT_EOF) (削除ここまで)774 (削除) pOpenInfo->ulCurCluster = PositionToOffset(pVolInfo, pOpenInfo, psffsi->sfi_position); (削除ここまで)775 (削除) (削除ここまで)776 (削除) while (usBytesRead < usBytesToRead && (削除ここまで)777 (削除) pOpenInfo->ulCurCluster != FAT_EOF && (削除ここまで)778 (削除) psffsi->sfi_position < psffsi->sfi_size) (削除ここまで)779 (削除) { (削除ここまで)780 (削除) (削除ここまで)781 (削除) #ifdef CALL_YIELD (削除ここまで)782 (削除) Yield(); (削除ここまで)783 (削除) #endif (削除ここまで)784 (削除) (削除ここまで)785 (削除) ulClusterSector = pVolInfo->ulStartOfData + (削除ここまで)786 (削除) ( pOpenInfo->ulCurCluster - 2) * pVolInfo->BootSect.bpb.SectorsPerCluster; (削除ここまで)787 (削除) (削除ここまで)788 (削除) usClusterOffset = (USHORT)(psffsi->sfi_position % pVolInfo->usClusterSize); (削除ここまで)789 (削除) ulSector = ulClusterSector + ( usClusterOffset / SECTOR_SIZE ); (削除ここまで)790 (削除) usOffset = usClusterOffset % SECTOR_SIZE; (削除ここまで)791 (削除) (削除ここまで)792 (削除) usAlign = ( usBytesToRead - usBytesRead ); (削除ここまで)793 (削除) if( usOffset ) (削除ここまで)794 (削除) { (削除ここまで)795 (削除) if( usAlign <= ( USHORT )( SECTOR_SIZE - usOffset )) (削除ここまで)796 (削除) usAlign = 0; (削除ここまで)797 (削除) else (削除ここまで)798 (削除) usAlign -= SECTOR_SIZE - usOffset; (削除ここまで)799 (削除) } (削除ここまで)800 (削除) (削除ここまで)801 (削除) usSectors = ( USHORT )((( ULONG ) usAlign + SECTOR_SIZE - 1 ) / SECTOR_SIZE ); (削除ここまで)802 (削除) if( usOffset ) (削除ここまで)803 (削除) usSectors++; (削除ここまで)804 (削除) (削除ここまで)805 (削除) if( ulSector + usSectors > ulClusterSector + pVolInfo->BootSect.bpb.SectorsPerCluster ) (削除ここまで)806 (削除) usSectors = ( USHORT )( ulClusterSector + pVolInfo->BootSect.bpb.SectorsPerCluster - ulSector ); (削除ここまで)807 (削除) (削除ここまで)808 (削除) usBytesAvail = (usSectors * pVolInfo->BootSect.bpb.BytesPerSector) - usOffset; (削除ここまで)809 (削除) if (usBytesAvail > (usBytesToRead - usBytesRead)) (削除ここまで)810 (削除) usBytesAvail = usBytesToRead - usBytesRead; (削除ここまで)811 (削除) (削除ここまで)812 (削除) if ((ULONG)usBytesAvail > psffsi->sfi_size - psffsi->sfi_position) (削除ここまで)813 (削除) usBytesAvail = (USHORT)(psffsi->sfi_size - psffsi->sfi_position); (削除ここまで)814 (削除) (削除ここまで)815 (削除) rc = ReadSector(pVolInfo, ulSector, usSectors, pbCluster, usIOFlag ); (削除ここまで)816 (削除) if (rc) (削除ここまで)817 (削除) { (削除ここまで)818 (削除) goto FS_READEXIT; (削除ここまで)819 (削除) } (削除ここまで)820 (削除) (削除ここまで)821 (削除) memcpy(pData, pbCluster + usOffset, usBytesAvail); (削除ここまで)822 (削除) (削除ここまで)823 (削除) usBytesRead += usBytesAvail; (削除ここまで)824 (削除) psffsi->sfi_position += usBytesAvail; (削除ここまで)825 (削除) pData += usBytesAvail; (削除ここまで)826 (削除) (削除ここまで)827 (削除) if (usClusterOffset + usBytesAvail >= pVolInfo->usClusterSize) (削除ここまで)828 (削除) { (削除ここまで)829 (削除) pOpenInfo->ulCurCluster = GetNextCluster(pVolInfo, pOpenInfo->ulCurCluster); (削除ここまで)830 (削除) if (!pOpenInfo->ulCurCluster) (削除ここまで)831 (削除) pOpenInfo->ulCurCluster = FAT_EOF; (削除ここまで)832 (削除) } (削除ここまで)833 (削除) } (削除ここまで)834 (削除) *pLen = usBytesRead; (削除ここまで)835 (削除) (削除ここまで)836 (削除) psffsi->sfi_tstamp |= ST_SREAD | ST_PREAD; (削除ここまで)837 (削除) rc = 0; (削除ここまで)838 (削除) (削除ここまで)839 (削除) FS_READEXIT: (削除ここまで)840 (削除) (削除ここまで)841 (削除) if( pbCluster ) (削除ここまで)842 (削除) free( pbCluster ); (削除ここまで)843 (削除) (削除ここまで)844 (削除) if (f32Parms.fMessageActive & LOG_FS) (削除ここまで)845 (削除) Message("FS_READ returned %u (%u bytes read)", rc, *pLen); (削除ここまで)846 (削除) return rc; (削除ここまで)847 (削除) } (削除ここまで)848 (削除) (削除ここまで)849 (削除) (削除ここまで)850 (削除) /****************************************************************** (削除ここまで)851 (削除) * (削除ここまで)852 (削除) ******************************************************************/ (削除ここまで)853 (削除) int far pascal FS_WRITE( (削除ここまで)854 (削除) struct sffsi far * psffsi, /* psffsi */ (削除ここまで)855 (削除) struct sffsd far * psffsd, /* psffsd */ (削除ここまで)856 (削除) char far * pData, /* pData */ (削除ここまで)857 (削除) unsigned short far * pLen, /* pLen */ (削除ここまで)858 (削除) unsigned short usIOFlag /* IOflag */ (削除ここまで)859 (削除) ) (削除ここまで)860 (削除) { (削除ここまで)861 (削除) USHORT rc; (削除ここまで)862 (削除) PVOLINFO pVolInfo; (削除ここまで)863 (削除) POPENINFO pOpenInfo = GetOpenInfo(psffsd); (削除ここまで)864 (削除) USHORT usOffset; (削除ここまで)865 (削除) USHORT usBytesAvail; (削除ここまで)866 (削除) USHORT usBytesWritten; (削除ここまで)867 (削除) USHORT usBytesToWrite; (削除ここまで)868 (削除) PBYTE pbCluster; (削除ここまで)869 (削除) ULONG ulOldSize; (削除ここまで)870 (削除) ULONG ulSector; (削除ここまで)871 (削除) USHORT usSectors; (削除ここまで)872 (削除) USHORT usAlign; (削除ここまで)873 (削除) ULONG ulClusterSector; (削除ここまで)874 (削除) USHORT usClusterOffset; (削除ここまで)875 (削除) (削除ここまで)876 (削除) usBytesToWrite = *pLen; (削除ここまで)877 (削除) *pLen = 0; (削除ここまで)878 (削除) pbCluster = NULL; (削除ここまで)879 (削除) (削除ここまで)880 (削除) if (f32Parms.fMessageActive & LOG_FS) (削除ここまで)881 (削除) Message("FS_WRITE, %u bytes at offset %ld, ioflag %X, size = %lu", (削除ここまで)882 (削除) usBytesToWrite, psffsi->sfi_position, usIOFlag, psffsi->sfi_size); (削除ここまで)883 (削除) (削除ここまで)884 (削除) pVolInfo = GetVolInfo(psffsi->sfi_hVPB); (削除ここまで)885 (削除) if (IsDriveLocked(pVolInfo)) (削除ここまで)886 (削除) { (削除ここまで)887 (削除) rc = ERROR_DRIVE_LOCKED; (削除ここまで)888 (削除) goto FS_WRITEEXIT; (削除ここまで)889 (削除) } (削除ここまで)890 (削除) (削除ここまで)891 (削除) if (pVolInfo->fWriteProtected) (削除ここまで)892 (削除) { (削除ここまで)893 (削除) rc = ERROR_WRITE_PROTECT; (削除ここまで)894 (削除) goto FS_WRITEEXIT; (削除ここまで)895 (削除) } (削除ここまで)896 (削除) (削除ここまで)897 (削除) if (psffsi->sfi_mode & OPEN_FLAGS_DASD) (削除ここまで)898 (削除) { (削除ここまで)899 (削除) rc = ERROR_NOT_SUPPORTED; (削除ここまで)900 (削除) goto FS_WRITEEXIT; (削除ここまで)901 (削除) } (削除ここまで)902 (削除) (削除ここまで)903 (削除) if (!(psffsi->sfi_mode & OPEN_ACCESS_WRITEONLY) && (削除ここまで)904 (削除) !(psffsi->sfi_mode & OPEN_ACCESS_READWRITE)) (削除ここまで)905 (削除) { (削除ここまで)906 (削除) rc = ERROR_ACCESS_DENIED; (削除ここまで)907 (削除) goto FS_WRITEEXIT; (削除ここまで)908 (削除) } (削除ここまで)909 (削除) (削除ここまで)910 (削除) if (!usBytesToWrite) (削除ここまで)911 (削除) { (削除ここまで)912 (削除) rc = 0; (削除ここまで)913 (削除) goto FS_WRITEEXIT; (削除ここまで)914 (削除) } (削除ここまで)915 (削除) (削除ここまで)916 (削除) rc = MY_PROBEBUF(PB_OPREAD, pData, usBytesToWrite); (削除ここまで)917 (削除) if (rc) (削除ここまで)918 (削除) { (削除ここまで)919 (削除) Message("Protection VIOLATION in FS_WRITE! (SYS%d)", rc); (削除ここまで)920 (削除) goto FS_WRITEEXIT; (削除ここまで)921 (削除) } (削除ここまで)922 (削除) (削除ここまで)923 (削除) pOpenInfo->pSHInfo->fMustCommit = TRUE; (削除ここまで)924 (削除) (削除ここまで)925 (削除) /* (削除ここまで)926 (削除) calculate size whereby old clusters must be read (削除ここまで)927 (削除) */ (削除ここまで)928 (削除) ulOldSize = psffsi->sfi_size / SECTOR_SIZE; (削除ここまで)929 (削除) if (psffsi->sfi_size % SECTOR_SIZE) (削除ここまで)930 (削除) ulOldSize++; (削除ここまで)931 (削除) ulOldSize *= SECTOR_SIZE; (削除ここまで)932 (削除) (削除ここまで)933 (削除) /* (削除ここまで)934 (削除) No writes if file is larger than 7FFFFFFF (= 2Gb) (削除ここまで)935 (削除) */ (削除ここまで)936 (削除) (削除ここまで)937 (削除) if (psffsi->sfi_position >= LONG_MAX) (削除ここまで)938 (削除) { (削除ここまで)939 (削除) rc = 0; (削除ここまで)940 (削除) goto FS_WRITEEXIT; (削除ここまで)941 (削除) } (削除ここまで)942 (削除) (削除ここまで)943 (削除) if ((ULONG)LONG_MAX - psffsi->sfi_position < (ULONG)usBytesToWrite) (削除ここまで)944 (削除) usBytesToWrite = (USHORT)((ULONG)LONG_MAX - psffsi->sfi_position); (削除ここまで)945 (削除) (削除ここまで)946 (削除) if (psffsi->sfi_position + usBytesToWrite > psffsi->sfi_size) (削除ここまで)947 (削除) { (削除ここまで)948 (削除) ULONG ulLast = FAT_EOF; (削除ここまで)949 (削除) (削除ここまで)950 (削除) if (pOpenInfo->ulCurCluster == FAT_EOF && (削除ここまで)951 (削除) psffsi->sfi_position == psffsi->sfi_size && (削除ここまで)952 (削除) !(psffsi->sfi_size % pVolInfo->usClusterSize)) (削除ここまで)953 (削除) ulLast = pOpenInfo->pSHInfo->ulLastCluster; (削除ここまで)954 (削除) (削除ここまで)955 (削除) rc = NewSize(pVolInfo, psffsi, psffsd, (削除ここまで)956 (削除) psffsi->sfi_position + usBytesToWrite, usIOFlag); (削除ここまで)957 (削除) if (rc) (削除ここまで)958 (削除) goto FS_WRITEEXIT; (削除ここまで)959 (削除) (削除ここまで)960 (削除) if (ulLast != FAT_EOF) (削除ここまで)961 (削除) { (削除ここまで)962 (削除) pOpenInfo->ulCurCluster = GetNextCluster(pVolInfo, ulLast); (削除ここまで)963 (削除) if (!pOpenInfo->ulCurCluster) (削除ここまで)964 (削除) pOpenInfo->ulCurCluster = FAT_EOF; (削除ここまで)965 (削除) (削除ここまで)966 (削除) if (pOpenInfo->ulCurCluster == FAT_EOF) (削除ここまで)967 (削除) { (削除ここまで)968 (削除) Message("FS_WRITE (INIT) No next cluster available!"); (削除ここまで)969 (削除) CritMessage("FAT32: FS_WRITE (INIT) No next cluster available!"); (削除ここまで)970 (削除) } (削除ここまで)971 (削除) } (削除ここまで)972 (削除) } (削除ここまで)973 (削除) (削除ここまで)974 (削除) if (pOpenInfo->ulCurCluster == FAT_EOF) (削除ここまで)975 (削除) pOpenInfo->ulCurCluster = PositionToOffset(pVolInfo, pOpenInfo, psffsi->sfi_position); (削除ここまで)976 (削除) (削除ここまで)977 (削除) if (pOpenInfo->ulCurCluster == FAT_EOF) (削除ここまで)978 (削除) { (削除ここまで)979 (削除) Message("FS_WRITE (INIT2) No next cluster available!"); (削除ここまで)980 (削除) CritMessage("FAT32: FS_WRITE (INIT2) No next cluster available!"); (削除ここまで)981 (削除) return 6; (削除ここまで)982 (削除) } (削除ここまで)983 (削除) (削除ここまで)984 (削除) pbCluster = malloc(pVolInfo->usClusterSize); (削除ここまで)985 (削除) if (!pbCluster) (削除ここまで)986 (削除) { (削除ここまで)987 (削除) rc = ERROR_NOT_ENOUGH_MEMORY; (削除ここまで)988 (削除) goto FS_WRITEEXIT; (削除ここまで)989 (削除) } (削除ここまで)990 (削除) (削除ここまで)991 (削除) usBytesWritten = 0; (削除ここまで)992 (削除) while (usBytesWritten < usBytesToWrite) (削除ここまで)993 (削除) { (削除ここまで)994 (削除) #ifdef CALL_YIELD (削除ここまで)995 (削除) Yield(); (削除ここまで)996 (削除) #endif (削除ここまで)997 (削除) (削除ここまで)998 (削除) ulClusterSector = pVolInfo->ulStartOfData + (削除ここまで)999 (削除) ( pOpenInfo->ulCurCluster - 2) * pVolInfo->BootSect.bpb.SectorsPerCluster; (削除ここまで)1000 (削除) (削除ここまで)1001 (削除) usClusterOffset = (USHORT)(psffsi->sfi_position % pVolInfo->usClusterSize); (削除ここまで)1002 (削除) ulSector = ulClusterSector + ( usClusterOffset / SECTOR_SIZE ); (削除ここまで)1003 (削除) usOffset = usClusterOffset % SECTOR_SIZE; (削除ここまで)1004 (削除) (削除ここまで)1005 (削除) usAlign = ( usBytesToWrite - usBytesWritten ); (削除ここまで)1006 (削除) if( usOffset ) (削除ここまで)1007 (削除) { (削除ここまで)1008 (削除) if( usAlign <= ( USHORT )( SECTOR_SIZE - usOffset )) (削除ここまで)1009 (削除) usAlign = 0; (削除ここまで)1010 (削除) else (削除ここまで)1011 (削除) usAlign -= SECTOR_SIZE - usOffset; (削除ここまで)1012 (削除) } (削除ここまで)1013 (削除) (削除ここまで)1014 (削除) usSectors = ( USHORT )((( ULONG ) usAlign + SECTOR_SIZE - 1 ) / SECTOR_SIZE ); (削除ここまで)1015 (削除) if( usOffset ) (削除ここまで)1016 (削除) usSectors++; (削除ここまで)1017 (削除) (削除ここまで)1018 (削除) if( ulSector + usSectors > ulClusterSector + pVolInfo->BootSect.bpb.SectorsPerCluster ) (削除ここまで)1019 (削除) usSectors = ( USHORT )( ulClusterSector + pVolInfo->BootSect.bpb.SectorsPerCluster - ulSector ); (削除ここまで)1020 (削除) (削除ここまで)1021 (削除) usBytesAvail = (usSectors * pVolInfo->BootSect.bpb.BytesPerSector) - usOffset; (削除ここまで)1022 (削除) if (usBytesAvail > (usBytesToWrite - usBytesWritten)) (削除ここまで)1023 (削除) usBytesAvail = usBytesToWrite - usBytesWritten; (削除ここまで)1024 (削除) (削除ここまで)1025 (削除) usAlign = usBytesAvail; (削除ここまで)1026 (削除) if( usOffset ) (削除ここまで)1027 (削除) { (削除ここまで)1028 (削除) if( usAlign <= ( USHORT )( SECTOR_SIZE - usOffset )) (削除ここまで)1029 (削除) usAlign = 0; (削除ここまで)1030 (削除) else (削除ここまで)1031 (削除) usAlign -= SECTOR_SIZE - usOffset; (削除ここまで)1032 (削除) } (削除ここまで)1033 (削除) (削除ここまで)1034 (削除) if( usOffset || ( usAlign % SECTOR_SIZE )) (削除ここまで)1035 (削除) { (削除ここまで)1036 (削除) if( psffsi->sfi_position < ulOldSize ) (削除ここまで)1037 (削除) { (削除ここまで)1038 (削除) #if 0 (削除ここまで)1039 (削除) rc = ReadSector(pVolInfo, ulSector, usSectors, pbCluster, usIOFlag ); (削除ここまで)1040 (削除) if (rc) (削除ここまで)1041 (削除) { (削除ここまで)1042 (削除) goto FS_WRITEEXIT; (削除ここまで)1043 (削除) } (削除ここまで)1044 (削除) #else (削除ここまで)1045 (削除) if( usOffset ) (削除ここまで)1046 (削除) { (削除ここまで)1047 (削除) rc = ReadSector(pVolInfo, ulSector, 1, pbCluster, usIOFlag ); (削除ここまで)1048 (削除) if (rc) (削除ここまで)1049 (削除) { (削除ここまで)1050 (削除) goto FS_WRITEEXIT; (削除ここまで)1051 (削除) } (削除ここまで)1052 (削除) } (削除ここまで)1053 (削除) (削除ここまで)1054 (削除) if( usAlign % SECTOR_SIZE ) (削除ここまで)1055 (削除) { (削除ここまで)1056 (削除) rc = ReadSector(pVolInfo, ulSector + usSectors - 1, 1, pbCluster + ( usSectors - 1 ) * SECTOR_SIZE, usIOFlag ); (削除ここまで)1057 (削除) if (rc) (削除ここまで)1058 (削除) { (削除ここまで)1059 (削除) goto FS_WRITEEXIT; (削除ここまで)1060 (削除) } (削除ここまで)1061 (削除) } (削除ここまで)1062 (削除) #endif (削除ここまで)1063 (削除) } (削除ここまで)1064 (削除) else (削除ここまで)1065 (削除) memset(pbCluster, 0, pVolInfo->usClusterSize); (削除ここまで)1066 (削除) } (削除ここまで)1067 (削除) (削除ここまで)1068 (削除) memcpy(pbCluster + usOffset, pData, usBytesAvail); (削除ここまで)1069 (削除) (削除ここまで)1070 (削除) rc = WriteSector( pVolInfo, ulSector, usSectors, pbCluster, usIOFlag ); (削除ここまで)1071 (削除) if (rc) (削除ここまで)1072 (削除) { (削除ここまで)1073 (削除) goto FS_WRITEEXIT; (削除ここまで)1074 (削除) } (削除ここまで)1075 (削除) (削除ここまで)1076 (削除) usBytesWritten += usBytesAvail; (削除ここまで)1077 (削除) psffsi->sfi_position += usBytesAvail; (削除ここまで)1078 (削除) if (psffsi->sfi_size < psffsi->sfi_position) (削除ここまで)1079 (削除) psffsi->sfi_size = psffsi->sfi_position; (削除ここまで)1080 (削除) pData += usBytesAvail; (削除ここまで)1081 (削除) (削除ここまで)1082 (削除) if (usClusterOffset + usBytesAvail >= pVolInfo->usClusterSize) (削除ここまで)1083 (削除) { (削除ここまで)1084 (削除) pOpenInfo->ulCurCluster = GetNextCluster( pVolInfo, pOpenInfo->ulCurCluster); (削除ここまで)1085 (削除) if (!pOpenInfo->ulCurCluster) (削除ここまで)1086 (削除) pOpenInfo->ulCurCluster = FAT_EOF; (削除ここまで)1087 (削除) if (pOpenInfo->ulCurCluster == FAT_EOF && usBytesWritten < usBytesToWrite) (削除ここまで)1088 (削除) { (削除ここまで)1089 (削除) Message("FS_WRITE (LOOP) No next cluster available!, (still %u bytes to write)", usBytesToWrite - usBytesWritten); (削除ここまで)1090 (削除) CritMessage("FAT32: FS_WRITE (LOOP) No next cluster available! (still %u bytes to write)", usBytesToWrite - usBytesWritten); (削除ここまで)1091 (削除) *pLen = usBytesWritten; (削除ここまで)1092 (削除) rc = ERROR_DISK_FULL; (削除ここまで)1093 (削除) goto FS_WRITEEXIT; (削除ここまで)1094 (削除) } (削除ここまで)1095 (削除) } (削除ここまで)1096 (削除) } (削除ここまで)1097 (削除) (削除ここまで)1098 (削除) *pLen = usBytesWritten; (削除ここまで)1099 (削除) (削除ここまで)1100 (削除) if (usBytesWritten) (削除ここまで)1101 (削除) { (削除ここまで)1102 (削除) psffsi->sfi_tstamp |= ST_SWRITE | ST_PWRITE; (削除ここまで)1103 (削除) pOpenInfo->fCommitAttr = TRUE; (削除ここまで)1104 (削除) pOpenInfo->pSHInfo->bAttr |= FILE_ARCHIVED; (削除ここまで)1105 (削除) psffsi->sfi_DOSattr |= FILE_ARCHIVED; (削除ここまで)1106 (削除) } (削除ここまで)1107 (削除) (削除ここまで)1108 (削除) (削除ここまで)1109 (削除) if (usIOFlag & DVIO_OPWRTHRU) (削除ここまで)1110 (削除) rc = FS_COMMIT(FS_COMMIT_ONE, usIOFlag, psffsi, psffsd); (削除ここまで)1111 (削除) else (削除ここまで)1112 (削除) rc = 0; (削除ここまで)1113 (削除) (削除ここまで)1114 (削除) FS_WRITEEXIT: (削除ここまで)1115 (削除) if( pbCluster ) (削除ここまで)1116 (削除) free( pbCluster ); (削除ここまで)1117 (削除) (削除ここまで)1118 (削除) if (f32Parms.fMessageActive & LOG_FS) (削除ここまで)1119 (削除) Message("FS_WRITE returned %u (%u bytes written)", rc, *pLen); (削除ここまで)1120 (削除) return rc; (削除ここまで)1121 (削除) } (削除ここまで)1122 (削除) #else (削除ここまで)1123 621 /****************************************************************** 1124 622 * … … 1988 1486 return rc; 1989 1487 } 1990 (削除) #endif (削除ここまで)1991 1488 1992 1489 /******************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.