1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/kernelhwsrv/kerneltest/f32test/plugins/version_2/src/modifier_plugin.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,2350 @@
1.4 +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of the License "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +//
1.18 +
1.19 +#include "modifier_plugin.h"
1.20 +#include "plugincommon.h"
1.21 +#include <f32pluginutils.h>
1.22 +
1.23 +/**
1.24 +Leaving New function for the plugin
1.25 +@internalComponent
1.26 +*/
1.27 +CModifierPlugin* CModifierPlugin::NewL()
1.28 + {
1.29 + CModifierPlugin* self = new(ELeave) CModifierPlugin;
1.30 + CleanupStack::PushL(self);
1.31 + self->ConstructL();
1.32 + CleanupStack::Pop();
1.33 + return self;
1.34 + }
1.35 +
1.36 +
1.37 +/**
1.38 +Constructor for the plugin
1.39 +@internalComponent
1.40 +*/
1.41 +CModifierPlugin::CModifierPlugin() : iInterceptsEnabled(EFalse),
1.42 + iLogging(ETrue)
1.43 + {
1.44 + }
1.45 +
1.46 +
1.47 +void CModifierPlugin::ConstructL()
1.48 + {
1.49 + }
1.50 +
1.51 +/**
1.52 +The destructor for the plugin
1.53 +@internalComponent
1.54 +*/
1.55 +CModifierPlugin::~CModifierPlugin()
1.56 + {
1.57 + }
1.58 +
1.59 +/**
1.60 +Initialise the plugin.
1.61 +@internalComponent
1.62 +*/
1.63 +void CModifierPlugin::InitialiseL()
1.64 + {
1.65 + EnableInterceptsL();
1.66 + }
1.67 +
1.68 +/**
1.69 +Enable the plugin's intercepts.
1.70 +@internalComponent
1.71 +*/
1.72 +void CModifierPlugin::EnableInterceptsL()
1.73 + {
1.74 + if (iInterceptsEnabled) return;
1.75 +
1.76 + User::LeaveIfError(RegisterIntercept(EFsFileRead, EPreIntercept));
1.77 + User::LeaveIfError(RegisterIntercept(EFsFileWrite, EPreIntercept));
1.78 + User::LeaveIfError(RegisterIntercept(EFsFileRename, EPreIntercept));
1.79 + User::LeaveIfError(RegisterIntercept(EFsFileCreate, EPreIntercept));
1.80 + User::LeaveIfError(RegisterIntercept(EFsFileSize, EPreIntercept));
1.81 + User::LeaveIfError(RegisterIntercept(EFsFileSetSize, EPreIntercept));
1.82 + User::LeaveIfError(RegisterIntercept(EFsFileLock, EPreIntercept));
1.83 + User::LeaveIfError(RegisterIntercept(EFsFileUnLock, EPreIntercept));
1.84 + User::LeaveIfError(RegisterIntercept(EFsFileOpen, EPreIntercept));
1.85 + User::LeaveIfError(RegisterIntercept(EFsFileReplace, EPreIntercept));
1.86 + User::LeaveIfError(RegisterIntercept(EFsReadFileSection, EPreIntercept));
1.87 + User::LeaveIfError(RegisterIntercept(EFsDirReadOne, EPreIntercept));
1.88 + User::LeaveIfError(RegisterIntercept(EFsDirReadPacked, EPreIntercept));
1.89 + User::LeaveIfError(RegisterIntercept(EFsFileSubClose, EPreIntercept));
1.90 + User::LeaveIfError(RegisterIntercept(EFsDirOpen, EPreIntercept));
1.91 + User::LeaveIfError(RegisterIntercept(EFsFileTemp, EPreIntercept));
1.92 + User::LeaveIfError(RegisterIntercept(EFsDelete, EPreIntercept));
1.93 + User::LeaveIfError(RegisterIntercept(EFsReplace, EPreIntercept));
1.94 + User::LeaveIfError(RegisterIntercept(EFsRename, EPreIntercept));
1.95 + User::LeaveIfError(RegisterIntercept(EFsEntry, EPreIntercept));
1.96 + User::LeaveIfError(RegisterIntercept(EFsSetEntry, EPreIntercept));
1.97 + User::LeaveIfError(RegisterIntercept(EFsFileSeek, EPreIntercept));
1.98 + User::LeaveIfError(RegisterIntercept(EFsPluginDoControl, EPreIntercept));
1.99 + User::LeaveIfError(RegisterIntercept(EFsPluginDoRequest, EPreIntercept));
1.100 + User::LeaveIfError(RegisterIntercept(EFsVolume, EPreIntercept));
1.101 +
1.102 +
1.103 + _LOG(_L("Modifier Plugin: Enabled intercepts."));
1.104 +
1.105 + iInterceptsEnabled = ETrue;
1.106 + }
1.107 +
1.108 +/**
1.109 +Disable the plugin's intercepts.
1.110 +@internalComponent
1.111 +*/
1.112 +void CModifierPlugin::DisableInterceptsL()
1.113 + {
1.114 + if (!iInterceptsEnabled) return;
1.115 +
1.116 + User::LeaveIfError(UnregisterIntercept(EFsFileRead, EPreIntercept));
1.117 + User::LeaveIfError(UnregisterIntercept(EFsFileWrite, EPreIntercept));
1.118 + User::LeaveIfError(UnregisterIntercept(EFsFileRename, EPreIntercept));
1.119 + User::LeaveIfError(UnregisterIntercept(EFsFileCreate, EPreIntercept));
1.120 + User::LeaveIfError(UnregisterIntercept(EFsFileSize, EPreIntercept));
1.121 + User::LeaveIfError(UnregisterIntercept(EFsFileSetSize, EPreIntercept));
1.122 + User::LeaveIfError(UnregisterIntercept(EFsFileLock, EPreIntercept));
1.123 + User::LeaveIfError(UnregisterIntercept(EFsFileUnLock, EPreIntercept));
1.124 + User::LeaveIfError(UnregisterIntercept(EFsFileOpen, EPreIntercept));
1.125 + User::LeaveIfError(UnregisterIntercept(EFsFileReplace, EPreIntercept));
1.126 + User::LeaveIfError(UnregisterIntercept(EFsReadFileSection, EPreIntercept));
1.127 + User::LeaveIfError(UnregisterIntercept(EFsDirReadOne, EPreIntercept));
1.128 + User::LeaveIfError(UnregisterIntercept(EFsDirReadPacked, EPreIntercept));
1.129 + User::LeaveIfError(UnregisterIntercept(EFsFileSubClose, EPreIntercept));
1.130 + User::LeaveIfError(UnregisterIntercept(EFsDirOpen, EPreIntercept));
1.131 + User::LeaveIfError(UnregisterIntercept(EFsFileTemp, EPreIntercept));
1.132 + User::LeaveIfError(UnregisterIntercept(EFsDelete, EPreIntercept));
1.133 + User::LeaveIfError(UnregisterIntercept(EFsReplace, EPreIntercept));
1.134 + User::LeaveIfError(UnregisterIntercept(EFsRename, EPreIntercept));
1.135 + User::LeaveIfError(UnregisterIntercept(EFsEntry, EPreIntercept));
1.136 + User::LeaveIfError(UnregisterIntercept(EFsSetEntry, EPreIntercept));
1.137 + User::LeaveIfError(UnregisterIntercept(EFsFileSeek, EPreIntercept));
1.138 + User::LeaveIfError(UnregisterIntercept(EFsVolume, EPreIntercept));
1.139 +
1.140 + _LOG(_L("Modifier Plugin: Disabled intercepts."));
1.141 +
1.142 + iInterceptsEnabled = EFalse;
1.143 + }
1.144 +
1.145 +/**
1.146 +Handle requests
1.147 +@internalComponent
1.148 +*/
1.149 +TInt CModifierPlugin::DoRequestL(TFsPluginRequest& aRequest)
1.150 + {
1.151 + iLastError = KErrNone;
1.152 + iLineNumber = __LINE__;
1.153 +
1.154 + TInt err = KErrNone;
1.155 +
1.156 + TInt function = aRequest.Function();
1.157 +
1.158 + if(aRequest.IsPostOperation())
1.159 + {
1.160 + _LOG2(_L("CModifierPlugin::DoRequestL for Function %d in Post-Interception"),function);
1.161 + }
1.162 + else
1.163 + {
1.164 + _LOG2(_L("CModifierPlugin::DoRequestL for Function %d in Pre-Interception"),function);
1.165 + }
1.166 +
1.167 + switch(function)
1.168 + {
1.169 + case EFsFileRead:
1.170 + TRAP(err, FsFileReadL(aRequest));
1.171 + break;
1.172 +
1.173 + case EFsFileWrite:
1.174 + TRAP(err, FsFileWriteL(aRequest));
1.175 + break;
1.176 +
1.177 + case EFsFileRename:
1.178 + TRAP(err, FsFileRenameL(aRequest));
1.179 + break;
1.180 +
1.181 + case EFsFileCreate:
1.182 + TRAP(err, FsFileCreateL(aRequest));
1.183 + break;
1.184 +
1.185 + case EFsFileSize:
1.186 + TRAP(err, FsFileSizeL(aRequest));
1.187 + break;
1.188 +
1.189 + case EFsFileSetSize:
1.190 + TRAP(err, FsFileSetSizeL(aRequest));
1.191 + break;
1.192 +
1.193 + case EFsFileLock:
1.194 + TRAP(err, FsFileLockL(aRequest));
1.195 + break;
1.196 +
1.197 + case EFsFileUnLock:
1.198 + TRAP(err, FsFileUnLockL(aRequest));
1.199 + break;
1.200 +
1.201 + case EFsFileSeek:
1.202 + TRAP(err, FsFileSeekL(aRequest));
1.203 + break;
1.204 +
1.205 + case EFsDirReadOne:
1.206 + TRAP(err,FsDirReadOneL(aRequest));
1.207 + break;
1.208 +
1.209 + case EFsDirReadPacked:
1.210 + TRAP(err,FsDirReadPackedL(aRequest));
1.211 + break;
1.212 +
1.213 + case EFsFileOpen:
1.214 + TRAP(err, FsFileOpenL(aRequest));
1.215 + break;
1.216 +
1.217 + case EFsFileReplace:
1.218 + TRAP(err, FsFileReplaceL(aRequest));
1.219 + break;
1.220 +
1.221 + case EFsReadFileSection:
1.222 + TRAP(err, FsReadFileSectionL(aRequest));
1.223 + break;
1.224 +
1.225 + case EFsFileSubClose:
1.226 + TRAP(err, FsFileSubCloseL(aRequest));
1.227 + break;
1.228 +
1.229 + case EFsDirOpen:
1.230 + TRAP(err, FsDirOpenL(aRequest));
1.231 + break;
1.232 +
1.233 + case EFsFileTemp:
1.234 + TRAP(err, FsFileTempL(aRequest));
1.235 + break;
1.236 +
1.237 + case EFsDelete:
1.238 + TRAP(err, FsDeleteL(aRequest));
1.239 + break;
1.240 +
1.241 + case EFsReplace:
1.242 + TRAP(err, FsReplaceL(aRequest));
1.243 + break;
1.244 +
1.245 + case EFsRename:
1.246 + TRAP(err, FsRenameL(aRequest));
1.247 + break;
1.248 +
1.249 + case EFsEntry:
1.250 + TRAP(err, FsEntryL(aRequest));
1.251 + break;
1.252 +
1.253 + case EFsSetEntry:
1.254 + TRAP(err, FsSetEntryL(aRequest));
1.255 + break;
1.256 +
1.257 + case EFsVolume:
1.258 + TRAP(err, FsVolumeL(aRequest));
1.259 + break;
1.260 +
1.261 + default:
1.262 + break;
1.263 + }
1.264 +
1.265 + return err;
1.266 + }
1.267 +
1.268 +
1.269 +/**
1.270 +@internalComponent
1.271 +*/
1.272 +void CModifierPlugin::FsFileUnLockL(TFsPluginRequest& aRequest)
1.273 + {
1.274 + TInt length = 0;
1.275 + TInt64 pos = 0;
1.276 + TFileName filename;
1.277 + TParse parse;
1.278 +
1.279 + TInt err = aRequest.FileName(filename);
1.280 + iLastError = err;
1.281 + iLineNumber = __LINE__;
1.282 + if(err!=KErrNone)
1.283 + User::Leave(err); //trapped in DoRequestL
1.284 +
1.285 + err = aRequest.Read(TFsPluginRequest::ELength, length);
1.286 + iLastError = err;
1.287 + iLineNumber = __LINE__;
1.288 + if(err!=KErrNone)
1.289 + User::Leave(err); //trapped in DoRequestL
1.290 +
1.291 + err = aRequest.Read(TFsPluginRequest::EPosition, pos);
1.292 + iLastError = err;
1.293 + iLineNumber = __LINE__;
1.294 + if(err!=KErrNone)
1.295 + User::Leave(err); //trapped in DoRequestL
1.296 +
1.297 + parse.Set(filename, NULL, NULL);
1.298 + TPtrC extension(parse.Ext());
1.299 +
1.300 + _LOG4(_L("CModifierPlugin::FsFileUnLockL, file: %S, pos: %d, length: %d"), &filename, pos, length);
1.301 +
1.302 + if (aRequest.IsPostOperation())
1.303 + {
1.304 + _LOG(_L("CModifierPlugin::FsFileUnLockL, post intercept"));
1.305 + }
1.306 + else
1.307 + {
1.308 + _LOG(_L("CModifierPlugin::FsFileUnLockL, pre intercept"));
1.309 + if(extension.CompareF(_L(".unlock")) == 0)
1.310 + {
1.311 + RFilePlugin fileplugin(aRequest);
1.312 + err = fileplugin.AdoptFromClient();
1.313 + iLastError = err;
1.314 + iLineNumber = __LINE__;
1.315 + if(err!=KErrNone)
1.316 + User::Leave(err); //trapped in DoRequestL
1.317 +
1.318 + err = fileplugin.UnLock(pos, length);
1.319 + iLastError = err;
1.320 + iLineNumber = __LINE__;
1.321 + if(err!=KErrNone)
1.322 + User::Leave(err); //trapped in DoRequestL
1.323 +
1.324 + fileplugin.Close();
1.325 +
1.326 + User::Leave(KErrCompletion);
1.327 + }
1.328 + }
1.329 + }
1.330 +
1.331 +/**
1.332 +@internalComponent
1.333 +*/
1.334 +void CModifierPlugin::FsFileLockL(TFsPluginRequest& aRequest)
1.335 + {
1.336 + TInt length = 0;
1.337 + TInt64 pos = 0;
1.338 + TFileName filename;
1.339 + TParse parse;
1.340 +
1.341 + TInt err = aRequest.FileName(filename);
1.342 + iLastError = err;
1.343 + iLineNumber = __LINE__;
1.344 + if(err!=KErrNone)
1.345 + User::Leave(err); //trapped in DoRequestL
1.346 +
1.347 + err = aRequest.Read(TFsPluginRequest::ELength, length);
1.348 + iLastError = err;
1.349 + iLineNumber = __LINE__;
1.350 + if(err!=KErrNone)
1.351 + User::Leave(err); //trapped in DoRequestL
1.352 +
1.353 + err = aRequest.Read(TFsPluginRequest::EPosition, pos);
1.354 + iLastError = err;
1.355 + iLineNumber = __LINE__;
1.356 + if(err!=KErrNone)
1.357 + User::Leave(err); //trapped in DoRequestL
1.358 +
1.359 + parse.Set(filename, NULL, NULL);
1.360 + TPtrC extension(parse.Ext());
1.361 +
1.362 + _LOG4(_L("CModifierPlugin::FsFileLockL, file: %S, pos: %d, length: %d"), &filename, pos, length);
1.363 +
1.364 + if (aRequest.IsPostOperation())
1.365 + {
1.366 + _LOG(_L("CModifierPlugin::FsFileLockL, post intercept"));
1.367 +
1.368 + // Request read from post interception
1.369 + if (extension.CompareF(_L(".lockread")) == 0)
1.370 + {
1.371 + length = 10;
1.372 + HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1.373 + TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1.374 + _LOG(_L("CModifierPlugin::FsFileLockL , calling FileRead in post intercept"));
1.375 + RFilePlugin fileplugin(aRequest);
1.376 + TInt err = fileplugin.AdoptFromClient();
1.377 + _LOG2(_L("CModifierPlugin::FsFileLockL, Adopt returned %d"), err);
1.378 + iLastError = err;
1.379 + iLineNumber = __LINE__;
1.380 + if(err!=KErrNone)
1.381 + User::Leave(err); //trapped in DoRequestL
1.382 +
1.383 + err = fileplugin.Read(pos, tempBufPtr, length);
1.384 + _LOG2(_L("CModifierPlugin::FsFileLockL, FileRead returned %d"), err);
1.385 + iLastError = err;
1.386 + iLineNumber = __LINE__;
1.387 + if(err!=KErrNone)
1.388 + User::Leave(err); //trapped in DoRequestL
1.389 +
1.390 + fileplugin.Close();
1.391 + CleanupStack::PopAndDestroy();
1.392 + }
1.393 +
1.394 + // Request close from post interception
1.395 + if(extension.CompareF(_L(".lockclose")) == 0)
1.396 + {
1.397 + _LOG(_L("CModifierPlugin::FsFileLockL, calling Close in post intercept "));
1.398 +
1.399 + RFilePlugin fileplugin(aRequest);
1.400 + TInt err = fileplugin.AdoptFromClient();
1.401 + _LOG2(_L("CModifierPlugin::FsFileLockL ,Open %d"), err);
1.402 + iLastError = err;
1.403 + iLineNumber = __LINE__;
1.404 + if(err!=KErrNone)
1.405 + User::Leave(err); //trapped in DoRequestL
1.406 + fileplugin.Close();
1.407 + _LOG(_L("CModifierPlugin::FsFileLockL, Close"));
1.408 + //Try to close twice?
1.409 + fileplugin.Close();
1.410 + _LOG(_L("CModifierPlugin::FsFileLockL, Close"));
1.411 + }
1.412 +
1.413 + }
1.414 + else
1.415 + {
1.416 + _LOG(_L("CModifierPlugin::FsFileLockL, pre intercept"));
1.417 + if((extension.CompareF(_L(".lock")) == 0)
1.418 + || (extension.CompareF(_L(".lockclose")) == 0)
1.419 + || (extension.CompareF(_L(".lockread")) == 0) )
1.420 + {
1.421 + RFilePlugin fileplugin(aRequest);
1.422 + TInt err = fileplugin.AdoptFromClient();
1.423 + iLastError = err;
1.424 + iLineNumber = __LINE__;
1.425 + if(err!=KErrNone)
1.426 + User::Leave(err); //trapped in DoRequestL
1.427 +
1.428 + err = fileplugin.Lock(0,2);
1.429 + iLastError = err;
1.430 + iLineNumber = __LINE__;
1.431 + if(err!=KErrNone)
1.432 + User::Leave(err); //trapped in DoRequestL
1.433 +
1.434 + fileplugin.Close();
1.435 +
1.436 + User::Leave(KErrCompletion);
1.437 + }
1.438 + }
1.439 + }
1.440 +
1.441 +/**
1.442 +@internalComponent
1.443 +*/
1.444 +void CModifierPlugin::FsFileSeekL(TFsPluginRequest& aRequest)
1.445 + {
1.446 + TFileName filename;
1.447 + TParse parse;
1.448 +
1.449 + TInt err = aRequest.FileName(filename);
1.450 + iLastError = err;
1.451 + iLineNumber = __LINE__;
1.452 + if(err!=KErrNone)
1.453 + User::Leave(err); //trapped in DoRequestL
1.454 +
1.455 + parse.Set(filename, NULL, NULL);
1.456 + TPtrC extension(parse.Ext());
1.457 +
1.458 + _LOG2(_L("CModifierPlugin::FsFileSeekL, file: %S"), &filename);
1.459 +
1.460 + if (aRequest.IsPostOperation())
1.461 + {
1.462 + _LOG(_L("CModifierPlugin::FsFileSeekL, post intercept"));
1.463 + }
1.464 + else
1.465 + {
1.466 + _LOG(_L("CModifierPlugin::FsFileSeekL, pre intercept"));
1.467 + if(extension.CompareF(_L(".seek")) == 0)
1.468 + {
1.469 + RFilePlugin fileplugin(aRequest);
1.470 + TInt err = fileplugin.AdoptFromClient();
1.471 + iLastError = err;
1.472 + iLineNumber = __LINE__;
1.473 + if(err!=KErrNone)
1.474 + User::Leave(err); //trapped in DoRequestL
1.475 +
1.476 + TInt64 pos;
1.477 + TSeek mode;
1.478 + err = aRequest.Read(TFsPluginRequest::EPosition, pos);
1.479 + iLastError = err;
1.480 + iLineNumber = __LINE__;
1.481 + if(err!=KErrNone)
1.482 + User::Leave(err); //trapped in DoRequestL
1.483 +
1.484 + err = aRequest.Read(TFsPluginRequest::EMode, (TUint&)mode);
1.485 + iLastError = err;
1.486 + iLineNumber = __LINE__;
1.487 + if(err!=KErrNone)
1.488 + User::Leave(err); //trapped in DoRequestL
1.489 +
1.490 + err = fileplugin.Seek(mode,pos);
1.491 + iLastError = err;
1.492 + iLineNumber = __LINE__;
1.493 + if(err!=KErrNone)
1.494 + User::Leave(err); //trapped in DoRequestL
1.495 +
1.496 + //STF: When we add TInt64 write, should also add TInt write also...
1.497 + TPtrC8 p((TUint8*)&pos,sizeof(TInt));
1.498 + err = aRequest.Write(TFsPluginRequest::ENewPosition, p);
1.499 + iLastError = err;
1.500 + iLineNumber = __LINE__;
1.501 + if(err!=KErrNone)
1.502 + User::Leave(err); //trapped in DoRequestL
1.503 +
1.504 + fileplugin.Close();
1.505 + }
1.506 + }
1.507 + }
1.508 +
1.509 +/**
1.510 +@internalComponent
1.511 +*/
1.512 +void CModifierPlugin::FsFileSizeL(TFsPluginRequest& aRequest)
1.513 + {
1.514 + TFileName filename;
1.515 + TParse parse;
1.516 +
1.517 + TInt err = aRequest.FileName(filename);
1.518 + iLastError = err;
1.519 + iLineNumber = __LINE__;
1.520 + if(err!=KErrNone)
1.521 + User::Leave(err); //trapped in DoRequestL
1.522 +
1.523 + parse.Set(filename, NULL, NULL);
1.524 + TPtrC extension(parse.Ext());
1.525 +
1.526 + _LOG2(_L("CModifierPlugin::FsFileSizeL, file: %S"), &filename);
1.527 +
1.528 + if (aRequest.IsPostOperation())
1.529 + {
1.530 + _LOG(_L("CModifierPlugin::FsFileSizeL, post intercept"));
1.531 + }
1.532 + else
1.533 + {
1.534 + _LOG(_L("CModifierPlugin::FsFileSizeL, pre intercept"));
1.535 + if(extension.CompareF(_L(".size")) == 0)
1.536 + {
1.537 + _LOG(_L("CModifierPlugin::FsFileSizeL"));
1.538 +
1.539 + RFilePlugin fileplugin(aRequest);
1.540 + TInt err = fileplugin.AdoptFromClient();
1.541 + iLastError = err;
1.542 + iLineNumber = __LINE__;
1.543 + if(err!=KErrNone)
1.544 + User::Leave(err); //trapped in DoRequestL
1.545 +
1.546 + TInt64 size=0;
1.547 + err = fileplugin.Size(size);
1.548 + iLastError = err;
1.549 + iLineNumber = __LINE__;
1.550 + if(err!=KErrNone)
1.551 + User::Leave(err); //trapped in DoRequestL
1.552 +
1.553 + TInt sizeLow = I64LOW(size); //STF: Need 64-bit write for size?
1.554 + TPckgBuf<TInt> sizeBuf(sizeLow);
1.555 + err = aRequest.Write(TFsPluginRequest::ESize, sizeBuf);
1.556 + iLastError = err;
1.557 + iLineNumber = __LINE__;
1.558 + if(err!=KErrNone)
1.559 + User::Leave(err); //trapped in DoRequestL
1.560 +
1.561 + fileplugin.Close();
1.562 +
1.563 + // request processed by plug-in
1.564 + User::Leave(KErrCompletion);
1.565 + }
1.566 + }
1.567 + }
1.568 +
1.569 +/**
1.570 +@internalComponent
1.571 +*/
1.572 +void CModifierPlugin::FsFileSetSizeL(TFsPluginRequest& aRequest)
1.573 + {
1.574 + TFileName filename;
1.575 + TParse parse;
1.576 +
1.577 + TInt err = aRequest.FileName(filename);
1.578 + iLastError = err;
1.579 + iLineNumber = __LINE__;
1.580 + if(err!=KErrNone)
1.581 + User::Leave(err); //trapped in DoRequestL
1.582 +
1.583 + parse.Set(filename, NULL, NULL);
1.584 +
1.585 + _LOG2(_L("CModifierPlugin::FsFileSetSizeL, file: %S"), &filename);
1.586 +
1.587 + if (aRequest.IsPostOperation())
1.588 + {
1.589 + _LOG(_L("CModifierPlugin::FsFileSetSizeL, post intercept"));
1.590 + }
1.591 + else
1.592 + {
1.593 + RFilePlugin fileplugin(aRequest);
1.594 + TInt err = fileplugin.AdoptFromClient();
1.595 + iLastError = err;
1.596 + iLineNumber = __LINE__;
1.597 + if(err!=KErrNone)
1.598 + User::Leave(err); //trapped in DoRequestL
1.599 +
1.600 + _LOG(_L("CModifierPlugin::FsFileSetSizeL, pre intercept"));
1.601 +
1.602 + TInt size = 0;
1.603 + err = aRequest.Read(TFsPluginRequest::ESize, size);
1.604 + iLastError = err;
1.605 + iLineNumber = __LINE__;
1.606 + if(err!=KErrNone)
1.607 + User::Leave(err); //trapped in DoRequestL
1.608 +
1.609 + err = fileplugin.SetSize(size);
1.610 + iLastError = err;
1.611 + iLineNumber = __LINE__;
1.612 + if(err!=KErrNone)
1.613 + User::Leave(err); //trapped in DoRequestL
1.614 +
1.615 + fileplugin.Close();
1.616 +
1.617 + // request processed by plug-in
1.618 + User::Leave(KErrCompletion);
1.619 + }
1.620 + }
1.621 +
1.622 +/**
1.623 +@internalComponent
1.624 +*/
1.625 +void CModifierPlugin::FsFileReadL(TFsPluginRequest& aRequest)
1.626 + {
1.627 + TInt length = 0;
1.628 + TInt64 pos = 0;
1.629 + TFileName filename;
1.630 + TParse parse;
1.631 +
1.632 + TInt err = aRequest.FileName(filename);
1.633 + iLastError = err;
1.634 + iLineNumber = __LINE__;
1.635 + if(err!=KErrNone)
1.636 + User::Leave(err); //trapped in DoRequestL
1.637 +
1.638 + err = aRequest.Read(TFsPluginRequest::ELength, length);
1.639 + iLastError = err;
1.640 + iLineNumber = __LINE__;
1.641 + if(err!=KErrNone)
1.642 + User::Leave(err); //trapped in DoRequestL
1.643 +
1.644 + err = aRequest.Read(TFsPluginRequest::EPosition, pos);
1.645 + iLastError = err;
1.646 + iLineNumber = __LINE__;
1.647 + if(err!=KErrNone)
1.648 + User::Leave(err); //trapped in DoRequestL
1.649 +
1.650 + parse.Set(filename, NULL, NULL);
1.651 + TPtrC extension(parse.Ext());
1.652 +
1.653 + _LOG4(_L("CModifierPlugin::FsFileReadL, file: %S, pos: %d, length: %d"), &filename, pos, length);
1.654 +
1.655 + if (aRequest.IsPostOperation())
1.656 + {
1.657 + _LOG(_L("CModifierPlugin::FsFileReadL, post intercept"));
1.658 + }
1.659 + else
1.660 + {
1.661 + _LOG(_L("CModifierPlugin::FsFileReadL, pre intercept"));
1.662 + if (extension.CompareF(_L(".tst")) == 0)
1.663 + {
1.664 +
1.665 + HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1.666 + TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1.667 +
1.668 + _LOG(_L("CModifierPlugin::FsFileReadL, calling FileRead"));
1.669 +
1.670 + RFilePlugin fileplugin(aRequest);
1.671 + TInt err = fileplugin.AdoptFromClient();
1.672 + iLastError = err;
1.673 + iLineNumber = __LINE__;
1.674 + if(err!=KErrNone)
1.675 + User::Leave(err); //trapped in DoRequestL
1.676 +
1.677 + err = fileplugin.Read(pos, tempBufPtr, length);
1.678 + _LOG2(_L("CModifierPlugin::FsFileReadL, FileRead returned %d"), err);
1.679 + iLastError = err;
1.680 + iLineNumber = __LINE__;
1.681 + if(err!=KErrNone)
1.682 + User::Leave(err); //trapped in DoRequestL
1.683 +
1.684 + err = aRequest.Write(TFsPluginRequest::EData, tempBufPtr);
1.685 + _LOG2(_L("CModifierPlugin::FsFileReadL, ClientWrite returned %d"), err);
1.686 + iLastError = err;
1.687 + iLineNumber = __LINE__;
1.688 + if(err!=KErrNone)
1.689 + User::Leave(err); //trapped in DoRequestL
1.690 +
1.691 + fileplugin.Close();
1.692 +
1.693 + CleanupStack::PopAndDestroy(); //tempBuf
1.694 +
1.695 + // request processed by plug-in
1.696 + User::Leave(KErrCompletion);
1.697 + }
1.698 +
1.699 + // Intercepting a Read(has handle) and performing a ReadFileSection (lacks handle) instead
1.700 + if (extension.CompareF(_L(".readfile")) == 0)
1.701 + {
1.702 + HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1.703 + TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1.704 +
1.705 + _LOG(_L("CModifierPlugin::FileRead, calling FsReadFileSection "));
1.706 +
1.707 + RFsPlugin fsplugin(aRequest);
1.708 + TInt err = fsplugin.Connect();
1.709 + iLastError = err;
1.710 + iLineNumber = __LINE__;
1.711 + if(err!=KErrNone)
1.712 + User::Leave(err); //trapped in DoRequestL
1.713 +
1.714 + err = fsplugin.ReadFileSection(filename, pos, tempBufPtr, length);
1.715 + _LOG2(_L("CModifierPlugin::FileRead, FileRead returned %d"), err);
1.716 + iLastError = err;
1.717 + iLineNumber = __LINE__;
1.718 + if(err!=KErrNone)
1.719 + User::Leave(err); //trapped in DoRequestL
1.720 +
1.721 +
1.722 + err = aRequest.Write(TFsPluginRequest::EData, tempBufPtr);
1.723 + _LOG2(_L("CModifierPlugin::FileRead, ClientWrite returned %d"), err);
1.724 + iLastError = err;
1.725 + iLineNumber = __LINE__;
1.726 + if(err!=KErrNone)
1.727 + User::Leave(err); //trapped in DoRequestL
1.728 +
1.729 + fsplugin.Close();
1.730 + CleanupStack::PopAndDestroy();
1.731 +
1.732 + // request processed by plug-in
1.733 + User::Leave(KErrCompletion);
1.734 + }
1.735 +
1.736 + }
1.737 + }
1.738 +
1.739 +
1.740 +/**
1.741 +@internalComponent
1.742 +*/
1.743 +void CModifierPlugin::FsFileWriteL(TFsPluginRequest& aRequest)
1.744 + {
1.745 + TInt length = 0;
1.746 + TInt64 pos = 0;
1.747 + TFileName filename;
1.748 + TParse parse;
1.749 +
1.750 + TBuf<256> testfilename1;
1.751 + TBuf<256> testfilename2;
1.752 +
1.753 + //setting up test files
1.754 + testfilename1.Append(iDriveToTest);
1.755 + testfilename1.Append(_L(":\\Data\\test.txt"));
1.756 +
1.757 + testfilename2.Append(iDriveToTest);
1.758 + testfilename2.Append(_L(":\\Data\\createcreate3.txt"));
1.759 +
1.760 + TInt err = aRequest.FileName(filename);
1.761 + iLastError = err;
1.762 + iLineNumber = __LINE__;
1.763 + if(err!=KErrNone)
1.764 + User::Leave(err); //trapped in DoRequestL
1.765 +
1.766 + err = aRequest.Read(TFsPluginRequest::ELength, length);
1.767 + iLastError = err;
1.768 + iLineNumber = __LINE__;
1.769 + if(err!=KErrNone)
1.770 + User::Leave(err); //trapped in DoRequestL
1.771 +
1.772 + err = aRequest.Read(TFsPluginRequest::EPosition, pos);
1.773 + iLastError = err;
1.774 + iLineNumber = __LINE__;
1.775 + if(err!=KErrNone)
1.776 + User::Leave(err); //trapped in DoRequestL
1.777 +
1.778 + parse.Set(filename, NULL, NULL);
1.779 + TPtrC extension(parse.Ext());
1.780 +
1.781 + _LOG4(_L("CModifierPlugin::FsFileWriteL, file: %S, pos: %d, length: %d"), &filename, pos, length);
1.782 +
1.783 + if (aRequest.IsPostOperation())
1.784 + {
1.785 + _LOG(_L("CModifierPlugin::FsFileWriteL, post intercept"));
1.786 + }
1.787 + else
1.788 + {
1.789 + _LOG(_L("CModifierPlugin::FsFileWriteL, pre intercept"));
1.790 +
1.791 + if (extension.CompareF(_L(".tst")) == 0)
1.792 + {
1.793 + HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1.794 + TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1.795 +
1.796 + TInt err = aRequest.Read(TFsPluginRequest::EData, tempBufPtr);
1.797 + _LOG2(_L("CModifierPlugin::FsFileWriteL, ClientRead returned %d"), err);
1.798 + iLastError = err;
1.799 + iLineNumber = __LINE__;
1.800 + if(err!=KErrNone)
1.801 + User::Leave(err); //trapped in DoRequestL
1.802 +
1.803 + RFilePlugin fileplugin(aRequest);
1.804 + err = fileplugin.AdoptFromClient();
1.805 + iLastError = err;
1.806 + iLineNumber = __LINE__;
1.807 + if(err!=KErrNone)
1.808 + User::Leave(err); //trapped in DoRequestL
1.809 +
1.810 + //Test Lock
1.811 + err = fileplugin.Lock(0,2);
1.812 + iLastError = err;
1.813 + iLineNumber = __LINE__;
1.814 + if(err!=KErrNone)
1.815 + User::Leave(err); //trapped in DoRequestL
1.816 +
1.817 + err = fileplugin.UnLock(0,2);
1.818 + iLastError = err;
1.819 + iLineNumber = __LINE__;
1.820 + if(err!=KErrNone)
1.821 + User::Leave(err); //trapped in DoRequestL
1.822 + //End test lock
1.823 +
1.824 + err = fileplugin.Write(pos, tempBufPtr);
1.825 + _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Write returned %d"), err);
1.826 + iLastError = err;
1.827 + iLineNumber = __LINE__;
1.828 + if(err!=KErrNone)
1.829 + User::Leave(err); //trapped in DoRequestL
1.830 +
1.831 + //Test sending multiple plugin requests using the RFilePlugin class
1.832 + HBufC8* tempBuf2 = HBufC8::NewMaxLC(length);
1.833 + TPtr8 tempBufPtr2((TUint8 *)tempBuf2->Des().Ptr(), length, length);
1.834 + err = fileplugin.Read(pos, tempBufPtr2);
1.835 + _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Read returned %d"), err);
1.836 + iLastError = err;
1.837 + iLineNumber = __LINE__;
1.838 + if(err!=KErrNone)
1.839 + User::Leave(err); //trapped in DoRequestL
1.840 +
1.841 + //testing the correct thing has been written to the drive
1.842 + err = tempBufPtr.Compare(tempBufPtr2);
1.843 + iLastError = err;
1.844 + iLineNumber = __LINE__;
1.845 + if(err!=KErrNone)
1.846 + User::Leave(err); //trapped in DoRequestL
1.847 +
1.848 + RFilePlugin fileplugin2(aRequest);
1.849 +
1.850 + //open a second file
1.851 +
1.852 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.853 + _LOG3(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.854 + iLastError = err;
1.855 + iLineNumber = __LINE__;
1.856 + if(err!=KErrNone)
1.857 + User::Leave(err); //trapped in DoRequestL
1.858 +
1.859 +
1.860 + //write to the second file
1.861 + err = fileplugin2.Write(pos, tempBufPtr2);
1.862 + _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Write to the second file returned %d"), err);
1.863 + iLastError = err;
1.864 + iLineNumber = __LINE__;
1.865 + if(err!=KErrNone)
1.866 + User::Leave(err); //trapped in DoRequestL
1.867 +
1.868 + //close the second file
1.869 + fileplugin2.Close();
1.870 + _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Close to the second file returned %d"), err);
1.871 +
1.872 + //read from the first file
1.873 + HBufC8* tempBuf3 = HBufC8::NewMaxLC(length);
1.874 + TPtr8 tempBufPtr3((TUint8 *)tempBuf3->Des().Ptr(), length, length);
1.875 + err = fileplugin.Read(pos, tempBufPtr3);
1.876 + _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Read returned %d"), err);
1.877 + iLastError = err;
1.878 + iLineNumber = __LINE__;
1.879 + if(err!=KErrNone)
1.880 + User::Leave(err); //trapped in DoRequestL
1.881 +
1.882 + RFsPlugin fsplugin(aRequest);
1.883 + err = fsplugin.Connect();
1.884 + iLastError = err;
1.885 + iLineNumber = __LINE__;
1.886 + if(err!=KErrNone)
1.887 + User::Leave(err); //trapped in DoRequestL
1.888 +
1.889 + err = fsplugin.Delete(testfilename2);
1.890 + if(err == KErrNone || err == KErrNotFound)
1.891 + err = KErrNone;
1.892 +
1.893 + iLastError = err;
1.894 + iLineNumber = __LINE__;
1.895 + if(err!=KErrNone)
1.896 + User::Leave(err); //trapped in DoRequestL
1.897 +
1.898 + //close the first file.
1.899 + fileplugin.Close();
1.900 +
1.901 + //Create new file
1.902 + err = fileplugin.Create(testfilename2, EFileWrite);
1.903 + iLastError = err;
1.904 + iLineNumber = __LINE__;
1.905 + if(err!=KErrNone)
1.906 + User::Leave(err); //trapped in DoRequestL
1.907 + _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Create returned %d"), err);
1.908 +
1.909 + //write to the newly created file
1.910 + err = fileplugin.Write(pos, tempBufPtr2);
1.911 + _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Write to the newly created file returned %d"), err);
1.912 + iLastError = err;
1.913 + iLineNumber = __LINE__;
1.914 + if(err!=KErrNone)
1.915 + User::Leave(err); //trapped in DoRequestL
1.916 +
1.917 + //close the newly created file
1.918 + fileplugin.Close();
1.919 +
1.920 + //delete the newly created file
1.921 + err = fsplugin.Delete(testfilename2);
1.922 + iLastError = err;
1.923 + iLineNumber = __LINE__;
1.924 + if(err!=KErrNone)
1.925 + User::Leave(err); //trapped in DoRequestL
1.926 +
1.927 + fsplugin.Close();
1.928 +
1.929 + CleanupStack::PopAndDestroy();
1.930 +
1.931 + // request processed by plug-in
1.932 + User::Leave(KErrCompletion);
1.933 + }
1.934 + }
1.935 + }
1.936 +
1.937 +
1.938 +
1.939 +/**
1.940 +@internalComponent
1.941 +*/
1.942 +void CModifierPlugin::FsFileRenameL(TFsPluginRequest& aRequest)
1.943 + {
1.944 + TFileName oldfilename, newfilename;
1.945 + TParse parse;
1.946 +
1.947 + oldfilename = aRequest.Src().FullName();
1.948 + newfilename = aRequest.Dest().FullName();
1.949 +
1.950 + parse.Set(oldfilename, NULL, NULL);
1.951 + TPtrC extension(parse.Ext());
1.952 +
1.953 + _LOG3(_L("CModifierPlugin::FsFileRenameL, old name: %S, new name: %S"), &oldfilename, &newfilename);
1.954 +
1.955 + if (aRequest.IsPostOperation())
1.956 + {
1.957 + _LOG(_L("CModifierPlugin::FsFileRenameL, post intercept"));
1.958 +
1.959 + if (extension.CompareF(_L(".tst")) == 0)
1.960 + {
1.961 + TBuf8<32> tempBuf = (_L8("Rename Post Intercept"));
1.962 + RFilePlugin fileplugin(aRequest);
1.963 + TInt err = fileplugin.AdoptFromClient();
1.964 + iLastError = err;
1.965 + iLineNumber = __LINE__;
1.966 + if(err!=KErrNone)
1.967 + User::Leave(err); //trapped in DoRequestL
1.968 +
1.969 + err = fileplugin.Write(20, tempBuf);
1.970 + _LOG2(_L("CModifierPlugin::FsFileRenameL, FileWrite returned %d"), err);
1.971 + fileplugin.Close();
1.972 + iLastError = err;
1.973 + iLineNumber = __LINE__;
1.974 + if(err!=KErrNone)
1.975 + User::Leave(err); //trapped in DoRequestL
1.976 +
1.977 + }
1.978 + }
1.979 + else
1.980 + {
1.981 + _LOG(_L("CModifierPlugin::FsFileRenameL, pre intercept"));
1.982 +
1.983 + if (extension.CompareF(_L(".tst")) == 0)
1.984 + {
1.985 + TBuf8<32> tempBuf = (_L8("Rename Pre Intercept"));
1.986 + RFilePlugin fileplugin(aRequest);
1.987 + TInt err = fileplugin.AdoptFromClient();
1.988 + iLastError = err;
1.989 + iLineNumber = __LINE__;
1.990 + if(err!=KErrNone)
1.991 + User::Leave(err); //trapped in DoRequestL
1.992 +
1.993 + err = fileplugin.Write(0, tempBuf);
1.994 + _LOG2(_L("CModifierPlugin::FsFileRenameL, FileWrite returned %d"), err);
1.995 + iLastError = err;
1.996 + iLineNumber = __LINE__;
1.997 + if(err!=KErrNone)
1.998 + User::Leave(err); //trapped in DoRequestL
1.999 +
1.1000 + err = fileplugin.Rename(newfilename);
1.1001 + _LOG2(_L("CModifierPlugin::FsFileRenameL, FilePlugin::Rename returned %d"), err);
1.1002 + iLastError = err;
1.1003 + iLineNumber = __LINE__;
1.1004 + if(err!=KErrNone)
1.1005 + User::Leave(err); //trapped in DoRequestL
1.1006 +
1.1007 + fileplugin.Close();
1.1008 + User::Leave(KErrCompletion);
1.1009 + }
1.1010 + }
1.1011 + }
1.1012 +
1.1013 +
1.1014 +void CModifierPlugin::FsFileCreateL(TFsPluginRequest& aRequest)
1.1015 + {
1.1016 + TFileName filename;
1.1017 + TParse parse;
1.1018 +
1.1019 + filename = aRequest.Src().FullName();
1.1020 +
1.1021 + TUint mode;
1.1022 + TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
1.1023 + iLastError = err;
1.1024 + iLineNumber = __LINE__;
1.1025 + if(err!=KErrNone)
1.1026 + User::Leave(err); //trapped in DoRequestL
1.1027 +
1.1028 + parse.Set(filename, NULL, NULL);
1.1029 + TPtrC extension(parse.Ext());
1.1030 +
1.1031 + if (aRequest.IsPostOperation())
1.1032 + {
1.1033 + _LOG(_L("CModifierPlugin::FsFileCreateL, post intercept"));
1.1034 +
1.1035 + if (extension.CompareF(_L(".tst")) == 0)
1.1036 + {
1.1037 + RFilePlugin fileplugin(aRequest);
1.1038 + TInt err = fileplugin.AdoptFromClient();
1.1039 + iLastError = err;
1.1040 + iLineNumber = __LINE__;
1.1041 + if(err!=KErrNone)
1.1042 + User::Leave(err); //trapped in DoRequestL
1.1043 +
1.1044 + //write to the newly created file
1.1045 + TBuf8<64> wbuffer;
1.1046 + wbuffer.Copy(_L8("TestTestTest"));
1.1047 + err = fileplugin.Write(0, wbuffer);
1.1048 + _LOG2(_L("CModifierPlugin::FsFileCreateL, RFilePlugin::Write to the newly created file returned %d"), err);
1.1049 + iLastError = err;
1.1050 + iLineNumber = __LINE__;
1.1051 + if(err!=KErrNone)
1.1052 + User::Leave(err); //trapped in DoRequestL
1.1053 +
1.1054 + TInt length = wbuffer.Length();
1.1055 + HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1.1056 + TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1.1057 + err = fileplugin.Read(0, tempBufPtr);
1.1058 + _LOG2(_L("CModifierPlugin::FsFileCreateL, RFilePlugin::Read returned %d"), err);
1.1059 + iLastError = err;
1.1060 + iLineNumber = __LINE__;
1.1061 + if(err!=KErrNone)
1.1062 + User::Leave(err); //trapped in DoRequestL
1.1063 +
1.1064 + //testing the correct thing has been written to the drive
1.1065 + err = wbuffer.Compare(tempBufPtr);
1.1066 + iLastError = err;
1.1067 + iLineNumber = __LINE__;
1.1068 + if(err!=KErrNone)
1.1069 + User::Leave(err); //trapped in DoRequestL
1.1070 +
1.1071 + fileplugin.Close();
1.1072 + CleanupStack::PopAndDestroy(); //tempBuf
1.1073 + }
1.1074 + }
1.1075 + else
1.1076 + {
1.1077 + _LOG(_L("CModifierPlugin::FsFileCreateL, pre intercept"));
1.1078 +
1.1079 + RFilePlugin fileplugin(aRequest);
1.1080 +
1.1081 + TInt err = fileplugin.Create(filename, mode);
1.1082 +
1.1083 + _LOG2(_L("CModifierPlugin::FsFileCreateL, RFilePlugin::Create returned %d"), err);
1.1084 + iLastError = err;
1.1085 + iLineNumber = __LINE__;
1.1086 + if(err!=KErrNone)
1.1087 + User::Leave(err); //trapped in DoRequestL
1.1088 +
1.1089 + err = fileplugin.TransferToClient();
1.1090 + iLastError = err;
1.1091 + iLineNumber = __LINE__;
1.1092 + if(err!=KErrNone)
1.1093 + User::Leave(err); //trapped in DoRequestL
1.1094 +
1.1095 + fileplugin.Close();
1.1096 + User::Leave(KErrCompletion);
1.1097 + }
1.1098 + }
1.1099 +
1.1100 +void CModifierPlugin::FsFileOpenL(TFsPluginRequest& aRequest)
1.1101 + {
1.1102 +
1.1103 + TFileName filename;
1.1104 + TParse parse;
1.1105 +
1.1106 + filename = aRequest.Src().FullName();
1.1107 +
1.1108 + TUint mode;
1.1109 + TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
1.1110 + iLastError = err;
1.1111 + iLineNumber = __LINE__;
1.1112 + if(err!=KErrNone)
1.1113 + User::Leave(err); //trapped in DoRequestL
1.1114 +
1.1115 + parse.Set(filename, NULL, NULL);
1.1116 + TPtrC extension(parse.Ext());
1.1117 +
1.1118 + _LOG2(_L("CModifierPlugin::FsFileOpenL, file: %S"), &filename);
1.1119 +
1.1120 + // Check that FileName can't be used in pre-operation (as the handle doesn't exist yet!)
1.1121 + TFileName shareName;
1.1122 + err = aRequest.FileName(shareName);
1.1123 + if (aRequest.IsPostOperation())
1.1124 + {
1.1125 + err = filename.Compare(shareName);
1.1126 + iLastError = err;
1.1127 + iLineNumber = __LINE__;
1.1128 + if(err!=KErrNone)
1.1129 + User::Leave(err); //trapped in DoRequestL
1.1130 + }
1.1131 + else if(err != KErrNotSupported)
1.1132 + {
1.1133 + iLastError = err;
1.1134 + iLineNumber = __LINE__;
1.1135 + if(err!=KErrNone)
1.1136 + User::Leave(err); //trapped in DoRequestL
1.1137 + }
1.1138 +
1.1139 + if (aRequest.IsPostOperation())
1.1140 + {
1.1141 + _LOG(_L("CModifierPlugin::FsFileOpenL, post intercept"));
1.1142 + if ((extension.CompareF(_L(".tst")) == 0) && (aRequest.Message().Int1() != 0) && (mode & EFileWrite))
1.1143 + {
1.1144 +
1.1145 + RFilePlugin fileplugin(aRequest);
1.1146 + err = fileplugin.AdoptFromClient();
1.1147 + iLastError = err;
1.1148 + iLineNumber = __LINE__;
1.1149 + if(err!=KErrNone)
1.1150 + User::Leave(err); //trapped in DoRequestL
1.1151 +
1.1152 + //write to the newly opened file
1.1153 + TBuf8<64> wbuffer;
1.1154 + wbuffer.Copy(_L8("TestTestTest"));
1.1155 + err = fileplugin.Write(0, wbuffer);
1.1156 + _LOG2(_L("CModifierPlugin::FsFileOpenL, RFilePlugin::Write to the newly opened file returned %d"), err);
1.1157 + iLastError = err;
1.1158 + iLineNumber = __LINE__;
1.1159 + if(err!=KErrNone)
1.1160 + User::Leave(err); //trapped in DoRequestL
1.1161 +
1.1162 + TInt length = wbuffer.Length();
1.1163 + HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1.1164 + TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1.1165 + err = fileplugin.Read(0, tempBufPtr);
1.1166 + _LOG2(_L("CModifierPlugin::FsFileOpenL, RFilePlugin::Read returned %d"), err);
1.1167 + iLastError = err;
1.1168 + iLineNumber = __LINE__;
1.1169 + if(err!=KErrNone)
1.1170 + User::Leave(err); //trapped in DoRequestL
1.1171 +
1.1172 + //testing the correct thing has been written to the drive
1.1173 + err = wbuffer.Compare(tempBufPtr);
1.1174 + iLastError = err;
1.1175 + iLineNumber = __LINE__;
1.1176 + if(err!=KErrNone)
1.1177 + User::Leave(err); //trapped in DoRequestL
1.1178 +
1.1179 + fileplugin.Close();
1.1180 +
1.1181 + CleanupStack::PopAndDestroy(); //tempbuf
1.1182 + }
1.1183 + }
1.1184 + else
1.1185 + {
1.1186 + _LOG(_L("CModifierPlugin::FsFileOpenL, pre intercept"));
1.1187 +
1.1188 + RFilePlugin fileplugin(aRequest);
1.1189 + err = fileplugin.Open(filename, mode);
1.1190 + _LOG3(_L("CModifierPlugin::FsFileOpenL, RFilePlugin::Open for %S returned %d"), &filename, err);
1.1191 + iLastError = err;
1.1192 + iLineNumber = __LINE__;
1.1193 + if(err!=KErrNone)
1.1194 + User::Leave(err); //trapped in DoRequestL
1.1195 +
1.1196 + err = fileplugin.TransferToClient();
1.1197 + iLastError = err;
1.1198 + iLineNumber = __LINE__;
1.1199 + if(err!=KErrNone)
1.1200 + User::Leave(err); //trapped in DoRequestL
1.1201 +
1.1202 + User::Leave(KErrCompletion); // STF : Completing and not setting the handle of the original request?
1.1203 + }
1.1204 + }
1.1205 +
1.1206 +
1.1207 +void CModifierPlugin::FsFileTempL(TFsPluginRequest& aRequest)
1.1208 + {
1.1209 + TBuf<256> testfilename1;
1.1210 +
1.1211 + //setting up test files
1.1212 + testfilename1.Append(iDriveToTest);
1.1213 + testfilename1.Append(_L(":\\Data\\"));
1.1214 +
1.1215 + if (aRequest.IsPostOperation())
1.1216 + {
1.1217 + _LOG(_L("CModifierPlugin::FsFileTempL, post intercept"));
1.1218 +
1.1219 + RFilePlugin fileplugin(aRequest);
1.1220 + TInt err = fileplugin.AdoptFromClient();
1.1221 + iLastError = err;
1.1222 + iLineNumber = __LINE__;
1.1223 + if(err!=KErrNone)
1.1224 + User::Leave(err); //trapped in DoRequestL
1.1225 +
1.1226 + //write to the newly created temp file
1.1227 + TBuf8<64> wbuffer;
1.1228 + wbuffer.Copy(_L8("TestTestTest"));
1.1229 + err = fileplugin.Write(0, wbuffer);
1.1230 + _LOG2(_L("CModifierPlugin::FsFileTempL, RFilePlugin::Write to the newly created temp file returned %d"), err);
1.1231 + iLastError = err;
1.1232 + iLineNumber = __LINE__;
1.1233 + if(err!=KErrNone)
1.1234 + User::Leave(err); //trapped in DoRequestL
1.1235 +
1.1236 + TInt length = wbuffer.Length();
1.1237 + HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1.1238 + TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1.1239 + err = fileplugin.Read(0, tempBufPtr);
1.1240 + _LOG2(_L("CModifierPlugin::FsFileTempL, RFilePlugin::Read returned %d"), err);
1.1241 + iLastError = err;
1.1242 + iLineNumber = __LINE__;
1.1243 + if(err!=KErrNone)
1.1244 + User::Leave(err); //trapped in DoRequestL
1.1245 +
1.1246 + fileplugin.Close();
1.1247 +
1.1248 + //testing the correct thing has been written to the drive
1.1249 + err = wbuffer.Compare(tempBufPtr);
1.1250 + iLastError = err;
1.1251 + iLineNumber = __LINE__;
1.1252 + if(err!=KErrNone)
1.1253 + User::Leave(err); //trapped in DoRequestL
1.1254 +
1.1255 + CleanupStack::PopAndDestroy();
1.1256 + }
1.1257 + else
1.1258 + {
1.1259 + _LOG(_L("CModifierPlugin::FsFileTempL, pre intercept"));
1.1260 +
1.1261 + TInt mode;
1.1262 + TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
1.1263 + iLastError = err;
1.1264 + iLineNumber = __LINE__;
1.1265 + if(err!=KErrNone)
1.1266 + User::Leave(err); //trapped in DoRequestL
1.1267 +
1.1268 + TFileName fn;
1.1269 + RFilePlugin fileplugin(aRequest);
1.1270 + err = fileplugin.Temp(testfilename1, fn, mode);
1.1271 + _LOG2(_L("CModifierPlugin::FsFileTempL, RFilePlugin::Temp returned %d"), err);
1.1272 + iLastError = err;
1.1273 + iLineNumber = __LINE__;
1.1274 + if(err!=KErrNone)
1.1275 + User::Leave(err); //trapped in DoRequestL
1.1276 +
1.1277 + err = aRequest.Write(TFsPluginRequest::ENewName, fn);
1.1278 + _LOG2(_L("CModifierPlugin::FsFileTempL, ClientWrite returned %d"), err);
1.1279 + iLastError = err;
1.1280 + iLineNumber = __LINE__;
1.1281 + if(err!=KErrNone)
1.1282 + User::Leave(err); //trapped in DoRequestL
1.1283 +
1.1284 + err = fileplugin.TransferToClient();
1.1285 + iLastError = err;
1.1286 + iLineNumber = __LINE__;
1.1287 + if(err!=KErrNone)
1.1288 + User::Leave(err); //trapped in DoRequestL
1.1289 +
1.1290 + fileplugin.Close();
1.1291 +
1.1292 + User::Leave(KErrCompletion);
1.1293 + }
1.1294 + }
1.1295 +
1.1296 +
1.1297 +void CModifierPlugin::FsFileReplaceL(TFsPluginRequest& aRequest)
1.1298 + {
1.1299 + TFileName filename;
1.1300 + TParse parse;
1.1301 +
1.1302 + filename = aRequest.Src().FullName();
1.1303 +
1.1304 + TUint mode;
1.1305 + TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
1.1306 + iLastError = err;
1.1307 + iLineNumber = __LINE__;
1.1308 + if(err!=KErrNone)
1.1309 + User::Leave(err); //trapped in DoRequestL
1.1310 +
1.1311 + parse.Set(filename, NULL, NULL);
1.1312 + TPtrC extension(parse.Ext());
1.1313 +
1.1314 + _LOG2(_L("CModifierPlugin::FsFileReplaceL, file: %S"), &filename);
1.1315 +
1.1316 + if (aRequest.IsPostOperation())
1.1317 + {
1.1318 + _LOG(_L("CModifierPlugin::FsFileReplaceL, post intercept"));
1.1319 + if ((extension.CompareF(_L(".tst")) == 0) && (aRequest.Message().Int1() != 0))
1.1320 + {
1.1321 + //write to the newly replaced file
1.1322 + TBuf8<64> wbuffer;
1.1323 + wbuffer.Copy(_L8("TestTestTest"));
1.1324 +
1.1325 + RFilePlugin fileplugin(aRequest);
1.1326 + TInt err = fileplugin.AdoptFromClient();
1.1327 + iLastError = err;
1.1328 + iLineNumber = __LINE__;
1.1329 + if(err!=KErrNone)
1.1330 + User::Leave(err); //trapped in DoRequestL
1.1331 +
1.1332 + err = fileplugin.Write(0, wbuffer);
1.1333 + _LOG2(_L("CModifierPlugin::FsFileReplaceL, RFilePlugin::Write to the newly created file returned %d"), err);
1.1334 + iLastError = err;
1.1335 + iLineNumber = __LINE__;
1.1336 + if(err!=KErrNone)
1.1337 + User::Leave(err); //trapped in DoRequestL
1.1338 +
1.1339 + TInt length = wbuffer.Length();
1.1340 + HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1.1341 + TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1.1342 + err = fileplugin.Read(0, tempBufPtr);
1.1343 + _LOG2(_L("CModifierPlugin::FsFileReplaceL, RFilePlugin::Read returned %d"), err);
1.1344 + iLastError = err;
1.1345 + iLineNumber = __LINE__;
1.1346 + if(err!=KErrNone)
1.1347 + User::Leave(err); //trapped in DoRequestL
1.1348 +
1.1349 + //testing the correct thing has been written to the drive
1.1350 + err = wbuffer.Compare(tempBufPtr);
1.1351 + iLastError = err;
1.1352 + iLineNumber = __LINE__;
1.1353 + if(err!=KErrNone)
1.1354 + User::Leave(err); //trapped in DoRequestL
1.1355 + fileplugin.Close();
1.1356 + CleanupStack::PopAndDestroy();
1.1357 + }
1.1358 + }
1.1359 + else
1.1360 + {
1.1361 + RFilePlugin fileplugin(aRequest);
1.1362 +
1.1363 + TInt err = fileplugin.Replace(filename, mode);
1.1364 + _LOG2(_L("CModifierPlugin::FsFileReplaceL, RFilePlugin::Replace returned %d"), err);
1.1365 + iLastError = err;
1.1366 + iLineNumber = __LINE__;
1.1367 + if(err!=KErrNone)
1.1368 + User::Leave(err); //trapped in DoRequestL
1.1369 +
1.1370 + err = fileplugin.TransferToClient();
1.1371 + iLastError = err;
1.1372 + iLineNumber = __LINE__;
1.1373 + if(err!=KErrNone)
1.1374 + User::Leave(err); //trapped in DoRequestL
1.1375 +
1.1376 + fileplugin.Close();
1.1377 + User::Leave(KErrCompletion);
1.1378 + }
1.1379 + }
1.1380 +
1.1381 +
1.1382 +
1.1383 +void CModifierPlugin::FsReadFileSectionL(TFsPluginRequest& aRequest)
1.1384 + {
1.1385 + TInt err = KErrNone;
1.1386 + TInt length = 0;
1.1387 + TInt64 pos = 0;
1.1388 + TFileName filename;
1.1389 + TParse parse;
1.1390 + TBuf<256> testfilename1;
1.1391 +
1.1392 + //setting up test files
1.1393 + testfilename1.Append(iDriveToTest);
1.1394 + testfilename1.Append(_L(":\\Data\\test.txt"));
1.1395 +
1.1396 + filename = aRequest.Src().FullName();
1.1397 +
1.1398 + err = aRequest.Read(TFsPluginRequest::ELength, length);
1.1399 + iLastError = err;
1.1400 + iLineNumber = __LINE__;
1.1401 + if(err!=KErrNone)
1.1402 + User::Leave(err); //trapped in DoRequestL
1.1403 +
1.1404 + err = aRequest.Read(TFsPluginRequest::EPosition, pos);
1.1405 + iLastError = err;
1.1406 + iLineNumber = __LINE__;
1.1407 + if(err!=KErrNone)
1.1408 + User::Leave(err); //trapped in DoRequestL
1.1409 +
1.1410 + parse.Set(filename, NULL, NULL);
1.1411 + TPtrC extension(parse.Ext());
1.1412 +
1.1413 + _LOG2(_L("CModifierPlugin::FsReadFileSectionL, file: %S"), &filename);
1.1414 +
1.1415 + if (aRequest.IsPostOperation())
1.1416 + {
1.1417 + _LOG(_L("CModifierPlugin::FsReadFileSectionL, post intercept"));
1.1418 + User::Invariant();
1.1419 + _LOG(_L("CModifierPlugin::FsReadFileSectionL - Exit"));
1.1420 + }
1.1421 + else
1.1422 + {
1.1423 + _LOG(_L("CModifierPlugin::FsReadFileSectionL, pre intercept - enter"));
1.1424 +
1.1425 + if (extension.CompareF(_L(".tst")) == 0)
1.1426 + {
1.1427 +
1.1428 + RFilePlugin fileplugin2(aRequest);
1.1429 + //open a second file
1.1430 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1431 + _LOG3(_L("CModifierPlugin::FsReadFileSectionL - RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1432 + iLastError = err;
1.1433 + iLineNumber = __LINE__;
1.1434 + if(err!=KErrNone)
1.1435 + User::Leave(err); //trapped in DoRequestL
1.1436 +
1.1437 + TInt64 size=0;
1.1438 + err = fileplugin2.Size(size);
1.1439 + iLastError = err;
1.1440 + iLineNumber = __LINE__;
1.1441 + if(err!=KErrNone)
1.1442 + User::Leave(err); //trapped in DoRequestL
1.1443 +
1.1444 + //close the second file
1.1445 + fileplugin2.Close();
1.1446 + _LOG(_L("CModifierPlugin::FsReadFileSectionL - fileplugin2.Close()"));
1.1447 +
1.1448 + TBuf8<26> temp;
1.1449 +
1.1450 + RFsPlugin fsplugin(aRequest);
1.1451 + err = fsplugin.Connect();
1.1452 + iLastError = err;
1.1453 + iLineNumber = __LINE__;
1.1454 + if(err!=KErrNone)
1.1455 + User::Leave(err); //trapped in DoRequestL
1.1456 +
1.1457 + err = fsplugin.ReadFileSection(filename, pos, temp, length);
1.1458 + _LOG3(_L("CModifierPlugin::FsReadFileSectionL - RFsPlugin::ReadFilePlugin for %S returned %d"), &testfilename1, err);
1.1459 + iLastError = err;
1.1460 + iLineNumber = __LINE__;
1.1461 + if(err!=KErrNone)
1.1462 + User::Leave(err); //trapped in DoRequestL
1.1463 + fsplugin.Close();
1.1464 +
1.1465 + TBuf<26> temp_wide;
1.1466 + temp_wide.Copy(temp);
1.1467 +
1.1468 + iLogging = ETrue;
1.1469 + _LOG2(_L("CModifierPlugin::FsReadFileSectionL - wanted to read length = %d\n"),length);
1.1470 + _LOG2(_L("CModifierPlugin::FsReadFileSectionL - data read length = %d\n"),temp.Length());
1.1471 + _LOG2(_L("CModifierPlugin::FsReadFileSectionL - data read = %S\n"),&temp_wide);
1.1472 + iLogging = EFalse;
1.1473 +
1.1474 +
1.1475 + err = aRequest.Write(TFsPluginRequest::EData, temp);
1.1476 + _LOG3(_L("CModifierPlugin::FsReadFileSectionL - RFilePlugin::Write for %S returned %d"), &testfilename1, err);
1.1477 + iLastError = err;
1.1478 + iLineNumber = __LINE__;
1.1479 + if(err!=KErrNone)
1.1480 + User::Leave(err); //trapped in DoRequestL
1.1481 +
1.1482 + // request processed by plug-in
1.1483 + User::Leave(KErrCompletion);
1.1484 + }
1.1485 + _LOG(_L("CModifierPlugin::FsReadFileSectionL, pre intercept - exit"));
1.1486 + }
1.1487 + }
1.1488 +
1.1489 +
1.1490 +void CModifierPlugin::FsDeleteL(TFsPluginRequest& aRequest)
1.1491 + {
1.1492 + TInt err = KErrNone;
1.1493 + TFileName filename;
1.1494 +
1.1495 + TBuf<256> testfilename1;
1.1496 +
1.1497 + //setting up test files
1.1498 + testfilename1.Append(iDriveToTest);
1.1499 + testfilename1.Append(_L(":\\Data\\test.txt"));
1.1500 +
1.1501 + filename = aRequest.Src().FullName();
1.1502 +
1.1503 + if (aRequest.IsPostOperation())
1.1504 + {
1.1505 + _LOG(_L("CModifierPlugin::FsDeleteL, post intercept"));
1.1506 +
1.1507 + RFilePlugin fileplugin2(aRequest);
1.1508 + //open a second file
1.1509 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1510 + _LOG3(_L("CModifierPlugin::FsDeleteL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1511 + iLastError = err;
1.1512 + iLineNumber = __LINE__;
1.1513 + if(err!=KErrNone)
1.1514 + User::Leave(err); //trapped in DoRequestL
1.1515 +
1.1516 + TInt64 size=0;
1.1517 + err = fileplugin2.Size(size);
1.1518 + iLastError = err;
1.1519 + iLineNumber = __LINE__;
1.1520 + if(err!=KErrNone)
1.1521 + User::Leave(err); //trapped in DoRequestL
1.1522 +
1.1523 + //close the second file
1.1524 + fileplugin2.Close();
1.1525 + _LOG2(_L("CModifierPlugin::FsDeleteL, RFilePlugin::Close to the second file returned %d"), err);
1.1526 + }
1.1527 + else
1.1528 + {
1.1529 + _LOG(_L("CModifierPlugin::FsDeleteL, pre intercept"));
1.1530 +
1.1531 + _LOG(_L("CModifierPlugin::FsDeleteL, calling RFsPlugin::Delete"));
1.1532 + RFilePlugin fileplugin2(aRequest);
1.1533 + //open a second file
1.1534 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1535 + _LOG3(_L("CModifierPlugin::FsDeleteL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1536 + iLastError = err;
1.1537 + iLineNumber = __LINE__;
1.1538 + if(err!=KErrNone)
1.1539 + User::Leave(err); //trapped in DoRequestL
1.1540 +
1.1541 + TInt64 size=0;
1.1542 + err = fileplugin2.Size(size);
1.1543 + iLastError = err;
1.1544 + iLineNumber = __LINE__;
1.1545 + if(err!=KErrNone)
1.1546 + User::Leave(err); //trapped in DoRequestL
1.1547 +
1.1548 + //close the second file
1.1549 + fileplugin2.Close();
1.1550 + _LOG2(_L("CModifierPlugin::FsDeleteL, RFilePlugin::Close to the second file returned %d"), err);
1.1551 +
1.1552 + RFsPlugin fsplugin(aRequest);
1.1553 + err = fsplugin.Connect();
1.1554 + iLastError = err;
1.1555 + iLineNumber = __LINE__;
1.1556 + if(err!=KErrNone)
1.1557 + User::Leave(err); //trapped in DoRequestL
1.1558 +
1.1559 + err = fsplugin.Delete(filename);
1.1560 + _LOG2(_L("CModifierPlugin::FsDeleteL, RFsPlugin::Delete returned %d"), err);
1.1561 +
1.1562 + iLastError = err;
1.1563 + iLineNumber = __LINE__;
1.1564 + if(err!=KErrNone)
1.1565 + User::Leave(err); //trapped in DoRequestL
1.1566 +
1.1567 + fsplugin.Close();
1.1568 +
1.1569 + // request processed by plug-in
1.1570 + User::Leave(KErrCompletion);
1.1571 + }
1.1572 + }
1.1573 +
1.1574 +
1.1575 +void CModifierPlugin::FsReplaceL(TFsPluginRequest& aRequest)
1.1576 + {
1.1577 + TInt err = KErrNone;
1.1578 + TFileName oldfilename;
1.1579 + TFileName newfilename;
1.1580 +
1.1581 + oldfilename = aRequest.Src().FullName();
1.1582 + newfilename = aRequest.Dest().FullName();
1.1583 +
1.1584 + TBuf<256> testfilename1;
1.1585 +
1.1586 + //setting up test files
1.1587 + testfilename1.Append(iDriveToTest);
1.1588 + testfilename1.Append(_L(":\\Data\\test.txt"));
1.1589 +
1.1590 +
1.1591 + if (aRequest.IsPostOperation())
1.1592 + {
1.1593 + //STF: Is this code going to get called - the pre-operation completes early?
1.1594 +
1.1595 + _LOG(_L("CModifierPlugin::FsReplaceL, post intercept"));
1.1596 + //We should check that the name has changed here.
1.1597 + RFilePlugin file(aRequest);
1.1598 + TInt err = file.AdoptFromClient();
1.1599 + iLastError = err;
1.1600 + iLineNumber = __LINE__;
1.1601 + if(err!=KErrNone)
1.1602 + User::Leave(err); //trapped in DoRequestL
1.1603 +
1.1604 + TInt compare = oldfilename.Compare(newfilename);
1.1605 + if(compare != 0) //is equal
1.1606 + {
1.1607 + //User::Leave(compare);
1.1608 + //It wont be equal as the name is coming from the request aint it.
1.1609 + //Bit of a pointless comparison in retrospect eh?
1.1610 + }
1.1611 +
1.1612 + file.Close();
1.1613 +
1.1614 + RFilePlugin fileplugin2(aRequest);
1.1615 + //open a second file
1.1616 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1617 + _LOG3(_L("CModifierPlugin::FsReplaceL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1618 + iLastError = err;
1.1619 + iLineNumber = __LINE__;
1.1620 + if(err!=KErrNone)
1.1621 + User::Leave(err); //trapped in DoRequestL
1.1622 +
1.1623 + TInt64 size=0;
1.1624 + err =fileplugin2.Size(size);
1.1625 + iLastError = err;
1.1626 + iLineNumber = __LINE__;
1.1627 + if(err!=KErrNone)
1.1628 + User::Leave(err); //trapped in DoRequestL
1.1629 +
1.1630 + //close the second file
1.1631 + fileplugin2.Close();
1.1632 + _LOG2(_L("CModifierPlugin::FsReplaceL, RFilePlugin::Close to the second file returned %d"), err);
1.1633 + }
1.1634 + else
1.1635 + {
1.1636 + _LOG(_L("CModifierPlugin::FsReplaceL, pre intercept"));
1.1637 + RFilePlugin fileplugin2(aRequest);
1.1638 + //open a second file
1.1639 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1640 + _LOG3(_L("CModifierPlugin::FsReplaceL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1641 + iLastError = err;
1.1642 + iLineNumber = __LINE__;
1.1643 + if(err!=KErrNone)
1.1644 + User::Leave(err); //trapped in DoRequestL
1.1645 +
1.1646 + TInt64 size=0;
1.1647 + err =fileplugin2.Size(size);
1.1648 + iLastError = err;
1.1649 + iLineNumber = __LINE__;
1.1650 + if(err!=KErrNone)
1.1651 + User::Leave(err); //trapped in DoRequestL
1.1652 +
1.1653 + //close the second file
1.1654 + fileplugin2.Close();
1.1655 + _LOG2(_L("CModifierPlugin::FsReplaceL, FilePlugin::Close to the second file returned %d"), err);
1.1656 +
1.1657 + _LOG(_L("CModifierPlugin::FsReplaceL, calling RFsPlugin::Replace"));
1.1658 + RFsPlugin fsplugin(aRequest);
1.1659 + err = fsplugin.Connect();
1.1660 + iLastError = err;
1.1661 + iLineNumber = __LINE__;
1.1662 + if(err!=KErrNone)
1.1663 + User::Leave(err); //trapped in DoRequestL
1.1664 +
1.1665 + err = fsplugin.Replace(oldfilename, newfilename);
1.1666 + _LOG2(_L("CModifierPlugin::FsReplaceL, RFsPlugin::Replace returned %d"), err);
1.1667 + iLastError = err;
1.1668 + iLineNumber = __LINE__;
1.1669 + if(err!=KErrNone)
1.1670 + User::Leave(err); //trapped in DoRequestL
1.1671 +
1.1672 + fsplugin.Close();
1.1673 +
1.1674 + // request processed by plug-in
1.1675 + User::Leave(KErrCompletion);
1.1676 + }
1.1677 + }
1.1678 +
1.1679 +
1.1680 +void CModifierPlugin::FsRenameL(TFsPluginRequest& aRequest)
1.1681 + {
1.1682 + TInt err = KErrNone;
1.1683 + TFileName oldfilename;
1.1684 + TFileName newfilename;
1.1685 +
1.1686 + oldfilename = aRequest.Src().FullName();
1.1687 + newfilename = aRequest.Dest().FullName();
1.1688 +
1.1689 + TBuf<256> testfilename1;
1.1690 +
1.1691 + //setting up test files
1.1692 + testfilename1.Append(iDriveToTest);
1.1693 + testfilename1.Append(_L(":\\Data\\test.txt"));
1.1694 +
1.1695 + if (aRequest.IsPostOperation())
1.1696 + {
1.1697 + _LOG(_L("CModifierPlugin::FsRenameL, post intercept"));
1.1698 + RFilePlugin fileplugin2(aRequest);
1.1699 + //open a second file
1.1700 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1701 + _LOG3(_L("RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1702 + iLastError = err;
1.1703 + iLineNumber = __LINE__;
1.1704 + if(err!=KErrNone)
1.1705 + User::Leave(err); //trapped in DoRequestL
1.1706 +
1.1707 + TInt64 size=0;
1.1708 + err = fileplugin2.Size(size);
1.1709 + iLastError = err;
1.1710 + iLineNumber = __LINE__;
1.1711 + if(err!=KErrNone)
1.1712 + User::Leave(err); //trapped in DoRequestL
1.1713 +
1.1714 + //close the second file
1.1715 + fileplugin2.Close();
1.1716 + _LOG2(_L("CModifierPlugin::FsRenameL, RFilePlugin::Close to the second file returned %d"), err);
1.1717 + }
1.1718 + else
1.1719 + {
1.1720 + _LOG(_L("CModifierPlugin::FsRenameL, pre intercept"));
1.1721 + RFilePlugin fileplugin2(aRequest);
1.1722 + //open a second file
1.1723 + fileplugin2.Open(testfilename1, EFileWrite);
1.1724 + _LOG3(_L("CModifierPlugin::FsRenameL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1725 + iLastError = err;
1.1726 + iLineNumber = __LINE__;
1.1727 + if(err!=KErrNone)
1.1728 + User::Leave(err); //trapped in DoRequestL
1.1729 +
1.1730 + TInt64 size=0;
1.1731 + err = fileplugin2.Size(size);
1.1732 + iLastError = err;
1.1733 + iLineNumber = __LINE__;
1.1734 + if(err!=KErrNone)
1.1735 + User::Leave(err); //trapped in DoRequestL
1.1736 +
1.1737 + //close the second file
1.1738 + fileplugin2.Close();
1.1739 + _LOG2(_L("CModifierPlugin::FsRenameL, RFilePlugin::Close to the second file returned %d"), err);
1.1740 +
1.1741 + _LOG(_L("CModifierPlugin::FsRenameL, calling RFsPlugin::Rename"));
1.1742 + RFsPlugin fsplugin(aRequest);
1.1743 + err = fsplugin.Connect();
1.1744 + iLastError = err;
1.1745 + iLineNumber = __LINE__;
1.1746 + if(err!=KErrNone)
1.1747 + User::Leave(err); //trapped in DoRequestL
1.1748 +
1.1749 + err = fsplugin.Rename(oldfilename, newfilename);
1.1750 + _LOG2(_L("CModifierPlugin::FsRenameL, RFsPlugin::Rename returned %d"), err);
1.1751 + iLastError = err;
1.1752 + iLineNumber = __LINE__;
1.1753 + if(err!=KErrNone)
1.1754 + User::Leave(err); //trapped in DoRequestL
1.1755 + fsplugin.Close();
1.1756 +
1.1757 + // request processed by plug-in
1.1758 + User::Leave(KErrCompletion);
1.1759 + }
1.1760 + }
1.1761 +
1.1762 +void CModifierPlugin::FsEntryL(TFsPluginRequest& aRequest)
1.1763 + {
1.1764 + TInt err = KErrNone;
1.1765 + TFileName filename;
1.1766 +
1.1767 + filename = aRequest.Src().FullName();
1.1768 +
1.1769 + TBuf<256> testfilename1;
1.1770 +
1.1771 + //setting up test files
1.1772 + testfilename1.Append(iDriveToTest);
1.1773 + testfilename1.Append(_L(":\\Data\\test.txt"));
1.1774 +
1.1775 +
1.1776 +
1.1777 + if (aRequest.IsPostOperation())
1.1778 + {
1.1779 + _LOG(_L("CModifierPlugin::FsEntryL, post intercept"));
1.1780 + RFilePlugin fileplugin2(aRequest);
1.1781 + //open a second file
1.1782 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1783 + _LOG3(_L("CModifierPlugin::FsEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1784 + iLastError = err;
1.1785 + iLineNumber = __LINE__;
1.1786 + if(err!=KErrNone)
1.1787 + User::Leave(err); //trapped in DoRequestL
1.1788 +
1.1789 + TInt64 size=0;
1.1790 + err = fileplugin2.Size(size);
1.1791 + iLastError = err;
1.1792 + iLineNumber = __LINE__;
1.1793 + if(err!=KErrNone)
1.1794 + User::Leave(err); //trapped in DoRequestL
1.1795 +
1.1796 + //close the second file
1.1797 + fileplugin2.Close();
1.1798 + _LOG2(_L("CModifierPlugin::FsEntryL, RFilePlugin::Close to the second file returned %d"), err);
1.1799 + }
1.1800 + else
1.1801 + {
1.1802 + _LOG(_L("CModifierPlugin::FsEntryL, pre intercept"));
1.1803 + RFilePlugin fileplugin2(aRequest);
1.1804 + //open a second file
1.1805 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1806 + _LOG3(_L("CModifierPlugin::FsEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1807 + iLastError = err;
1.1808 + iLineNumber = __LINE__;
1.1809 + if(err!=KErrNone)
1.1810 + User::Leave(err); //trapped in DoRequestL
1.1811 +
1.1812 + TInt64 size=0;
1.1813 + err = fileplugin2.Size(size);
1.1814 + iLastError = err;
1.1815 + iLineNumber = __LINE__;
1.1816 + if(err!=KErrNone)
1.1817 + User::Leave(err); //trapped in DoRequestL
1.1818 +
1.1819 + //close the second file
1.1820 + fileplugin2.Close();
1.1821 + _LOG2(_L("CModifierPlugin::FsEntryL, RFilePlugin::Close to the second file returned %d"), err);
1.1822 +
1.1823 + _LOG(_L("CModifierPlugin::FsEntryL, calling RFsPlugin::Entry"));
1.1824 + RFsPlugin fsplugin(aRequest);
1.1825 + err = fsplugin.Connect();
1.1826 + iLastError = err;
1.1827 + iLineNumber = __LINE__;
1.1828 + if(err!=KErrNone)
1.1829 + User::Leave(err); //trapped in DoRequestL
1.1830 +
1.1831 + TEntry entry;
1.1832 + err = fsplugin.Entry(filename, entry);
1.1833 + _LOG2(_L("CModifierPlugin::FsEntryL, RFsPlugin::Entry returned %d"), err);
1.1834 + iLastError = err;
1.1835 + iLineNumber = __LINE__;
1.1836 + if(err!=KErrNone)
1.1837 + User::Leave(err); //trapped in DoRequestL
1.1838 +
1.1839 + fsplugin.Close();
1.1840 +
1.1841 + TPckgC<TEntry> data(entry);
1.1842 + err = aRequest.Write(TFsPluginRequest::EEntry, data);
1.1843 + iLastError = err;
1.1844 + iLineNumber = __LINE__;
1.1845 + if(err!=KErrNone)
1.1846 + User::Leave(err); //trapped in DoRequestL
1.1847 +
1.1848 + // request processed by plug-in
1.1849 + User::Leave(KErrCompletion);
1.1850 + }
1.1851 + }
1.1852 +
1.1853 +
1.1854 +void CModifierPlugin::FsSetEntryL(TFsPluginRequest& aRequest)
1.1855 + {
1.1856 + TInt err = KErrNone;
1.1857 + TFileName filename;
1.1858 +
1.1859 + TBuf<256> testfilename1;
1.1860 +
1.1861 + //setting up test files
1.1862 + testfilename1.Append(iDriveToTest);
1.1863 + testfilename1.Append(_L(":\\Data\\test.txt"));
1.1864 +
1.1865 + if (aRequest.IsPostOperation())
1.1866 + {
1.1867 + _LOG(_L("CModifierPlugin::FsSetEntryL, post intercept"));
1.1868 + RFilePlugin fileplugin2(aRequest);
1.1869 + //open a second file
1.1870 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1871 + _LOG3(_L("CModifierPlugin::FsSetEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1872 + iLastError = err;
1.1873 + iLineNumber = __LINE__;
1.1874 + if(err!=KErrNone)
1.1875 + User::Leave(err); //trapped in DoRequestL
1.1876 +
1.1877 + TInt64 size=0;
1.1878 + err = fileplugin2.Size(size);
1.1879 + iLastError = err;
1.1880 + iLineNumber = __LINE__;
1.1881 + if(err!=KErrNone)
1.1882 + User::Leave(err); //trapped in DoRequestL
1.1883 +
1.1884 + //close the second file
1.1885 + fileplugin2.Close();
1.1886 + _LOG2(_L("CModifierPlugin::FsSetEntryL, RFilePlugin::Close to the second file returned %d"), err);
1.1887 + }
1.1888 + else
1.1889 + {
1.1890 + _LOG(_L("CModifierPlugin::FsSetEntryL, pre intercept"));
1.1891 + RFilePlugin fileplugin2(aRequest);
1.1892 + //open a second file
1.1893 + err = fileplugin2.Open(testfilename1, EFileWrite);
1.1894 + _LOG3(_L("CModifierPlugin::FsSetEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1.1895 + iLastError = err;
1.1896 + iLineNumber = __LINE__;
1.1897 + if(err!=KErrNone)
1.1898 + User::Leave(err); //trapped in DoRequestL
1.1899 +
1.1900 + TInt64 size=0;
1.1901 + err = fileplugin2.Size(size);
1.1902 + iLastError = err;
1.1903 + iLineNumber = __LINE__;
1.1904 + if(err!=KErrNone)
1.1905 + User::Leave(err); //trapped in DoRequestL
1.1906 +
1.1907 + //close the second file
1.1908 + fileplugin2.Close();
1.1909 + _LOG2(_L("CModifierPlugin::FsSetEntryL, FilePlugin::Close to the second file returned %d"), err);
1.1910 +
1.1911 + TTime time;
1.1912 + TPtr8 t((TUint8*)&time,sizeof(TTime));
1.1913 + err = aRequest.Read(TFsPluginRequest::ETime, t);
1.1914 + iLastError = err;
1.1915 + iLineNumber = __LINE__;
1.1916 + if(err!=KErrNone)
1.1917 + User::Leave(err); //trapped in DoRequestL
1.1918 +
1.1919 + filename = aRequest.Src().FullName();
1.1920 +
1.1921 + TInt setMode, clearMode;
1.1922 + err = aRequest.Read(TFsPluginRequest::ESetAtt, setMode);
1.1923 + iLastError = err;
1.1924 + iLineNumber = __LINE__;
1.1925 + if(err!=KErrNone)
1.1926 + User::Leave(err); //trapped in DoRequestL
1.1927 +
1.1928 + err = aRequest.Read(TFsPluginRequest::EClearAtt, clearMode);
1.1929 + iLastError = err;
1.1930 + iLineNumber = __LINE__;
1.1931 + if(err!=KErrNone)
1.1932 + User::Leave(err); //trapped in DoRequestL
1.1933 +
1.1934 + RFsPlugin fsplugin(aRequest);
1.1935 + err = fsplugin.Connect();
1.1936 + iLastError = err;
1.1937 + iLineNumber = __LINE__;
1.1938 + if(err!=KErrNone)
1.1939 + User::Leave(err); //trapped in DoRequestL
1.1940 +
1.1941 + err = fsplugin.SetEntry(filename, time, setMode, clearMode);
1.1942 + _LOG2(_L("CModifierPlugin::FsSetEntryL, RFsPlugin::SetEntry returned %d"), err);
1.1943 + iLastError = err;
1.1944 + iLineNumber = __LINE__;
1.1945 + if(err!=KErrNone)
1.1946 + User::Leave(err); //trapped in DoRequestL
1.1947 + fsplugin.Close();
1.1948 +
1.1949 + // request processed by plug-in
1.1950 + User::Leave(KErrCompletion);
1.1951 + }
1.1952 + }
1.1953 +
1.1954 +/**
1.1955 +@see TestVolume()
1.1956 +*/
1.1957 +void CModifierPlugin::FsVolumeL(TFsPluginRequest& aRequest)
1.1958 + {
1.1959 + if (aRequest.IsPostOperation())
1.1960 + {
1.1961 + _LOG(_L("CModifierPlugin::FsVolumeL, post intercept"));
1.1962 + }
1.1963 + else
1.1964 + {
1.1965 + _LOG(_L("CModifierPlugin::FsVolumeL, pre intercept"));
1.1966 + RFsPlugin fsplugin(aRequest);
1.1967 + CleanupClosePushL(fsplugin);
1.1968 +
1.1969 + TInt err = fsplugin.Connect();
1.1970 + iLastError = err;
1.1971 + iLineNumber = __LINE__;
1.1972 + if(err!=KErrNone)
1.1973 + User::Leave(err); // Trapped in DoRequestL
1.1974 +
1.1975 + TVolumeInfo volInfo;
1.1976 + TInt drive = (TInt)(iDriveToTest - (TChar)'A');
1.1977 + err = fsplugin.Volume(volInfo,drive);
1.1978 + _LOG3(_L("CModifierPlugin::FsVolumeL, RFsPlugin::Volume(drive %d) returned %d"), drive, err);
1.1979 + iLastError = err;
1.1980 + iLineNumber = __LINE__;
1.1981 + if(err!=KErrNone)
1.1982 + User::Leave(err); // Trapped in DoRequestL
1.1983 +
1.1984 + // Check that the volume label is the same as what was set in t_plugin_v2
1.1985 + _LIT(KVolumeLabel,"1Volume");
1.1986 + err = volInfo.iName.Compare(KVolumeLabel);
1.1987 + _LOG2(_L("CModifierPlugin::FsVolumeL, Compare volume label returned %d"), err);
1.1988 + iLastError = err;
1.1989 + iLineNumber = __LINE__;
1.1990 + if(err!=KErrNone)
1.1991 + User::Leave(err); // Trapped in DoRequestL
1.1992 +
1.1993 + // Modify volume name
1.1994 + _LOG2(_L("CModifierPlugin::FsVolumeL, Old volume name = %S"), &volInfo.iName);
1.1995 + TBuf<7> newVolumeName = volInfo.iName;
1.1996 + newVolumeName[0] = '2';
1.1997 + volInfo.iName = newVolumeName;
1.1998 + _LOG2(_L("CModifierPlugin::FsVolumeL, New volume name = %S"), &volInfo.iName);
1.1999 +
1.2000 + // Send back volume info
1.2001 + TPckgC<TVolumeInfo> volInfoPckg(volInfo);
1.2002 + err = aRequest.Write(TFsPluginRequest::EVolumeInfo, volInfoPckg);
1.2003 + iLastError = err;
1.2004 + iLineNumber = __LINE__;
1.2005 + if(err!=KErrNone)
1.2006 + User::Leave(err); // Trapped in DoRequestL
1.2007 +
1.2008 + CleanupStack::PopAndDestroy();
1.2009 +
1.2010 + // Request processed by plug-in
1.2011 + User::Leave(KErrCompletion);
1.2012 + }
1.2013 + }
1.2014 +
1.2015 +
1.2016 +/**
1.2017 +@internalComponent
1.2018 +*/
1.2019 +void CModifierPlugin::FsFileSubCloseL(TFsPluginRequest& aRequest)
1.2020 + {
1.2021 + if (aRequest.IsPostOperation())
1.2022 + {
1.2023 + _LOG(_L("CModifierPlugin::FsFileSubCloseL, post intercept"));
1.2024 + }
1.2025 + else
1.2026 + {
1.2027 + _LOG(_L("CModifierPlugin::FsFileSubCloseL, pre intercept"));
1.2028 + }
1.2029 + }
1.2030 +
1.2031 +/**
1.2032 +@internalComponent
1.2033 +*/
1.2034 +void CModifierPlugin::FsDirOpenL(TFsPluginRequest& aRequest)
1.2035 + {
1.2036 +
1.2037 + TBuf<256> testfilename1;
1.2038 +
1.2039 + TBuf<25> testtemp;
1.2040 + TInt err = aRequest.FileName(testtemp);
1.2041 + iLastError = err;
1.2042 + iLineNumber = __LINE__;
1.2043 + if(err!=KErrNone)
1.2044 + User::Leave(err); //trapped in DoRequestL
1.2045 +
1.2046 + //setting up test files
1.2047 + testfilename1.Append(iDriveToTest);
1.2048 + testfilename1.Append(_L(":\\Data2\\"));
1.2049 +
1.2050 + if (aRequest.IsPostOperation())
1.2051 + {
1.2052 + _LOG(_L("CModifierPlugin::FsDirOpenL, post intercept"));
1.2053 + }
1.2054 + else
1.2055 + {
1.2056 + _LOG(_L("CModifierPlugin::FsDirOpenL, pre intercept"));
1.2057 +
1.2058 + _LOG(_L("CModifierPlugin::FsDirOpenL, calling RDirPlugin::Open"));
1.2059 +
1.2060 + TPckgBuf<TUidType> uidPckg;
1.2061 + err = aRequest.Read(TFsPluginRequest::EUid, uidPckg);
1.2062 + iLastError = err;
1.2063 + iLineNumber = __LINE__;
1.2064 + if(err!=KErrNone)
1.2065 + User::Leave(err); //trapped in DoRequestL
1.2066 +
1.2067 + TUidType uidType = uidPckg();
1.2068 + TFileName filename;
1.2069 + filename = iDirFullName;
1.2070 +
1.2071 + RDirPlugin dirplugin(aRequest);
1.2072 + err = dirplugin.Open(filename, uidType);
1.2073 + _LOG2(_L("CModifierPlugin::FsDirOpenL, RDirPlugin::Open returned %d"), err);
1.2074 + iLastError = err;
1.2075 + iLineNumber = __LINE__;
1.2076 + if(err!=KErrNone)
1.2077 + User::Leave(err); //trapped in DoRequestL
1.2078 + dirplugin.Close();
1.2079 +
1.2080 + err = dirplugin.Open(testfilename1, uidType);
1.2081 + _LOG2(_L("CModifierPlugin::FsDirOpenL, RDirPlugin::Open returned %d"), err);
1.2082 + iLastError = err;
1.2083 + iLineNumber = __LINE__;
1.2084 + if(err!=KErrNone)
1.2085 + User::Leave(err); //trapped in DoRequestL
1.2086 +
1.2087 + dirplugin.Close();
1.2088 + }
1.2089 + }
1.2090 +
1.2091 +void CModifierPlugin::FsDirReadOneL(TFsPluginRequest& aRequest)
1.2092 + {
1.2093 + TFileName filename;
1.2094 + TInt err = aRequest.FileName(filename);
1.2095 + iLastError = err;
1.2096 + iLineNumber = __LINE__;
1.2097 + if(err!=KErrNone)
1.2098 + User::Leave(err); //trapped in DoRequestL
1.2099 +
1.2100 + TBuf<256> drivename;
1.2101 +
1.2102 + //setting up test files
1.2103 + drivename.Append(iDriveToTest);
1.2104 + drivename.Append(_L(":\\"));
1.2105 +
1.2106 + //filename = iDirFullName; //STF: Can this be policed by checking EParseSrc flag?
1.2107 +
1.2108 + if (aRequest.IsPostOperation())
1.2109 + {
1.2110 + _LOG(_L("CModifierPlugin::FsDirReadL, post intercept"));
1.2111 + }
1.2112 + else
1.2113 + {
1.2114 + _LOG(_L("CModifierPlugin::FsDirReadL, pre intercept"));
1.2115 +
1.2116 + TInt x = filename.CompareF(drivename);
1.2117 + if(x==0)
1.2118 + {
1.2119 + RDirPlugin dir(aRequest);
1.2120 + err = dir.Open(filename, KEntryAttMatchMask);
1.2121 + iLastError = err;
1.2122 + iLineNumber = __LINE__;
1.2123 + if(err!=KErrNone)
1.2124 + User::Leave(err); //trapped in DoRequestL
1.2125 +
1.2126 + TEntry entry;
1.2127 + err = dir.Read(entry);
1.2128 + iLastError = err;
1.2129 + iLineNumber = __LINE__;
1.2130 + if(err!=KErrNone)
1.2131 + User::Leave(err); //trapped in DoRequestL
1.2132 +
1.2133 + _LOG2(_L("CModifierPlugin::FsDirReadL, Read returned %S (first entry)"), &entry.iName);
1.2134 +
1.2135 + TPckgC<TEntry> data(entry);
1.2136 + err = aRequest.Write(TFsPluginRequest::EEntry, data);
1.2137 + iLastError = err;
1.2138 + iLineNumber = __LINE__;
1.2139 + if(err!=KErrNone)
1.2140 + User::Leave(err); //trapped in DoRequestL
1.2141 +
1.2142 + dir.Close();
1.2143 + User::Leave(KErrCompletion);
1.2144 + }
1.2145 + }
1.2146 + }
1.2147 +
1.2148 +
1.2149 +/**
1.2150 +@internalComponent
1.2151 +*/
1.2152 +void CModifierPlugin::FsDirReadPackedL(TFsPluginRequest& aRequest)
1.2153 + {
1.2154 + TFileName filename;
1.2155 + TInt err = aRequest.FileName(filename);
1.2156 + iLastError = err;
1.2157 + iLineNumber = __LINE__;
1.2158 + if(err!=KErrNone)
1.2159 + User::Leave(err); //trapped in DoRequestL
1.2160 + TParse parse;
1.2161 +
1.2162 + parse.Set(filename, NULL, NULL);
1.2163 + //TPtrC extension(parse.Ext());
1.2164 + TBuf<256> drivename;
1.2165 +
1.2166 + //setting up test files
1.2167 + drivename.Append(iDriveToTest);
1.2168 + drivename.Append(_L(":\\"));
1.2169 +
1.2170 + //filename = iDirFullName;
1.2171 +
1.2172 + if (aRequest.IsPostOperation())
1.2173 + {
1.2174 + _LOG(_L("CModifierPlugin::FsDirReadPackedL, post intercept"));
1.2175 + }
1.2176 + else
1.2177 + {
1.2178 + _LOG(_L("CModifierPlugin::FsDirReadPackedL, pre intercept"));
1.2179 +
1.2180 + TInt x = filename.CompareF(drivename);
1.2181 + if(x==0)
1.2182 + {
1.2183 + RDirPlugin dir(aRequest);
1.2184 + err = dir.Open(filename, KEntryAttMatchMask);
1.2185 + iLastError = err;
1.2186 + iLineNumber = __LINE__;
1.2187 + if(err!=KErrNone)
1.2188 + User::Leave(err); //trapped in DoRequestL
1.2189 +
1.2190 + TRawEntryArray aArray;
1.2191 + err = dir.Read(aArray);
1.2192 + iLastError = err;
1.2193 + iLineNumber = __LINE__;
1.2194 + if(err!=KErrNone && err!=KErrEof)
1.2195 + User::Leave(err); //trapped in DoRequestL
1.2196 +
1.2197 + TEntry entry = aArray[0];
1.2198 + _LOG2(_L("CModifierPlugin::FsDirReadPackedL, Read returned %S (first entry)"), &entry.iName);
1.2199 +
1.2200 + dir.Close();
1.2201 +
1.2202 + err = aRequest.Write(TFsPluginRequest::EEntryArray,aArray.Buf()); // Careful not to overwrite the KErrEof
1.2203 + iLastError = err;
1.2204 + iLineNumber = __LINE__;
1.2205 + if(err!=KErrNone)
1.2206 + User::Leave(err); //trapped in DoRequestL
1.2207 +
1.2208 + User::Leave(KErrEof); //This is effectively a completion code for FSDirReadPacked
1.2209 + }
1.2210 + }
1.2211 + }
1.2212 +
1.2213 +CFsPluginConn* CModifierPlugin::NewPluginConnL()
1.2214 + {
1.2215 + return new(ELeave) CModifierPluginConn();
1.2216 + }
1.2217 +
1.2218 +
1.2219 +//Synchronous RPlugin::DoControl
1.2220 +TInt CModifierPlugin::FsPluginDoControlL(CFsPluginConnRequest& aRequest)
1.2221 + {
1.2222 + TInt err = KErrNone;
1.2223 +
1.2224 + //We can use this to set the drive
1.2225 + //We can store this as a member of this class.
1.2226 +
1.2227 + TPckg<TInt> errCodeDes(iLastError);
1.2228 + TPckg<TInt> lineNumberDes(iLineNumber);
1.2229 + TPckg<TChar> drive(iDriveToTest);
1.2230 + TPckg<TBool> interceptStatusDes(iInterceptsEnabled);
1.2231 + typedef TBuf<256> TDirName;
1.2232 + TPckg<TDirName> dirnamePckg(iDirFullName);
1.2233 +
1.2234 + TInt function = aRequest.Function();
1.2235 + switch(function)
1.2236 + {
1.2237 + case KPluginSetDrive:
1.2238 + {
1.2239 + TRAP(err,aRequest.ReadParam1L(drive));
1.2240 + break;
1.2241 + }
1.2242 + case KPluginGetError:
1.2243 + {
1.2244 + TRAP(err,aRequest.WriteParam1L(errCodeDes));
1.2245 + TRAP(err,aRequest.WriteParam2L(lineNumberDes));
1.2246 + break;
1.2247 + }
1.2248 + case KPluginToggleIntercepts:
1.2249 + {
1.2250 + iInterceptsEnabled ^= 1; //toggle intercepts;
1.2251 + TRAP(err,aRequest.WriteParam1L(interceptStatusDes));
1.2252 + break;
1.2253 + }
1.2254 + case KPluginSetDirFullName:
1.2255 + {
1.2256 + //This is necessary as at present we have no way of getting the name of
1.2257 + //a directory!
1.2258 + TRAP(err,aRequest.ReadParam1L(dirnamePckg));
1.2259 + break;
1.2260 + }
1.2261 + default:
1.2262 + break;
1.2263 + }
1.2264 +
1.2265 + return err;
1.2266 + }
1.2267 +
1.2268 +TInt CModifierPluginConn::DoControl(CFsPluginConnRequest& aRequest)
1.2269 + {
1.2270 + return ((CModifierPlugin*)Plugin())->FsPluginDoControlL(aRequest);
1.2271 + }
1.2272 +
1.2273 +void CModifierPluginConn::DoRequest(CFsPluginConnRequest& aRequest)
1.2274 + {
1.2275 + TInt r = DoControl(aRequest);
1.2276 + aRequest.Complete(r);
1.2277 + }
1.2278 +
1.2279 +void CModifierPluginConn::DoCancel(TInt /*aReqMask*/)
1.2280 + {
1.2281 + }
1.2282 +
1.2283 +//factory functions
1.2284 +
1.2285 +class CModifierPluginFactory : public CFsPluginFactory
1.2286 + {
1.2287 +public:
1.2288 + CModifierPluginFactory();
1.2289 + virtual TInt Install();
1.2290 + virtual CFsPlugin* NewPluginL();
1.2291 + virtual CFsPlugin* NewPluginConnL();
1.2292 + virtual TInt UniquePosition();
1.2293 + };
1.2294 +
1.2295 +/**
1.2296 +Constructor for the plugin factory
1.2297 +@internalComponent
1.2298 +*/
1.2299 +CModifierPluginFactory::CModifierPluginFactory()
1.2300 + {
1.2301 + }
1.2302 +
1.2303 +/**
1.2304 +Install function for the plugin factory
1.2305 +@internalComponent
1.2306 +*/
1.2307 +TInt CModifierPluginFactory::Install()
1.2308 + {
1.2309 + SetSupportedDrives(KPluginSupportAllDrives);
1.2310 + //iSupportedDrives = 1<<23;
1.2311 + return(SetName(&KModifierPluginName));
1.2312 + }
1.2313 +
1.2314 +/**
1.2315 +@internalComponent
1.2316 +*/
1.2317 +TInt CModifierPluginFactory::UniquePosition()
1.2318 + {
1.2319 + return(KModifierPos);
1.2320 + }
1.2321 +
1.2322 +/**
1.2323 +Plugin factory function
1.2324 +@internalComponent
1.2325 +*/
1.2326 +CFsPlugin* CModifierPluginFactory::NewPluginL()
1.2327 +
1.2328 + {
1.2329 + return CModifierPlugin::NewL();
1.2330 + }
1.2331 +
1.2332 +/**
1.2333 +Plugin factory function
1.2334 +@internalComponent
1.2335 +*/
1.2336 +CFsPlugin* CModifierPluginFactory::NewPluginConnL()
1.2337 +
1.2338 + {
1.2339 + return CModifierPlugin::NewL();
1.2340 + }
1.2341 +
1.2342 +/**
1.2343 +Create a new Plugin
1.2344 +@internalComponent
1.2345 +*/
1.2346 +extern "C" {
1.2347 +
1.2348 +EXPORT_C CFsPluginFactory* CreateFileSystem()
1.2349 + {
1.2350 + return(new CModifierPluginFactory());
1.2351 + }
1.2352 +}
1.2353 +