diff -r 0ff24a8f6ca2 -r 98307c651589 memspy/Engine/Source/Helpers/MemSpyEngineHelperFileSystem.cpp --- a/memspy/Engine/Source/Helpers/MemSpyEngineHelperFileSystem.cpp Fri Aug 27 11:37:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1191 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "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: -* -*/ - -#include - -// System includes -#include - -// Driver includes -#include - -// User includes -#include -#include -#include -#include -#include -#include -#include -#include "MemSpyEngineOutputListItem.h" - -// Remap of E32 constant since this value only exists in recent v9.3 builds and MemSpy needs to build on v9.1 -const TUint KMemSpyDriveAttPageable = 0x100; // KDriveAttPageable -const TUint KMemSpyMediaAttPageable = 0x200; // KMediaAttPageable - -// Literal constants -_LIT( KMemSpyVolumeLabelNotSet, "None" ); - - -CMemSpyEngineHelperFileSystem::CMemSpyEngineHelperFileSystem( CMemSpyEngine& aEngine ) -: iEngine( aEngine ) - { - } - - -CMemSpyEngineHelperFileSystem::~CMemSpyEngineHelperFileSystem() - { - } - - -void CMemSpyEngineHelperFileSystem::ConstructL() - { - iFileServerProcessId = MemSpyEngineUtils::IdentifyFileServerProcessIdL(); - } - - -CMemSpyEngineHelperFileSystem* CMemSpyEngineHelperFileSystem::NewL( CMemSpyEngine& aEngine ) - { - CMemSpyEngineHelperFileSystem* self = new(ELeave) CMemSpyEngineHelperFileSystem( aEngine ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -EXPORT_C CMemSpyEngineDriveList* CMemSpyEngineHelperFileSystem::DriveListL() - { - CMemSpyEngineDriveList* list = CMemSpyEngineDriveList::NewLC( iEngine.FsSession() ); - CleanupStack::Pop( list ); - return list; - } - - -EXPORT_C TDriveNumber CMemSpyEngineHelperFileSystem::GetSystemDrive() - { - TDriveNumber ret = EDriveC; -#ifndef __WINS__ - const TInt KRFsGetSystemDriveOrdinal = 336; - typedef TDriveNumber(*TRFsGetSystemDriveFunc)(); - // - RLibrary lib; - const TInt loadErr = lib.Load( _L("EFSRV.DLL") ); -#ifdef _DEBUG - RDebug::Printf( "CMemSpyEngineHelperFileSystem::GetSystemDrive() - dll load: %d", loadErr ); -#endif - if ( loadErr == KErrNone ) - { - TLibraryFunction ordinal = lib.Lookup( KRFsGetSystemDriveOrdinal ); -#ifdef _DEBUG - RDebug::Printf( "CMemSpyEngineHelperFileSystem::GetSystemDrive() - ordinal: 0x%08x", ordinal ); -#endif - // - if ( ordinal ) - { - TRFsGetSystemDriveFunc func = (TRFsGetSystemDriveFunc) ordinal; - ret = (*func)(); -#ifdef _DEBUG - RDebug::Printf( "CMemSpyEngineHelperFileSystem::GetSystemDrive() - drive: %c:\\", 'A' + ret); -#endif - } - // - lib.Close(); - } -#endif - // - return ret; - } - - -EXPORT_C void CMemSpyEngineHelperFileSystem::ListOpenFilesL() - { - TOpenFileScan scanner( iEngine.FsSession() ); - - _LIT( KMemSpyContext, "Open File Listing" ); - _LIT( KMemSpyFolder, "OpenFiles" ); - iEngine.Sink().DataStreamBeginL( KMemSpyContext, KMemSpyFolder ); - - _LIT(KHeading, "OPEN FILES"); - iEngine.Sink().OutputSectionHeadingL( KHeading, '=' ); - - // Set prefix for overall listing - _LIT(KOverallPrefix, "OpenFiles - "); - iEngine.Sink().OutputPrefixSetLC( KOverallPrefix ); - - CFileList* list = NULL; - scanner.NextL( list ); - while( list != NULL ) - { - CleanupStack::PushL( list ); - ListOpenFilesL( *list, scanner.ThreadId() ); - CleanupStack::PopAndDestroy( list ); - // - list = NULL; - scanner.NextL( list ); - } - - CleanupStack::PopAndDestroy(); // prefix - iEngine.Sink().DataStreamEndL(); - } - - -EXPORT_C void CMemSpyEngineHelperFileSystem::ListOpenFilesL( const TThreadId& aThreadId ) - { - TOpenFileScan scanner( iEngine.FsSession() ); - - _LIT( KMemSpyContext, "Open File Listing" ); - _LIT( KMemSpyFolder, "OpenFiles" ); - iEngine.Sink().DataStreamBeginL( KMemSpyContext, KMemSpyFolder ); - - _LIT(KHeading, "OPEN FILES"); - iEngine.Sink().OutputSectionHeadingL( KHeading, '=' ); - - // Set prefix for overall listing - _LIT(KOverallPrefix, "OpenFiles - "); - iEngine.Sink().OutputPrefixSetLC( KOverallPrefix ); - - CFileList* list = NULL; - scanner.NextL( list ); - while( list != NULL ) - { - if ( scanner.ThreadId() == aThreadId ) - { - CleanupStack::PushL( list ); - ListOpenFilesL( *list, scanner.ThreadId() ); - CleanupStack::Pop( list ); - } - // - delete list; - list = NULL; - scanner.NextL( list ); - } - - CleanupStack::PopAndDestroy(); // prefix - iEngine.Sink().DataStreamEndL(); - } - - -void CMemSpyEngineHelperFileSystem::GetDriveNumberText( TDriveNumber aDriveNumber, TDes& aText ) - { - const TInt offset = aDriveNumber - EDriveA; - const TChar driveChar = 'A' + offset; - aText.Copy( _L("EDrive") ); - aText.Append( driveChar ); - } - - -void CMemSpyEngineHelperFileSystem::ListOpenFilesL( const CFileList& aList, const TThreadId& aThreadId ) - { - _LIT( KLineFormatSpec, "%d %S %S %S %S" ); - TBuf<64> timeBuf; - TMemSpySizeText valueBuf; - - HBufC* itemBuf = HBufC::NewLC( 3 * KMaxFullName ); - TPtr item( itemBuf->Des() ); - - TFullName threadName; - RThread thread; - if ( iEngine.Driver().OpenThread( aThreadId, thread ) == KErrNone ) - { - threadName = thread.FullName(); - thread.Close(); - } - - const TInt entryCount = aList.Count(); - for(TInt i=0; i 0 && info.iMaxSize > 0 && isDisconnected ) - { - aIndex = i; - ret = &entry; -#ifdef _DEBUG - RDebug::Print( _L("CMemSpyEngineHelperFileSystem::IdentifyCacheChunk() - FOUND: %S, size: %d"), &info.iName, info.iSize ); -#endif - break; - } - } - } - } - // -#ifdef _DEBUG - RDebug::Printf( "CMemSpyEngineHelperFileSystem::IdentifyCacheChunk() - END - ret: 0x%08x", ret ); -#endif - return ret; - } - - - - - - - - - - - - - - - - - - - - - -CMemSpyEngineDriveList::CMemSpyEngineDriveList( RFs& aFsSession ) -: CActive( EPriorityStandard ), iFsSession( aFsSession ) - { - CActiveScheduler::Add( this ); - } - - -EXPORT_C CMemSpyEngineDriveList::~CMemSpyEngineDriveList() - { - Cancel(); - // - iItems.ResetAndDestroy(); - iItems.Close(); - } - - -void CMemSpyEngineDriveList::ConstructL() - { - TDriveList drives; - if ( iFsSession.DriveList( drives ) == KErrNone ) - { - for( TInt i=EDriveA; i<=EDriveZ; i++ ) - { - const TDriveNumber drive = static_cast< TDriveNumber >( i ); - if ( drives[ i ] != KDriveAbsent ) - { - TRAP_IGNORE( - CMemSpyEngineDriveEntry* driveEntry = CMemSpyEngineDriveEntry::NewLC( *this, drive ); - iItems.AppendL( driveEntry ); - CleanupStack::Pop( driveEntry ); - ); - } - } - } - - iFsSession.NotifyChange( ENotifyDisk, iStatus ); - SetActive(); - } - - -CMemSpyEngineDriveList* CMemSpyEngineDriveList::NewLC( RFs& aFsSession ) - { - CMemSpyEngineDriveList* self = new(ELeave) CMemSpyEngineDriveList( aFsSession ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -void CMemSpyEngineDriveList::RunL() - { - iFsSession.NotifyChange( ENotifyDisk, iStatus ); - SetActive(); - // - NotifyListChangedL(); - } - - -void CMemSpyEngineDriveList::DoCancel() - { - iFsSession.NotifyChangeCancel(); - } - - -EXPORT_C void CMemSpyEngineDriveList::SetObserver( MMemSpyEngineDriveListObserver* aObserver ) - { - iObserver = aObserver; - } - - -EXPORT_C TInt CMemSpyEngineDriveList::Count() const - { - return iItems.Count(); - } - - -EXPORT_C CMemSpyEngineDriveEntry& CMemSpyEngineDriveList::At( TInt aIndex ) - { - return *iItems[ aIndex ]; - } - - -EXPORT_C const CMemSpyEngineDriveEntry& CMemSpyEngineDriveList::At( TInt aIndex ) const - { - return *iItems[ aIndex ]; - } - - -EXPORT_C TInt CMemSpyEngineDriveList::ItemIndex( const CMemSpyEngineDriveEntry& aEntry ) const - { - TInt ret = KErrNotFound; - // - const TInt count = Count(); - for( TInt i=0; iDriveNumber() == aDrive ) - { - ret = item; - break; - } - } - // - return ret; - } - - -RFs& CMemSpyEngineDriveList::FsSession() - { - return iFsSession; - } - - -void CMemSpyEngineDriveList::NotifyListChangedL() - { - if ( iObserver != NULL ) - { - TRAP_IGNORE( iObserver->HandleDriveListChangedL( *this ) ); - } - } - - -EXPORT_C TInt CMemSpyEngineDriveList::MdcaCount() const - { - return Count(); - } - - -EXPORT_C TPtrC CMemSpyEngineDriveList::MdcaPoint( TInt aIndex ) const - { - const CMemSpyEngineDriveEntry& item = At( aIndex ); - return TPtrC( item.Caption() ); - } - - - - - - - - - - - - - - - - - - -CMemSpyEngineDriveEntry::CMemSpyEngineDriveEntry( CMemSpyEngineDriveList& aList, TDriveNumber aDriveNumber ) -: CActive( CActive::EPriorityStandard), iList( aList ), iDriveNumber( aDriveNumber ), iDriveUnit( aDriveNumber ) - { - CActiveScheduler::Add( this ); - } - - -EXPORT_C CMemSpyEngineDriveEntry::~CMemSpyEngineDriveEntry() - { - Cancel(); - // - delete iCaption; - delete iItems; - } - - -void CMemSpyEngineDriveEntry::ConstructL() - { - RunL(); - } - - -EXPORT_C void CMemSpyEngineDriveEntry::SetObserver( MMemSpyEngineDriveEntryObserver* aObserver ) - { - iObserver = aObserver; - } - - -void CMemSpyEngineDriveEntry::RefreshL() - { - CMemSpyEngineOutputList* items = CMemSpyEngineOutputList::NewL(); - delete iItems; - iItems = items; - - /* - RFs13VolumeIOParamEiR18TVolumeIOParamInfo @ 344 NONAME - RFs17FileSystemSubTypeEiR6TDes16 @ 345 NONAME - RFs18QueryVolumeInfoExtEi22TQueryVolumeInfoExtCmdR5TDes8 @ 346 NONAME - */ - const TInt err1 = FsSession().Drive( iDriveInfo, iDriveNumber ); - const TInt err2 = FsSession().Volume( iVolumeInfo, iDriveNumber ); - if ( err1 || err2 ) - { - _LIT( KUnavailable, "Unavailable"); - iItems->AddItemL( KUnavailable ); - - // Mostly empty caption - CreateCaptionL( KNullDesC, KNullDesC ); - } - else - { - // Literal constants - TBuf temp; - TBuf item; - - AddStandardFieldsL(); - - _LIT( KEntry2a, "Media Type"); - TBuf<20> mediaType; - GetMediaTypeText( iDriveInfo.iType, mediaType ); - iItems->AddItemL( KEntry2a, mediaType ); - - _LIT( KEntry2b, "Battery Status"); - GetBatteryState( iDriveInfo.iBattery, temp ); - iItems->AddItemL( KEntry2b, temp ); - - // Now have enough data to create caption - CreateCaptionL( iVolumeInfo.iName, mediaType ); - - CreateDriveAttributesL( item ); - CreateMediaAttributesL( item ); - - _LIT( KEntry3a, "Volume Name"); - if ( iVolumeInfo.iName.Length() ) - { - iItems->AddItemL( KEntry3a, iVolumeInfo.iName ); - } - else - { - iItems->AddItemL( KEntry3a, KMemSpyVolumeLabelNotSet ); - } - - _LIT( KEntry3, "Volume UID"); - iItems->AddItemHexL( KEntry3, iVolumeInfo.iUniqueID ); - - _LIT( KEntry4, "Volume Size"); - temp = MemSpyEngineUtils::FormatSizeText( iVolumeInfo.iSize ); - iItems->AddItemL( KEntry4, temp ); - - _LIT( KEntry5, "Volume Free"); - temp = MemSpyEngineUtils::FormatSizeText( iVolumeInfo.iFree ); - iItems->AddItemL( KEntry5, temp ); - - TMediaSerialNumber serialNum; - if ( FsSession().GetMediaSerialNumber( serialNum, iDriveNumber ) == KErrNone ) - { - _LIT( KEntry6, "Serial Number"); - TBuf serialNumUnicode; - serialNumUnicode.Copy( serialNum ); - iItems->AddItemL( KEntry6, serialNumUnicode ); - } - - if ( FsSession().FileSystemName( temp, iDriveNumber ) == KErrNone ) - { - _LIT( KEntry7, "File System"); - iItems->AddItemL( KEntry7, temp ); - } - } - } - - -CMemSpyEngineDriveEntry* CMemSpyEngineDriveEntry::NewLC( CMemSpyEngineDriveList& aList, TDriveNumber aDriveNumber ) - { - CMemSpyEngineDriveEntry* self = new(ELeave) CMemSpyEngineDriveEntry( aList, aDriveNumber ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -void CMemSpyEngineDriveEntry::CreateDriveAttributesL( TDes& aItemBuf ) - { - TInt driveAttribIndex = 0; - _LIT( KEntryText, "Drive Attribute %d"); - - if ( iDriveInfo.iDriveAtt & KDriveAttLocal ) - { - _LIT( KAttribName, "Local" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iDriveAtt & KDriveAttRom ) - { - _LIT( KAttribName, "ROM" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iDriveAtt & KDriveAttRedirected ) - { - _LIT( KAttribName, "Redirected" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iDriveAtt & KDriveAttSubsted ) - { - _LIT( KAttribName, "Substed" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iDriveAtt & KDriveAttInternal ) - { - _LIT( KAttribName, "Internal" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iDriveAtt & KDriveAttRemovable ) - { - _LIT( KAttribName, "Removable" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iDriveAtt & KDriveAttRemote ) - { - _LIT( KAttribName, "Remote" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iDriveAtt & KDriveAttTransaction ) - { - _LIT( KAttribName, "Transaction" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iDriveAtt & KMemSpyDriveAttPageable ) - { - _LIT( KAttribName, "Pageable" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iDriveAtt & KDriveAttRemovable ) - { - _LIT( KAttribName, "Removable" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - } - - -void CMemSpyEngineDriveEntry::CreateMediaAttributesL( TDes& aItemBuf ) - { - TInt driveAttribIndex = 0; - _LIT( KEntryText, "Media Attribute %d"); - - if ( iDriveInfo.iMediaAtt & KMediaAttVariableSize ) - { - _LIT( KAttribName, "Variable Size" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iMediaAtt & KMediaAttDualDensity ) - { - _LIT( KAttribName, "Dual Density" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iMediaAtt & KMediaAttFormattable ) - { - _LIT( KAttribName, "Formattable" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iMediaAtt & KMediaAttWriteProtected ) - { - _LIT( KAttribName, "Write Protected" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iMediaAtt & KMediaAttLockable ) - { - _LIT( KAttribName, "Lockable" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iMediaAtt & KMediaAttLocked ) - { - _LIT( KAttribName, "Locked" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iMediaAtt & KMediaAttHasPassword ) - { - _LIT( KAttribName, "Has Password" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iMediaAtt & KMediaAttReadWhileWrite ) - { - _LIT( KAttribName, "Read-while-Write" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iMediaAtt & KMediaAttDeleteNotify ) - { - _LIT( KAttribName, "Delete Notify" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - if ( iDriveInfo.iMediaAtt & KMemSpyMediaAttPageable ) - { - _LIT( KAttribName, "Pageable" ); - aItemBuf.Format( KEntryText, ++driveAttribIndex ); - iItems->AddItemL( aItemBuf, KAttribName ); - } - } - - -void CMemSpyEngineDriveEntry::AddStandardFieldsL() - { - _LIT( KEntry1, "Unit Name"); - const TDriveName driveUnitName = iDriveUnit.Name(); - iItems->AddItemL( KEntry1, driveUnitName ); - - _LIT( KEntry2, "Unit Number"); - TBuf<30> temp; - CMemSpyEngineHelperFileSystem::GetDriveNumberText( iDriveNumber, temp ); - iItems->AddItemL( KEntry2, temp ); - - const TDriveNumber sysDrive = GetSystemDrive(); - if ( sysDrive == iDriveNumber ) - { - _LIT( KEntry3, "System Drive"); - iItems->AddItemYesNoL( KEntry3, ETrue ); - } - } - - -void CMemSpyEngineDriveEntry::CreateCaptionL( const TDesC& aVolumeName, const TDesC& aMediaType ) - { - TBuf<256 * 2> caption; - - // Always include drive unit name - const TDriveName driveUnitName = iDriveUnit.Name(); - caption.AppendFormat( _L("\t%S"), &driveUnitName ); - - // If we have a volume name, then include that too - if ( aVolumeName.Length() ) - { - caption.AppendFormat( _L(" [%S]"), &aVolumeName ); - } - - // New line - caption.Append( _L("\t\t") ); - - // Include media type if known, or unknown otherwise - if ( aMediaType.Length() ) - { - caption.Append( aMediaType ); - } - else - { - _LIT( KUnknownMediaType, "Unknown" ); - caption.Append( KUnknownMediaType ); - } - - HBufC* finalCaption = caption.AllocL(); - delete iCaption; - iCaption = finalCaption; - } - -void CMemSpyEngineDriveEntry::GetMediaTypeText( TMediaType aType, TDes& aText ) - { - switch( aType ) - { - case EMediaNotPresent: - aText.Copy( _L("Not Present") ); - break; - case EMediaFloppy: - aText.Copy( _L("Floppy") ); - break; - case EMediaHardDisk: - aText.Copy( _L("Hard Disk") ); - break; - case EMediaCdRom: - aText.Copy( _L("CD-ROM") ); - break; - case EMediaRam: - aText.Copy( _L("RAM") ); - break; - case EMediaFlash: - aText.Copy( _L("Flash") ); - break; - case EMediaRom: - aText.Copy( _L("ROM") ); - break; - case EMediaRemote: - aText.Copy( _L("Remote") ); - break; - case EMediaNANDFlash: - aText.Copy( _L("NAND Flash") ); - break; - default: - case EMediaUnknown: - aText.Copy( _L("Unknown") ); - break; - } - } - - -void CMemSpyEngineDriveEntry::GetBatteryState( TBatteryState aBatteryState, TDes& aText ) - { - switch( aBatteryState ) - { - case EBatNotSupported: - aText.Copy( _L("Not Supported") ); - break; - case EBatGood: - aText.Copy( _L("Good") ); - break; - case EBatLow: - aText.Copy( _L("Low") ); - break; - default: - aText.Copy( _L("Unknown") ); - break; - } - } - - -TDriveNumber CMemSpyEngineDriveEntry::GetSystemDrive() - { - return CMemSpyEngineHelperFileSystem::GetSystemDrive(); - } - - -EXPORT_C TInt CMemSpyEngineDriveEntry::MdcaCount() const - { - return iItems->Count(); - } - - -EXPORT_C TPtrC CMemSpyEngineDriveEntry::MdcaPoint( TInt aIndex ) const - { - return iItems->MdcaPoint( aIndex ); - } - - -void CMemSpyEngineDriveEntry::RunL() - { - FsSession().NotifyChange( ENotifyDisk, iStatus ); - SetActive(); - // - TRAP_IGNORE( RefreshL() ); - // - if ( iObserver != NULL ) - { - TRAP_IGNORE( iObserver->HandleDriveEntryChangedL( *this ) ); - } - } - - -void CMemSpyEngineDriveEntry::DoCancel() - { - FsSession().NotifyChangeCancel(); - } - - -RFs& CMemSpyEngineDriveEntry::FsSession() - { - return iList.FsSession(); - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -CMemSpyEngineOpenFileListEntry::CMemSpyEngineOpenFileListEntry() - { - } - - -CMemSpyEngineOpenFileListEntry::~CMemSpyEngineOpenFileListEntry() - { - delete iFileName; - } - - -void CMemSpyEngineOpenFileListEntry::ConstructL( const TEntry& aEntry ) - { - iFileName = aEntry.iName.AllocL(); - iAtt = aEntry.iAtt; - iType = aEntry.iType; - iSize = aEntry.iSize; - iModified = aEntry.iModified; - } - - -CMemSpyEngineOpenFileListEntry* CMemSpyEngineOpenFileListEntry::NewLC( const TEntry& aEntry ) - { - CMemSpyEngineOpenFileListEntry* self = new(ELeave) CMemSpyEngineOpenFileListEntry(); - CleanupStack::PushL( self ); - self->ConstructL( aEntry ); - return self; - } - - -EXPORT_C const TDesC& CMemSpyEngineOpenFileListEntry::FileName() const - { - return *iFileName; - } - - -EXPORT_C TInt CMemSpyEngineOpenFileListEntry::Size() const - { - return iSize; - } - - -TInt CMemSpyEngineOpenFileListEntry::UniqueFileId() const - { - return iUniqueFileIdentifier; - } - - -void CMemSpyEngineOpenFileListEntry::SetUniqueFileId( TInt aValue ) - { - iUniqueFileIdentifier = aValue; - } - - - - - - - - - - - - - - - - - - - - - - - - - -CMemSpyEngineOpenFileListForThread::CMemSpyEngineOpenFileListForThread( const TThreadId& aThreadId, const TProcessId& aProcessId ) -: iThreadId( aThreadId ), iProcessId( aProcessId ) - { - } - - -CMemSpyEngineOpenFileListForThread::~CMemSpyEngineOpenFileListForThread() - { - iItems.ResetAndDestroy(); - iItems.Close(); - delete iThreadName; - } - - -void CMemSpyEngineOpenFileListForThread::ConstructL( const TDesC& aThreadName, const CFileList& aList ) - { - iThreadName = aThreadName.AllocL(); - - // Create fs entries - const TInt entryCount = aList.Count(); - for(TInt i=0; iConstructL( aThreadName, aList ); - return self; - } - - -EXPORT_C const TDesC& CMemSpyEngineOpenFileListForThread::ThreadName() const - { - return *iThreadName; - } - - -EXPORT_C const TThreadId& CMemSpyEngineOpenFileListForThread::ThreadId() const - { - return iThreadId; - } - - -EXPORT_C const TProcessId& CMemSpyEngineOpenFileListForThread::ProcessId() const - { - return iProcessId; - } - - -EXPORT_C TInt CMemSpyEngineOpenFileListForThread::Count() const - { - return iItems.Count(); - } - - -EXPORT_C const CMemSpyEngineOpenFileListEntry& CMemSpyEngineOpenFileListForThread::At( TInt aIndex ) const - { - return *iItems[ aIndex ]; - } - - -void CMemSpyEngineOpenFileListForThread::AddL( CMemSpyEngineOpenFileListEntry* aEntry ) - { - // Ensure we increment the unique filename counter if adding an entry where the same filename - // already is registered with the list. - CMemSpyEngineOpenFileListEntry* existingEntry = EntryByFileName( aEntry->FileName() ); - if ( existingEntry ) - { - // EntryByFileName() always returns the most recent entry with the same name. The list - // itself is not sorted as entries are always appended to it. - const TInt lastUID = existingEntry->UniqueFileId(); -#ifdef _DEBUG - RDebug::Print( _L("CMemSpyEngineOpenFileListForThread::AddL() - searched for %S and found existing entry with UID: %d"), &aEntry->FileName(), lastUID ); -#endif - - aEntry->SetUniqueFileId( lastUID + 1 ); - } - - iItems.AppendL( aEntry ); - } - - -CMemSpyEngineOpenFileListEntry* CMemSpyEngineOpenFileListForThread::EntryByFileName( const TDesC& aFileName ) - { - CMemSpyEngineOpenFileListEntry* ret = NULL; - // - const TInt count = iItems.Count(); - for( TInt i=count-1; i>=0; i-- ) - { - CMemSpyEngineOpenFileListEntry* item = iItems[ i ]; - if ( item->FileName().CompareF( aFileName ) == 0 ) - { - ret = item; - break; - } - } - // - return ret; - } - - - - - - - - - - -CMemSpyEngineOpenFileList::CMemSpyEngineOpenFileList() - { - } - - -EXPORT_C CMemSpyEngineOpenFileList::~CMemSpyEngineOpenFileList() - { - iItems.ResetAndDestroy(); - iItems.Close(); - } - - -void CMemSpyEngineOpenFileList::ConstructL( CMemSpyEngine& aEngine ) - { - _LIT( KUnknownThread, "Unknown Thread" ); - TFullName threadName; - TOpenFileScan scanner( aEngine.FsSession() ); - // - CFileList* list = NULL; - scanner.NextL( list ); - while( list != NULL ) - { - CleanupStack::PushL( list ); - - // Reset name - threadName = KUnknownThread; - - // Try to get real thread name - TProcessId procId; - RThread thread; - if ( aEngine.Driver().OpenThread( scanner.ThreadId(), thread ) == KErrNone ) - { - RProcess process; - if ( thread.Process( process ) == KErrNone ) - { - procId = process.Id(); - process.Close(); - } - // - thread.FullName( threadName ); - thread.Close(); - } - - // Create thread entry - CMemSpyEngineOpenFileListForThread* threadEntry = CMemSpyEngineOpenFileListForThread::NewLC( threadName, scanner.ThreadId(), procId, *list ); - iItems.AppendL( threadEntry ); - CleanupStack::Pop( threadEntry ); - - // Destroy list and move on to next thread. - CleanupStack::PopAndDestroy( list ); - list = NULL; - scanner.NextL( list ); - } - } - - -CMemSpyEngineOpenFileList* CMemSpyEngineOpenFileList::NewLC( CMemSpyEngine& aEngine ) - { - CMemSpyEngineOpenFileList* self = new(ELeave) CMemSpyEngineOpenFileList(); - CleanupStack::PushL( self ); - self->ConstructL( aEngine ); - return self; - } - - -EXPORT_C TInt CMemSpyEngineOpenFileList::Count() const - { - return iItems.Count(); - } - - -EXPORT_C const CMemSpyEngineOpenFileListForThread& CMemSpyEngineOpenFileList::At( TInt aIndex ) const - { - return *iItems[ aIndex ]; - } -