diff -r 597aaf25e343 -r e7d2d738d3c2 userlibandfileserver/fileserver/smassstorage/cmassstoragemountcb.cpp --- a/userlibandfileserver/fileserver/smassstorage/cmassstoragemountcb.cpp Fri Mar 12 15:50:11 2010 +0200 +++ b/userlibandfileserver/fileserver/smassstorage/cmassstoragemountcb.cpp Mon Mar 15 12:45:50 2010 +0200 @@ -23,10 +23,9 @@ #include #include #include "cmassstoragemountcb.h" +#include "cusbmassstoragecontroller.h" #include "cmassstoragefilesystem.h" -#include "drivemanager.h" #include "massstoragedebug.h" -#include "massstorageutil.h" CMassStorageMountCB::CMassStorageMountCB(const RArray& aDriveMapping) : iDriveMapping(aDriveMapping) @@ -214,281 +213,6 @@ delete hDes; } -/** -Make sure that the file system is fat. -*/ -TBool CMassStorageMountCB::ValidateBootSector() - { - __FNLOG("CMassStorageMountCB::ValidateBootSector"); - - TFatBootSector bootSector; - TInt r=ReadBootSector(bootSector); - __PRINT1(_L("CMassStorageMountCB::MountL - ReadBootSector returned %d"),r); - if (r != KErrNone) - { - return EFalse; - } - - __PRINT(_L("\nBootSector info")); - __PRINT8BIT1(_L("FAT type = %S"),bootSector.FileSysType()); - __PRINT8BIT1(_L("Vendor ID = %S"),bootSector.VendorId()); - __PRINT1(_L("BytesPerSector %d"),bootSector.BytesPerSector()); - __PRINT1(_L("SectorsPerCluster %d"),bootSector.SectorsPerCluster()); - __PRINT1(_L("ReservedSectors %d"),bootSector.ReservedSectors()); - __PRINT1(_L("NumberOfFats %d"),bootSector.NumberOfFats()); - __PRINT1(_L("RootDirEntries %d"),bootSector.RootDirEntries()); - __PRINT1(_L("Total Sectors = %d"),bootSector.TotalSectors()); - __PRINT1(_L("MediaDescriptor = 0x%x"),bootSector.MediaDescriptor()); - __PRINT1(_L("FatSectors %d"),bootSector.FatSectors()); - __PRINT1(_L("SectorsPerTrack %d"),bootSector.SectorsPerTrack()); - __PRINT1(_L("NumberOfHeads %d"),bootSector.NumberOfHeads()); - __PRINT1(_L("HugeSectors %d"),bootSector.HugeSectors()); - __PRINT1(_L("Fat32 Sectors %d"),bootSector.FatSectors32()); - __PRINT1(_L("Fat32 Flags %d"),bootSector.FATFlags()); - __PRINT1(_L("Fat32 Version Number %d"),bootSector.VersionNumber()); - __PRINT1(_L("Root Cluster Number %d"),bootSector.RootClusterNum()); - __PRINT1(_L("FSInfo Sector Number %d"),bootSector.FSInfoSectorNum()); - __PRINT1(_L("Backup Boot Rec Sector Number %d"),bootSector.BkBootRecSector()); - __PRINT1(_L("PhysicalDriveNumber %d"),bootSector.PhysicalDriveNumber()); - __PRINT1(_L("ExtendedBootSignature %d"),bootSector.ExtendedBootSignature()); - __PRINT1(_L("UniqueID %d"),bootSector.UniqueID()); - __PRINT8BIT1(_L("VolumeLabel %S"),bootSector.VolumeLabel()); - __PRINT8BIT1(_L("FileSysType %S\n"),bootSector.FileSysType()); - - iUniqueID=bootSector.UniqueID(); - iIs16BitFat=bootSector.Is16BitFat(); - - iIs32BitFat=bootSector.Is32BitFat(); - switch (DetermineFatType(bootSector)) - { - case 12: - iIs16BitFat = EFalse; - iIs32BitFat = EFalse; - break; - case 16: - iIs16BitFat = ETrue; - iIs32BitFat = EFalse; - break; - case 32: - iIs16BitFat = EFalse; - iIs32BitFat = ETrue; - break; - default: - return EFalse; - } - - TInt sectorsPerCluster=bootSector.SectorsPerCluster(); - if (!IsPowerOfTwo(sectorsPerCluster)) - return EFalse; - - TInt sectorSizeLog2=Log2(bootSector.BytesPerSector()); - if (sectorSizeLog2<0 || !IsPowerOfTwo(bootSector.BytesPerSector())) - return EFalse; - - TInt firstFatSector=bootSector.ReservedSectors(); - if (firstFatSector<1) - return EFalse; - - TInt fatSizeInBytes; - if(iIs32BitFat) - { - fatSizeInBytes=bootSector.FatSectors32()*bootSector.BytesPerSector(); - if (fatSizeInBytes>sectorSizeLog2; - TInt rootDirEnd=(rootDirectorySector+numOfRootDirSectors)<Read(0,KSizeOfFatBootSector,buf); - if (r!=KErrNone) - { - __PRINT1(_L("LocalDrive::Read() failed - %d"),r); - return(r); - } -// 0 TUint8 iJumpInstruction[3] - Mem::Copy(&aBootSector.iJumpInstruction,&data[pos],3); - pos+=3; -// 3 TUint8 iVendorId[KVendorIdSize] - Mem::Copy(&aBootSector.iVendorId,&data[pos],KVendorIdSize); - pos+=KVendorIdSize; -// 11 TUint16 iBytesPerSector - Mem::Copy(&aBootSector.iBytesPerSector,&data[pos],2); - pos+=2; -// 13 TUint8 sectorsPerCluster - Mem::Copy(&aBootSector.iSectorsPerCluster,&data[pos],1); - pos+=1; -// 14 TUint16 iReservedSectors - Mem::Copy(&aBootSector.iReservedSectors,&data[pos],2); - pos+=2; -// 16 TUint8 numberOfFats - Mem::Copy(&aBootSector.iNumberOfFats,&data[pos],1); - pos+=1; -// 17 TUint16 iRootDirEntries - Mem::Copy(&aBootSector.iRootDirEntries,&data[pos],2); - pos+=2; -// 19 TUint16 totalSectors - Mem::Copy(&aBootSector.iTotalSectors,&data[pos],2); - pos+=2; -// 21 TUint8 iMediaDescriptor - Mem::Copy(&aBootSector.iMediaDescriptor,&data[pos],1); - pos+=1; -// 22 TUint16 iFatSectors - Mem::Copy(&aBootSector.iFatSectors,&data[pos],2); - pos+=2; -// 24 TUint16 iSectorsPerTrack - Mem::Copy(&aBootSector.iSectorsPerTrack,&data[pos],2); - pos+=2; -// 26 TUint16 iNumberOfHeads - Mem::Copy(&aBootSector.iNumberOfHeads,&data[pos],2); - pos+=2; -// 28 TUint32 iHiddenSectors - Mem::Copy(&aBootSector.iHiddenSectors,&data[pos],4); - pos+=4; -// 32 TUint32 iHugeSectors - Mem::Copy(&aBootSector.iHugeSectors,&data[pos],4); - pos+=4; - - if(aBootSector.iRootDirEntries == 0) //indicates we have FAT32 volume - { - __PRINT(_L("\nFile system thinks Fat32")); - - //36 TUint32 iFatSectors32 - Mem::Copy(&aBootSector.iFatSectors32, &data[pos],4); - pos+=4; - //40 TUint16 iFATFlags - Mem::Copy(&aBootSector.iFATFlags, &data[pos],2); - pos+=2; - //42 TUint16 iVersionNumber - Mem::Copy(&aBootSector.iVersionNumber, &data[pos],2); - pos+=2; - //44 TUint32 iRootClusterNum - Mem::Copy(&aBootSector.iRootClusterNum, &data[pos],4); - pos+=4; - //48 TUint16 iFSInfoSectorNum - Mem::Copy(&aBootSector.iFSInfoSectorNum, &data[pos],2); - pos+=2; - //50 TUint16 iBkBootRecSector - Mem::Copy(&aBootSector.iBkBootRecSector, &data[pos],2); - pos+=(2+12);//extra 12 for the reserved bytes - } - -// 36|64 TUint8 iPhysicalDriveNumber - Mem::Copy(&aBootSector.iPhysicalDriveNumber,&data[pos],1); - pos+=1; -// 37|65 TUint8 iReserved - Mem::Copy(&aBootSector.iReserved,&data[pos],1); - pos+=1; -// 38|66 TUint8 iExtendedBootSignature - Mem::Copy(&aBootSector.iExtendedBootSignature,&data[pos],1); - pos+=1; -// 39|67 TUint32 iUniqueID - Mem::Copy(&aBootSector.iUniqueID,&data[pos],4); - pos+=4; -// 43|71 TUint8 iVolumeLabel[KVolumeLabelSize] - Mem::Copy(&aBootSector.iVolumeLabel,&data[pos],KVolumeLabelSize); - pos+=KVolumeLabelSize; -// 54|82 TUint8 iFileSysType[KFileSysTypeSize] - Mem::Copy(&aBootSector.iFileSysType,&data[pos],KFileSysTypeSize); -// 62|90 - - return(KErrNone); - } - -/** -Work out if we have a FAT12|16|32 volume. -Returns 12, 16 or 32 as appropriate. -Returns 0 if can't be calculated (invalid values) -*/ -TInt CMassStorageMountCB::DetermineFatType(TFatBootSector& aBootSector) - { - TUint32 ressectors = aBootSector.ReservedSectors(); - - if (aBootSector.SectorsPerCluster() < 1) - return 0; - - if (aBootSector.RootDirEntries() != 0) - { - TUint32 rootdirbytes; - rootdirbytes = aBootSector.RootDirEntries() * 32 + aBootSector.BytesPerSector() - 1; - ressectors += rootdirbytes / aBootSector.BytesPerSector(); - } - - if (aBootSector.FatSectors() != 0) - ressectors += aBootSector.NumberOfFats() * aBootSector.FatSectors(); - else - ressectors += aBootSector.NumberOfFats() * aBootSector.FatSectors32(); - - TUint32 totalsectors; - if (aBootSector.TotalSectors() != 0) - totalsectors = aBootSector.TotalSectors(); - else - totalsectors = aBootSector.HugeSectors(); - - if (ressectors < 1 || totalsectors < 1) - return 0; - - TUint32 datasec; - datasec = totalsectors - ressectors; - - TUint32 countofclusters; - countofclusters = datasec / aBootSector.SectorsPerCluster(); - - __PRINT1(_L("CFatMountCB: Count of clusters = %d\n"), countofclusters); - - if (countofclusters < 4085) - { - return 12; - } - else if (countofclusters < 65525) - { - return 16; - } - else - { - return 32; - } - } - TInt CMassStorageMountCB::ReMount() { return KErrNotReady;