diff -r 000000000000 -r bde4ae8d615e os/kernelhwsrv/kerneltest/f32test/plugins/version_2/src/combinational2_plugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/kernelhwsrv/kerneltest/f32test/plugins/version_2/src/combinational2_plugin.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,316 @@ +// Copyright (c) 2007-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: +// + +#include "Combinational2_plugin.h" +#include "plugincommon.h" +#include + + +/** +Leaving New function for the plugin +@internalComponent +*/ +CCombinational2Plugin* CCombinational2Plugin::NewL() + { + CCombinational2Plugin* self = new(ELeave) CCombinational2Plugin; + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + + +/** +Constructor for the plugin +@internalComponent +*/ +CCombinational2Plugin::CCombinational2Plugin() : iInterceptsEnabled(EFalse), + iLogging(ETrue) + { + } + + +void CCombinational2Plugin::ConstructL() + { + } + +/** +The destructor for the plugin +@internalComponent +*/ +CCombinational2Plugin::~CCombinational2Plugin() + { + } + +/** +Initialise the plugin. +@internalComponent +*/ +void CCombinational2Plugin::InitialiseL() + { + _LOG(_L("CCombinational2Plugin InitialiseL")); + EnableInterceptsL(); + } + +/** +Enable the plugin's intercepts. +@internalComponent +*/ +void CCombinational2Plugin::EnableInterceptsL() + { + if (iInterceptsEnabled) return; + + User::LeaveIfError(RegisterIntercept(EFsFileRead, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileWrite, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsDirOpen, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileLock, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileUnLock, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileSeek, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileSize, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileSetSize, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsDirReadOne, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsDirReadPacked, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileOpen, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileCreate, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileReplace, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileRename, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsReadFileSection,EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsFileSubClose, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsEntry, EPrePostIntercept)); + User::LeaveIfError(RegisterIntercept(EFsSetEntry, EPrePostIntercept)); + + _LOG(_L("Combinational2 Plugin: Enabled intercepts.")); + + iInterceptsEnabled = ETrue; + } + +/** +Disable the plugin's intercepts. +@internalComponent +*/ +void CCombinational2Plugin::DisableInterceptsL() + { + if (!iInterceptsEnabled) return; + + User::LeaveIfError(UnregisterIntercept(EFsFileRead, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileRename, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileWrite, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsDirOpen, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileLock, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileUnLock, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileSeek, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileSize, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileSetSize, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileCreate, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileOpen, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileReplace, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsFileSubClose, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsReadFileSection, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsDirReadOne, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsDirReadPacked, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsEntry, EPrePostIntercept)); + User::LeaveIfError(UnregisterIntercept(EFsSetEntry, EPrePostIntercept)); + + _LOG(_L("Combinational2 Plugin: Disabled intercepts.")); + + iInterceptsEnabled = EFalse; + } + +/* + Test second stage: - This is part of a test which is opening a different file in CombinationalPlugin1. + We need to get the entry here and make sure its for the right file. +*/ +TInt CCombinational2Plugin::DoEntry(TFsPluginRequest& aRequest) + { + TInt err = KErrNone; + + if(aRequest.IsPostOperation()) //post + { + } + else // PRE + { + err = KErrNone; + TEntry entry; + + RFsPlugin fs(aRequest); + + TFileName name; + name = aRequest.Src().FullName(); //STF: Is this valid for entry? + + err = fs.Connect(); + iLastError = err; + iLineNumber = __LINE__; + if(err!=KErrNone) + return err; + + err = fs.Entry(name, entry); + iLastError = err; + iLineNumber = __LINE__; + if(err!=KErrNone) + return err; + + TPckgC e(entry); + err = aRequest.Write(TFsPluginRequest::EEntry,e); + iLastError = err; + iLineNumber = __LINE__; + if(err!=KErrNone) + return err; + + fs.Close(); + + return KErrCompletion; + } + return err; + } + +/** +Handle requests +@internalComponent +*/ +TInt CCombinational2Plugin::DoRequestL(TFsPluginRequest& aRequest) + { + TInt err = KErrNone; + + TInt function = aRequest.Function(); + + switch(function) + { + case EFsEntry: + err = DoEntry(aRequest); + break; + default: + break; + } + + return err; + } + + +CFsPluginConn* CCombinational2Plugin::NewPluginConnL() + { + return new(ELeave) CCombinational2PluginConn(); + } + + +//Synchronous RPlugin::DoControl +TInt CCombinational2Plugin::FsPluginDoControlL(CFsPluginConnRequest& aRequest) + { + TInt err = KErrNone; + + TInt function = aRequest.Function(); + + TPckg errCodeDes(iLastError); + TPckg lineNumberDes(iLineNumber); + + switch(function) + { + case KPluginGetError: + { + TRAP(err,aRequest.WriteParam1L(errCodeDes)); + TRAP(err,aRequest.WriteParam2L(lineNumberDes)); + break; + } + default: + break; + } + + return err; + } + + +TInt CCombinational2PluginConn::DoControl(CFsPluginConnRequest& aRequest) + { + return ((CCombinational2Plugin*)Plugin())->FsPluginDoControlL(aRequest); + } + +void CCombinational2PluginConn::DoRequest(CFsPluginConnRequest& aRequest) + { + DoControl(aRequest); + } + +void CCombinational2PluginConn::DoCancel(TInt /*aReqMask*/) + { + } + +//factory functions + +class CCombinational2PluginFactory : public CFsPluginFactory + { +public: + CCombinational2PluginFactory(); + virtual TInt Install(); + virtual CFsPlugin* NewPluginL(); + virtual CFsPlugin* NewPluginConnL(); + virtual TInt UniquePosition(); + }; + +/** +Constructor for the plugin factory +@internalComponent +*/ +CCombinational2PluginFactory::CCombinational2PluginFactory() + { + } + +/** +Install function for the plugin factory +@internalComponent +*/ +TInt CCombinational2PluginFactory::Install() + { + SetSupportedDrives(KPluginSupportAllDrives); + return(SetName(&KCombinational2PluginName)); + } + +/** +@internalComponent +*/ +TInt CCombinational2PluginFactory::UniquePosition() + { + return(KCombinational2Pos); + } + +/** +Plugin factory function +@internalComponent +*/ +CFsPlugin* CCombinational2PluginFactory::NewPluginL() + + { + return CCombinational2Plugin::NewL(); + } + +/** +Plugin factory function +@internalComponent +*/ +CFsPlugin* CCombinational2PluginFactory::NewPluginConnL() + + { + return CCombinational2Plugin::NewL(); + } + +/** +Create a new Plugin +@internalComponent +*/ +extern "C" { + +EXPORT_C CFsPluginFactory* CreateFileSystem() + { + return(new CCombinational2PluginFactory()); + } +} +