diff -r c7c26511138f -r 360bd6b35136 imgtools/imglib/filesystem/source/fatbasebootsector.cpp --- a/imgtools/imglib/filesystem/source/fatbasebootsector.cpp Wed Jun 16 16:51:40 2010 +0300 +++ b/imgtools/imglib/filesystem/source/fatbasebootsector.cpp Wed Jun 23 16:56:47 2010 +0800 @@ -1,596 +1,596 @@ -/* -* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* This file contains the definition of class TFATBaseBootSector. -* TFATBaseBootSector is the base class for the boot sector class -* of different FAT file system type.This contains the data member -* representing the common fields in each FAT image type -* @internalComponent -* @released -* -*/ - -#include "fatbasebootsector.h" - -/** -Constructor of the base boot sector class - -@internalComponent -@released -*/ -TFATBaseBootSector::TFATBaseBootSector() -{ -} - -/** -Destructor of the base boot sector class - -@internalComponent -@released -*/ -TFATBaseBootSector::~TFATBaseBootSector() -{ -} - -/** -Function Sets the OEM name generally, Indication of what system -formats the volume - -@internalComponent -@released -*/ -void TFATBaseBootSector::SetOEMName() - { - strcpy( reinterpret_cast(iOEMName),KDefaultOEMName); - } - -/** -Function to get the OEM name - -@internalComponent -@released - -@return OEM Name -*/ -unsigned char* TFATBaseBootSector::OEMName() - { - return iOEMName; - } - -/** -Function to set the jump instructions - -@internalComponent -@released -*/ -void TFATBaseBootSector::SetJumpInstruction() -{ - iJmpBoot[0]= 0xEB; - iJmpBoot[1]= 0x5A; - iJmpBoot[2]= 0x90; -} - -/** -Function to get the jump instructions - -@internalComponent -@released - -@return jump boot instruction -*/ -unsigned char* TFATBaseBootSector::JumpInstruction() -{ - return iJmpBoot; -} - - -/** -Function to set the bytes per sector. - -@internalComponent -@released - -@param aDriveSectorSize Sector size in bytes -*/ -void TFATBaseBootSector::SetBytesPerSector(unsigned int aDriveSectorSize) -{ - // Take the default value if SectorSize is not provided by the user. - if (aDriveSectorSize != 0) - { - unsigned short int acceptableValues[] = {512,1024,2048,4096}; - unsigned short int acceptableValuesCount = 4; - bool validSectorSize = false; - for (unsigned int count=0; count255) || (aDriveNoOfFATs<1)) - { - std::cout<<"Warning: No of FATs should be between 0 and 256. Default value is considered.\n"; - iNumberOfFats= KDefaultNumFats; - return; - } - iNumberOfFats= aDriveNoOfFATs; - } - else - { - iNumberOfFats= KDefaultNumFats; - } -} - - -/** -Total sectors on the volume,This count includes the total count of all sectors -in all four regions of the volume.iTatalSectors is a 16 bit field and iTotalSectors32 -is a 32 bit field.Hence if the total sectors are more than 2^16(0x10000 in hex) -then iTotalSectors32 is set otherwise it is zero. - -@internalComponent -@released - -@param aPartitionSize Partition size in bytes -*/ -void TFATBaseBootSector::ComputeTotalSectors(Long64 aPartitionSize) -{ - int Log2OfBytesPerSector = Log2(iBytesPerSector); - unsigned long TotalSectors64 = (unsigned long)(aPartitionSize >> Log2OfBytesPerSector); - if(TotalSectors64 >= 0x10000) - { - iTotalSectors = 0; - iTotalSectors32 = (unsigned int) TotalSectors64; - } - else - { - iTotalSectors = (unsigned short)TotalSectors64; - iTotalSectors32=0; - } -} - -/** -Set the media descriptor,0xF8 is the standard for fixed (non removable) media. - -@internalComponent -@released -*/ -void TFATBaseBootSector::SetMedia() -{ - iMedia=KBPBMedia; -} - -/** -This methods gets the media descriptor - -@internalComponent -@released - -@return media descriptor -*/ -unsigned char TFATBaseBootSector::Media() const -{ - return iMedia; -} - -/** -Set the number of hidden sectors in the volume,Count of hidden sector -preceding the partition. - -@internalComponent -@released -*/ -void TFATBaseBootSector::SetHiddenSectors() -{ - iHiddenSectors=KDefaultHiddenSectors; -} - -/** -Gets the number of hidden sectors in the volume - -@internalComponent -@released - -@return the number of hidden sectors in a given FAT Volume -*/ -unsigned int TFATBaseBootSector::HiddenSectors() const -{ - return iHiddenSectors; -} - -/** -Set the sectors per track preceding the partition. - -@internalComponent -@released -*/ -void TFATBaseBootSector::SetSectorsPerTrack() -{ - iSectorsPerTrack=KDefaultSectorsPerTrack;// default value for flash memory -} - -/** -Gets the number sectors per track in the volume - -@internalComponent -@released - -@return the number of sectors per track in a given FAT Volume -*/ -unsigned short TFATBaseBootSector::SectorsPerTrack() const -{ - return iSectorsPerTrack; -} - -/** -Set the number of heads - -@internalComponent -@released -*/ -void TFATBaseBootSector::SetNumberOfHeads() -{ - iNumHeads=KDefaultNumHeads;// default value for flash memory -} - -/** -Gets the the number of heads - -@internalComponent -@released - -@return number of heads in a given FAT Volume -*/ -unsigned short TFATBaseBootSector::NumberOfHeads() const -{ - return iNumHeads;// default value for flash memory -} - -/** -Set the Physical drive number,not used in Symbian OS - -@internalComponent -@released -*/ -void TFATBaseBootSector::SetBootSectorDriveNumber() -{ - iPhysicalDriveNumber=KDefaultDriveNumber; -} - -/** -Function to return drive number - -@internalComponent -@released - -@return Physical drive number, not used in Symbian OS -*/ -unsigned char TFATBaseBootSector::BootSectorDriveNumber() const -{ - return iPhysicalDriveNumber; -} - -/** -Set the reserved byte value - -@internalComponent -@released -*/ -void TFATBaseBootSector::SetReservedByte() -{ - iReservedByte=KDefaultReservedByte; -} - -/** -Get the value of reserved byte in boot sector - -@internalComponent -@released - -@return Returns the reserved byte value -*/ -unsigned char TFATBaseBootSector::ReservedByte() const -{ - return iReservedByte; -} - -/** -Set the extended boot signature - -@internalComponent -@released - -*/ -void TFATBaseBootSector::SetBootSignature() -{ - iBootSign=KDefaultBootSignature; -} - -/** -Gets the extended boot signature - -@internalComponent -@released - -@return boot signature -*/ -unsigned char TFATBaseBootSector::BootSignature() const -{ - return iBootSign; -} - -/** -Set the unique volume serial number,This ID is usually generated by -simply combining the current date and time in to 32 bit value. - -@internalComponent -@released -*/ -void TFATBaseBootSector::SetVolumeId() -{ - time_t rawtime; - time(&rawtime); - iVolumeId=rawtime; -} - -/** -Returns the volume id - -@internalComponent -@released - -@return volume id field of the boot sector -*/ -unsigned int TFATBaseBootSector::VolumeId() const -{ -return iVolumeId ; -} - -/** -Set the volume's label - -@internalComponent -@released - -@param aVolumeLable Data Drive Volume Label -*/ -void TFATBaseBootSector::SetVolumeLab(String aVolumeLable) -{ - // Set the default value of VolumeLable(i.e. "NO NAME ") if not provided - // by the user. - if (aVolumeLable.empty()) - { - strcpy(reinterpret_cast(iVolumeLabel),KDefaultVolumeLabel); - } - else - { - // If the volume label provided is greater than 11 characters then consider only - // the first 11 characters and generate a warning. - int volumeMaxLangth= 11; - int volumeLabelSize= aVolumeLable.size(); - if (volumeLabelSize > volumeMaxLangth) - { - std::cout<<"Warning: Size overflow for Data Drive Volume Label. Truncating to 11-bytes.\n"; - aVolumeLable.resize(volumeMaxLangth); - strcpy(reinterpret_cast(iVolumeLabel),aVolumeLable.c_str()); - return; - } - - // If the VolumeLable provided is less than 11-characters then pad the - // remaining bytes with white-spaces. - if (volumeLabelSize < KMaxVolumeLabel) - { - while(volumeLabelSize < 11) - { - aVolumeLable.append(" "); - volumeLabelSize = aVolumeLable.size(); - } - } - strcpy(reinterpret_cast(iVolumeLabel),aVolumeLable.c_str()); - } -} - -/** -returns the volume's label - -@internalComponent -@released - -*/ -unsigned char* TFATBaseBootSector::VolumeLab() -{ - return iVolumeLabel; -} - -/** -Returns the number of reserved sectors on the volume - -@internalComponent -@released - -@return iReservedSectors -*/ -unsigned short TFATBaseBootSector::ReservedSectors() const -{ - return iReservedSectors; -} - -/** -Returns the number of Fats on the volume - -@internalComponent -@released - -@return iNumberOfFats -*/ -unsigned char TFATBaseBootSector::NumberOfFats() const -{ - return iNumberOfFats; -} - -/** -Returns the number of entries allowed in the root directory, specific to Fat12/16, zero for FAT32 - -@internalComponent -@released - -@return iRootDirEntries -*/ -unsigned short TFATBaseBootSector::RootDirEntries() const -{ - return iRootDirEntries; -} - -/** -Returns the total sectors on the volume, - -@internalComponent -@released - -@return iTotalSectors -*/ -unsigned int TFATBaseBootSector::TotalSectors(Long64 aPartitionSize) const -{ - if((aPartitionSize/iBytesPerSector)>= 0x10000) - return iTotalSectors32; - else - return iTotalSectors; -} - -/** -Returns base 2 Logarithm of a number - -@internalComponent -@released - -@param aNum number whose logarithm is to be taken -@return log base 2 of the number passed -*/ -int TFATBaseBootSector::Log2(int aNum) -{ - int res=-1; - while(aNum) - { - res++; - aNum>>=1; - } - return(res); -} - -/** -Returns the sectors per cluster ratio - -@internalComponent -@released - -@return iSectorsPerCluster -*/ -unsigned char TFATBaseBootSector::SectorsPerCluster() const -{ - return iSectorsPerCluster; -} - -/** -Returns the 16 bit count of total sectors on the volume - -@internalComponent -@released - -@return iTotalSectors -*/ -unsigned short TFATBaseBootSector::LowSectorsCount() const -{ - return iTotalSectors; -} - -/** -Returns the 32 bit count of total sectors on the volume - -@internalComponent -@released - -@return iTotalSectors -*/ -unsigned int TFATBaseBootSector::HighSectorsCount() const -{ - return iTotalSectors32; -} - -/** -Returns sectors used for the Fat table, zero for FAT32 - -@internalComponent -@released - -@return iFatSectors -*/ -unsigned short TFATBaseBootSector::FatSectors() const -{ - return (unsigned short)iFatSectors; -} - -/** -Returns sectors used for the Fat table in FAT32 - -@internalComponent -@released - -@return iFatSectors32 -*/ -unsigned int TFATBaseBootSector::FatSectors32() const -{ - return iFatSectors32; -} +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This file contains the definition of class TFATBaseBootSector. +* TFATBaseBootSector is the base class for the boot sector class +* of different FAT file system type.This contains the data member +* representing the common fields in each FAT image type +* @internalComponent +* @released +* +*/ + +#include "fatbasebootsector.h" + +/** +Constructor of the base boot sector class + +@internalComponent +@released +*/ +TFATBaseBootSector::TFATBaseBootSector() +{ +} + +/** +Destructor of the base boot sector class + +@internalComponent +@released +*/ +TFATBaseBootSector::~TFATBaseBootSector() +{ +} + +/** +Function Sets the OEM name generally, Indication of what system +formats the volume + +@internalComponent +@released +*/ +void TFATBaseBootSector::SetOEMName() + { + strcpy( reinterpret_cast(iOEMName),KDefaultOEMName); + } + +/** +Function to get the OEM name + +@internalComponent +@released + +@return OEM Name +*/ +unsigned char* TFATBaseBootSector::OEMName() + { + return iOEMName; + } + +/** +Function to set the jump instructions + +@internalComponent +@released +*/ +void TFATBaseBootSector::SetJumpInstruction() +{ + iJmpBoot[0]= 0xEB; + iJmpBoot[1]= 0x5A; + iJmpBoot[2]= 0x90; +} + +/** +Function to get the jump instructions + +@internalComponent +@released + +@return jump boot instruction +*/ +unsigned char* TFATBaseBootSector::JumpInstruction() +{ + return iJmpBoot; +} + + +/** +Function to set the bytes per sector. + +@internalComponent +@released + +@param aDriveSectorSize Sector size in bytes +*/ +void TFATBaseBootSector::SetBytesPerSector(unsigned int aDriveSectorSize) +{ + // Take the default value if SectorSize is not provided by the user. + if (aDriveSectorSize != 0) + { + unsigned short int acceptableValues[] = {512,1024,2048,4096}; + unsigned short int acceptableValuesCount = 4; + bool validSectorSize = false; + for (unsigned int count=0; count255) || (aDriveNoOfFATs<1)) + { + cout<<"Warning: No of FATs should be between 0 and 256. Default value is considered.\n"; + iNumberOfFats= KDefaultNumFats; + return; + } + iNumberOfFats= aDriveNoOfFATs; + } + else + { + iNumberOfFats= KDefaultNumFats; + } +} + + +/** +Total sectors on the volume,This count includes the total count of all sectors +in all four regions of the volume.iTatalSectors is a 16 bit field and iTotalSectors32 +is a 32 bit field.Hence if the total sectors are more than 2^16(0x10000 in hex) +then iTotalSectors32 is set otherwise it is zero. + +@internalComponent +@released + +@param aPartitionSize Partition size in bytes +*/ +void TFATBaseBootSector::ComputeTotalSectors(Long64 aPartitionSize) +{ + int Log2OfBytesPerSector = Log2(iBytesPerSector); + unsigned long TotalSectors64 = (unsigned long)(aPartitionSize >> Log2OfBytesPerSector); + if(TotalSectors64 >= 0x10000) + { + iTotalSectors = 0; + iTotalSectors32 = (unsigned int) TotalSectors64; + } + else + { + iTotalSectors = (unsigned short)TotalSectors64; + iTotalSectors32=0; + } +} + +/** +Set the media descriptor,0xF8 is the standard for fixed (non removable) media. + +@internalComponent +@released +*/ +void TFATBaseBootSector::SetMedia() +{ + iMedia=KBPBMedia; +} + +/** +This methods gets the media descriptor + +@internalComponent +@released + +@return media descriptor +*/ +unsigned char TFATBaseBootSector::Media() const +{ + return iMedia; +} + +/** +Set the number of hidden sectors in the volume,Count of hidden sector +preceding the partition. + +@internalComponent +@released +*/ +void TFATBaseBootSector::SetHiddenSectors() +{ + iHiddenSectors=KDefaultHiddenSectors; +} + +/** +Gets the number of hidden sectors in the volume + +@internalComponent +@released + +@return the number of hidden sectors in a given FAT Volume +*/ +unsigned int TFATBaseBootSector::HiddenSectors() const +{ + return iHiddenSectors; +} + +/** +Set the sectors per track preceding the partition. + +@internalComponent +@released +*/ +void TFATBaseBootSector::SetSectorsPerTrack() +{ + iSectorsPerTrack=KDefaultSectorsPerTrack;// default value for flash memory +} + +/** +Gets the number sectors per track in the volume + +@internalComponent +@released + +@return the number of sectors per track in a given FAT Volume +*/ +unsigned short TFATBaseBootSector::SectorsPerTrack() const +{ + return iSectorsPerTrack; +} + +/** +Set the number of heads + +@internalComponent +@released +*/ +void TFATBaseBootSector::SetNumberOfHeads() +{ + iNumHeads=KDefaultNumHeads;// default value for flash memory +} + +/** +Gets the the number of heads + +@internalComponent +@released + +@return number of heads in a given FAT Volume +*/ +unsigned short TFATBaseBootSector::NumberOfHeads() const +{ + return iNumHeads;// default value for flash memory +} + +/** +Set the Physical drive number,not used in Symbian OS + +@internalComponent +@released +*/ +void TFATBaseBootSector::SetBootSectorDriveNumber() +{ + iPhysicalDriveNumber=KDefaultDriveNumber; +} + +/** +Function to return drive number + +@internalComponent +@released + +@return Physical drive number, not used in Symbian OS +*/ +unsigned char TFATBaseBootSector::BootSectorDriveNumber() const +{ + return iPhysicalDriveNumber; +} + +/** +Set the reserved byte value + +@internalComponent +@released +*/ +void TFATBaseBootSector::SetReservedByte() +{ + iReservedByte=KDefaultReservedByte; +} + +/** +Get the value of reserved byte in boot sector + +@internalComponent +@released + +@return Returns the reserved byte value +*/ +unsigned char TFATBaseBootSector::ReservedByte() const +{ + return iReservedByte; +} + +/** +Set the extended boot signature + +@internalComponent +@released + +*/ +void TFATBaseBootSector::SetBootSignature() +{ + iBootSign=KDefaultBootSignature; +} + +/** +Gets the extended boot signature + +@internalComponent +@released + +@return boot signature +*/ +unsigned char TFATBaseBootSector::BootSignature() const +{ + return iBootSign; +} + +/** +Set the unique volume serial number,This ID is usually generated by +simply combining the current date and time in to 32 bit value. + +@internalComponent +@released +*/ +void TFATBaseBootSector::SetVolumeId() +{ + time_t rawtime; + time(&rawtime); + iVolumeId=rawtime; +} + +/** +Returns the volume id + +@internalComponent +@released + +@return volume id field of the boot sector +*/ +unsigned int TFATBaseBootSector::VolumeId() const +{ +return iVolumeId ; +} + +/** +Set the volume's label + +@internalComponent +@released + +@param aVolumeLable Data Drive Volume Label +*/ +void TFATBaseBootSector::SetVolumeLab(string aVolumeLable) +{ + // Set the default value of VolumeLable(i.e. "NO NAME ") if not provided + // by the user. + if (aVolumeLable.empty()) + { + strcpy(reinterpret_cast(iVolumeLabel),KDefaultVolumeLabel); + } + else + { + // If the volume label provided is greater than 11 characters then consider only + // the first 11 characters and generate a warning. + int volumeMaxLangth= 11; + int volumeLabelSize= aVolumeLable.size(); + if (volumeLabelSize > volumeMaxLangth) + { + cout<<"Warning: Size overflow for Data Drive Volume Label. Truncating to 11-bytes.\n"; + aVolumeLable.resize(volumeMaxLangth); + strcpy(reinterpret_cast(iVolumeLabel),aVolumeLable.c_str()); + return; + } + + // If the VolumeLable provided is less than 11-characters then pad the + // remaining bytes with white-spaces. + if (volumeLabelSize < KMaxVolumeLabel) + { + while(volumeLabelSize < 11) + { + aVolumeLable.append(" "); + volumeLabelSize = aVolumeLable.size(); + } + } + strcpy(reinterpret_cast(iVolumeLabel),aVolumeLable.c_str()); + } +} + +/** +returns the volume's label + +@internalComponent +@released + +*/ +unsigned char* TFATBaseBootSector::VolumeLab() +{ + return iVolumeLabel; +} + +/** +Returns the number of reserved sectors on the volume + +@internalComponent +@released + +@return iReservedSectors +*/ +unsigned short TFATBaseBootSector::ReservedSectors() const +{ + return iReservedSectors; +} + +/** +Returns the number of Fats on the volume + +@internalComponent +@released + +@return iNumberOfFats +*/ +unsigned char TFATBaseBootSector::NumberOfFats() const +{ + return iNumberOfFats; +} + +/** +Returns the number of entries allowed in the root directory, specific to Fat12/16, zero for FAT32 + +@internalComponent +@released + +@return iRootDirEntries +*/ +unsigned short TFATBaseBootSector::RootDirEntries() const +{ + return iRootDirEntries; +} + +/** +Returns the total sectors on the volume, + +@internalComponent +@released + +@return iTotalSectors +*/ +unsigned int TFATBaseBootSector::TotalSectors(Long64 aPartitionSize) const +{ + if((aPartitionSize/iBytesPerSector)>= 0x10000) + return iTotalSectors32; + else + return iTotalSectors; +} + +/** +Returns base 2 Logarithm of a number + +@internalComponent +@released + +@param aNum number whose logarithm is to be taken +@return log base 2 of the number passed +*/ +int TFATBaseBootSector::Log2(int aNum) +{ + int res=-1; + while(aNum) + { + res++; + aNum>>=1; + } + return(res); +} + +/** +Returns the sectors per cluster ratio + +@internalComponent +@released + +@return iSectorsPerCluster +*/ +unsigned char TFATBaseBootSector::SectorsPerCluster() const +{ + return iSectorsPerCluster; +} + +/** +Returns the 16 bit count of total sectors on the volume + +@internalComponent +@released + +@return iTotalSectors +*/ +unsigned short TFATBaseBootSector::LowSectorsCount() const +{ + return iTotalSectors; +} + +/** +Returns the 32 bit count of total sectors on the volume + +@internalComponent +@released + +@return iTotalSectors +*/ +unsigned int TFATBaseBootSector::HighSectorsCount() const +{ + return iTotalSectors32; +} + +/** +Returns sectors used for the Fat table, zero for FAT32 + +@internalComponent +@released + +@return iFatSectors +*/ +unsigned short TFATBaseBootSector::FatSectors() const +{ + return (unsigned short)iFatSectors; +} + +/** +Returns sectors used for the Fat table in FAT32 + +@internalComponent +@released + +@return iFatSectors32 +*/ +unsigned int TFATBaseBootSector::FatSectors32() const +{ + return iFatSectors32; +}