Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h)
Have multiple extension sections in the bld.inf, one for each version
of the compiler. The RVCT version building the tools will build the
runtime libraries for its version, but make sure we extract all the other
versions from zip archives. Also add the archive for RVCT4.
// Copyright (c) 1995-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:
// f32\srom\sr_std.h
//
//
#if defined(_UNICODE)
#if !defined(UNICODE)
#define UNICODE
#endif
#endif
#include "common.h"
#include <f32fsys.h>
#include <f32ver.h>
#include <e32rom.h>
#include <e32svr.h>
#if defined(__EPOC32__)
// #define __PRINT_DEBUG_INFO_SR_STD__ 1
#endif
#if defined(__PRINT_DEBUG_INFO_SR_STD__) && !defined(__LOCK_SR_STD__)
#define __LOCK_SR_STD__
#define __PRINT(t) RDebug::t;
#else
#define __PRINT(t)
#endif
//
enum TFault
{
ERomReMountNotSupported,
ERomGetFileInfo,
ERomFileTooBig,
ERomCreateFileMapping,
ERomCreateMappedView,
ERomInvalidArgument,
ERomFsCorrupt
};
//
NONSHARABLE_CLASS(CRom) : public CFileSystem
{
public:
CRom();
~CRom();
TInt Install();
CMountCB* NewMountL() const;
CFileCB* NewFileL() const;
CDirCB* NewDirL() const;
CFormatCB* NewFormatL() const;
void DriveInfo(TDriveInfo& anInfo,TInt aDriveNumber) const;
const TRomHeader& RomHeader() const {return(*iRomHeaderAddress);}
TLinAddr RootDirectory() const {return UserSvr::RomRootDirectoryAddress();}
private:
static const TRomHeader* iRomHeaderAddress;
};
//
NONSHARABLE_CLASS(CRomMountCB) : public CMountCB, public CMountCB::MFileAccessor
{
public:
CRomMountCB(const CRom* aRom);
void MountL(TBool aForceMount);
TInt ReMount();
void Dismounted();
static TInt Compare(const TDesC& aLeft, const TDesC& aRight);
void VolumeL(TVolumeInfo& aVolume) const;
void SetVolumeL(TDes& aName);
void MkDirL(const TDesC& aName);
void RmDirL(const TDesC& aName);
void DeleteL(const TDesC& aName);
void RenameL(const TDesC& anOldName,const TDesC& anNewName);
void ReplaceL(const TDesC& anOldName,const TDesC& anNewName);
void EntryL(const TDesC& aName,TEntry& anEntry) const;
void SetEntryL(const TDesC& aName,const TTime& aTime,TUint aMask,TUint aVal);
void FileOpenL(const TDesC& aName,TUint aMode,TFileOpen anOpen,CFileCB* aFile);
void DirOpenL(const TDesC& aName,CDirCB* aDir);
void FindLeafDirL(const TDesC& aName,TLinAddr& aDir) const;
void FindL(const TDesC& aName,TUint anAtt,TLinAddr aDir,TLinAddr& anEntry,TInt anError) const;
void FindBinaryL(const TDesC& aName,TUint aAtt,TBool aAttKnown,TLinAddr aDir,TLinAddr& aEntry,TInt aError) const;
void FindEntryL(const TDesC& aName,TUint anAtt,TBool aAttKnown,TLinAddr& aDir,TLinAddr& anEntry) const;
const TRomHeader& RomHeader() const {return (iRom->RomHeader());}
TLinAddr RomRootDirectory() const {return iRom->RootDirectory(); }
void RawReadL(TInt64 aPos,TInt aLength,const TAny* aDes,TInt anOffset,const RMessagePtr2& aMessage) const;
void RawWriteL(TInt64 aPos,TInt aLength,const TAny* aDes,TInt anOffset,const RMessagePtr2& aMessage);
void ReadUidL(TLinAddr anAddr,TEntry& anEntry) const;
void GetShortNameL(const TDesC& aLongName,TDes& aShortName);
void GetLongNameL(const TDesC& aShortName,TDes& aLongName);
void IsFileInRom(const TDesC& aFileName,TUint8*& aFileStart);
void ReadSectionL(const TDesC& aName,TInt aPos,TAny* aTrg,TInt aLength,const RMessagePtr2& aMessage);
virtual TInt GetInterface(TInt aInterfaceId,TAny*& aInterface,TAny* aInput);
virtual TInt GetFileUniqueId(const TDesC& aName, TInt64& aUniqueId);
virtual TInt Spare3(TInt aVal, TAny* aPtr1, TAny* aPtr2);
virtual TInt Spare2(TInt aVal, TAny* aPtr1, TAny* aPtr2);
virtual TInt Spare1(TInt aVal, TAny* aPtr1, TAny* aPtr2);
private:
const CRom* iRom;
};
//
NONSHARABLE_CLASS(CRomFileCB) : public CFileCB
{
public:
CRomFileCB(const CRom* aRom);
void RenameL(const TDesC& aNewName);
void ReadL(TInt aPos,TInt& aLength,const TAny* aTrg,const RMessagePtr2& aMessage);
void WriteL(TInt aPos,TInt& aLength,const TAny* aSrc,const RMessagePtr2& aMessage);
void SetSizeL(TInt aSize);
void SetEntryL(const TTime& aTime,TUint aMask,TUint aVal);
void FlushDataL();
void FlushAllL();
TInt Address(TInt& aPos) const;
const TRomHeader& RomHeader() const {return(iRom->RomHeader());}
TLinAddr RomRootDirectory() const {return iRom->RootDirectory(); }
void SetBase(const TUint8* aBase) {iBase=aBase;}
private:
const CRom* iRom;
const TUint8* iBase;
};
//
NONSHARABLE_CLASS(CRomDirCB) : public CDirCB
{
public:
CRomDirCB(const CRom* aRom);
~CRomDirCB();
void ReadL(TEntry& anEntry);
const TRomHeader& RomHeader() const {return(iRom->RomHeader());}
TLinAddr RomRootDirectory() const {return iRom->RootDirectory(); }
void SetDir(TLinAddr aDir,TLinAddr anEntry,const TDesC& aMatch);
private:
TBool MatchUid();
private:
const CRom* iRom;
TEntry iEntry;
TLinAddr iDir;
TLinAddr iNext;
HBufC* iMatch;
};
//
GLREF_C TInt InstallFileSystem(CFileSystem* aSys,RLibrary aLib);