diff -r 000000000000 -r 8e480a14352b messagingfw/msgtestfw/TestActions/Capabilities/CapUtils/src/CapUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtestfw/TestActions/Capabilities/CapUtils/src/CapUtils.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,523 @@ +// Copyright (c) 2005-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 +#if defined( __WINS__ ) || defined( __WINSCW__ ) +#include +#include +#include +#else +#include +#define MAX_PATH 512 +#endif + + + +TBool ParseRenameIfEmulator(TInt& err, TParse& pathFrom , TParse& pathTo) + { + err=KErrNone; + + TBuf c; + User::CommandLine(c); + + TLex l(c); + + + _LIT( LTokenRenameIfEmulator, "RenameIfEmulator" ); + TPtrC commandTokenRenameIfEmulator(l.NextToken()); + + if (commandTokenRenameIfEmulator!=LTokenRenameIfEmulator ) + { // Must be something else. + err = KErrNone; + return EFalse; + } + + // Get source path + if(pathFrom.SetNoWild(l.NextToken(),0,0)!=KErrNone) + { // Not considered a path. + err = KErrArgument; + return ETrue; + } + + // Get target path + if(pathTo.SetNoWild(l.NextToken(),0,0)!=KErrNone) + { // Not considered a path. + err = KErrArgument; + return ETrue; + } + + // Managed to parse to parse the command line. + // And get in all the parameters correctly. + err = KErrNone; + + return ETrue; + } + + + +TBool HasValidPath(TParse& pathTo) + { + + TBuf dName1; + TBuf dName2; + dName1 = pathTo.FullName(); + dName2 = pathTo.NameAndExt(); + + if (dName1 == dName2) + { // No directory to create. Its a server or exe at release\winscw\udeb + return EFalse; + } + + return ETrue; + } + + +#if defined( __WINS__ ) || defined( __WINSCW__ ) + +TBool CreateDirectory(RFs& Fs, TParse& pathTo) + { + TInt err = KErrNone; + TBool ret=EFalse; + + + TBuf dName1; + err = MapEmulatedFileName(dName1, pathTo.DriveAndPath()); + if(err!=KErrNone) + return EFalse; + + TBuf8 dName1Char; + dName1Char.Copy(dName1); + + ret = Emulator::CreateAllDirectories( (LPCSTR) dName1Char.PtrZ() ); + if( !ret ) + { // Problem with directory creation. + err=KErrGeneral; + Fs.Close(); + return EFalse; + } + + return ETrue; + } + +#endif + +// ETrue=> carried out the action succesfully. +// EFalse=> some sort of error. + +TBool DoRenameIfEmulator(TInt& err , TParse& pathFrom , TParse& pathTo) + { + err=KErrNone; + +#if defined( __WINS__ ) || defined( __WINSCW__ ) + + RFs Fs; + + err = Fs.Connect(); + if(err!=KErrNone) + { + err=KErrGeneral; + return EFalse; + } + + + if ( HasValidPath(pathTo) ) + { + if ( !CreateDirectory( Fs , pathTo) ) + { // Unable to create the directory. + err=KErrGeneral; + Fs.Close(); + return EFalse; + } + } + // else probably just release\winscw\udeb which is where exe's go ( for the moment ) in the emulator. + + + TBuf sName; + TBuf sName1 = pathFrom.FullName(); + err = MapEmulatedFileName(sName, sName1); + if(err!=KErrNone) + { + Fs.Close(); + return EFalse; + } + + TBuf dName; + TBuf dName1=pathTo.FullName(); + err = MapEmulatedFileName(dName, dName1); + if(err!=KErrNone) + { + Fs.Close(); + return EFalse; + } + + + Emulator::DeleteFile((LPCTSTR)dName.PtrZ()); + // Always delete before we move. + + if(!Emulator::MoveFile((LPCTSTR)sName.PtrZ(),(LPCTSTR)dName.PtrZ())) + { + + WIN32_FIND_DATA ff; + if ( FindFirstFile((LPCTSTR)sName.PtrZ() , &ff) == INVALID_HANDLE_VALUE ) + { // The file does not exists just fail the move silently. + err=KErrNone; + Fs.Close(); + return EFalse; + } + else + { // The file still exists probably locked by CW. + // Only thing can do is to issue an error. + err=KErrGeneral; + Fs.Close(); + return EFalse; + } + } + + + Fs.Close(); + +#endif +// #else not emulator so do nothing. + + + // Managed to rename the file succesfully. + // or did nothing at all if not emulator. + err=KErrNone; + return ETrue; + } + + +//************************************** + + +// ret == ETrue => That was the command and it was succesful. +// or the file did not exist and we failed silently. +// either way we do not want to continue parsing. +// ret == EFalse => that the + +TBool RenameIfEmulator(TInt& err) + { + TBool ret=EFalse; + err=KErrNone; + + TParse pathFrom; + TParse pathTo; + + + ret = ParseRenameIfEmulator(err , pathFrom, pathTo); + if ( ret ) + { + if (err==KErrNone) + { // Okay have parsed good arguments. + DoRenameIfEmulator(err , pathFrom, pathTo); + } + // else some sort of error. + } + // else not recognised the command. + + return ret; + } + +//************************************** +//************************************** + +TBool ParseCopyIfEmulator(TInt& err, TParse& pathFrom , TParse& pathTo) + { + err=KErrNone; + + TBuf c; + User::CommandLine(c); + + TLex l(c); + + + _LIT( LTokenRenameIfEmulator, "CopyIfEmulator" ); + TPtrC commandTokenRenameIfEmulator(l.NextToken()); + + if (commandTokenRenameIfEmulator!=LTokenRenameIfEmulator ) + { // Must be something else. + err = KErrNone; + return EFalse; + } + + // Get source path + if(pathFrom.SetNoWild(l.NextToken(),0,0)!=KErrNone) + { // Not considered a path. + err = KErrArgument; + return ETrue; + } + + // Get target path + if(pathTo.SetNoWild(l.NextToken(),0,0)!=KErrNone) + { // Not considered a path. + err = KErrArgument; + return ETrue; + } + + // Managed to parse to parse the command line. + // And get in all the parameters correctly. + err = KErrNone; + + return ETrue; + } + + +TBool DoCopyIfEmulator(TInt& err , TParse& pathFrom , TParse& pathTo) + { + err=KErrNone; + +#if defined( __WINS__ ) || defined( __WINSCW__ ) + + RFs Fs; + + err = Fs.Connect(); + if(err!=KErrNone) + return EFalse; + + if ( HasValidPath(pathTo) ) + { + if ( !CreateDirectory( Fs , pathTo) ) + { // Unable to create the directory. + err=KErrGeneral; + Fs.Close(); + return EFalse; + } + } + // else probably just release\winscw\udeb which is where exe's go ( for the moment ) in the emulator. + + + TBuf sName; + err = MapEmulatedFileName(sName, pathFrom.FullName()); + if(err!=KErrNone) + { + Fs.Close(); + return EFalse; + } + + TBuf dName; + err = MapEmulatedFileName(dName, pathTo.FullName()); + if(err!=KErrNone) + { + Fs.Close(); + return EFalse; + } + + if(!Emulator::CopyFile((LPCTSTR)sName.PtrZ(),(LPCTSTR)dName.PtrZ(),FALSE)) + { + err=KErrGeneral; + Fs.Close(); + return EFalse; + } + + Fs.Close(); + +#endif +// #else not emulator so do nothing. + + + // Managed to rename the file succesfully. + // or did nothing at all if not emulator. + err=KErrNone; + + return ETrue; + } + + + +//************************************** + +TBool CopyIfEmulator(TInt& err) + { + TBool ret=EFalse; + err=KErrNone; + + TParse pathFrom; + TParse pathTo; + + + ret = ParseCopyIfEmulator(err , pathFrom, pathTo); + if ( ret ) + { + if (err==KErrNone) + { // Okay have parsed good arguments. + DoCopyIfEmulator(err , pathFrom, pathTo); + } + // else some sort of error. + } + // else not recognised the command. + + return ret; + } + +//************************************** + +TBool ParseRenameIfExists(TInt& err, TParse& pathFrom , TParse& pathTo) + { + err=KErrNone; + + TBuf c; + User::CommandLine(c); + + TLex l(c); + + _LIT( LTokenRenameIfEmulator, "RenameIfExists" ); + TPtrC commandTokenRenameIfEmulator(l.NextToken()); + + if (commandTokenRenameIfEmulator!=LTokenRenameIfEmulator ) + { // Must be something else. + err = KErrNone; + return EFalse; + } + + // Get source path + if(pathFrom.SetNoWild(l.NextToken(),0,0)!=KErrNone) + { // Not considered a path. + err = KErrArgument; + return ETrue; + } + + // Get target path + if(pathTo.SetNoWild(l.NextToken(),0,0)!=KErrNone) + { // Not considered a path. + err = KErrArgument; + return ETrue; + } + + // Managed to parse to parse the command line. + // And get in all the parameters correctly. + err = KErrNone; + + return ETrue; + } + + + +TBool DoRenameIfExists(TInt& err , TParse& pathFrom , TParse& pathTo) + { + TBool ret=EFalse; + err=KErrNone; + + RFs Fs; + + err = Fs.Connect(); + if(err!=KErrNone) + return EFalse; + + err = Fs.MkDirAll(pathTo.FullName()); + + if ( (err==KErrNone ) || (err==KErrAlreadyExists) ) + { + RFile Source; + + err=Source.Open(Fs,pathFrom.FullName(),EFileRead); + if(err!=KErrNone) + { + // Source does not exist no copy no error. + err=KErrNone; + Fs.Close(); + return EFalse; + } + Source.Close(); + // Okay source exists. + + + ret = Fs.Replace(pathFrom.FullName() , pathTo.FullName()); + if(ret!=KErrNone) + { + Fs.Close(); + err=KErrNone; + return EFalse; + } + } + + Fs.Close(); + + + // Managed to rename the file succesfully. + // or did nothing at all if not emulator. + ret=ETrue; + + return ret; + } + + + + +//************************************** +//************************************** + +TBool RenameIfExists(TInt& err) + { + TBool ret=EFalse; + err=KErrNone; + + TParse pathFrom; + TParse pathTo; + + + ret = ParseRenameIfExists(err , pathFrom, pathTo); + if ( ret ) + { + if (err==KErrNone) + { // Okay have parsed good arguments. + DoRenameIfExists(err , pathFrom, pathTo); + } + // else some sort of error. + } + // else not recognised the command. + + + return ret; + } +//************************************** + + + +// RenameIfEmulator z:\a.x c:\a.x +// CopyIfEmulator z:\a.x c:\a.x +// RenameIfExists z:\a.x c:\a.x + +TInt E32Main() + { + TInt err=KErrNone; + TBool done=EFalse; + + + done=RenameIfEmulator( err); + if ( done ) + { // Assumed command was RenameIfEmulator, which may or may not have run correctly (check err). + } + else + { + done=CopyIfEmulator( err); + if ( done ) + { // Assumed command was CopyIfEmulator, which may or may not have run correctly (check err). + } + else + { + done=RenameIfExists( err); + if ( done ) + { // Assumed command was RenameIfExists, which may or may not have run correctly (check err). + } + else + { + err=KErrNotFound; + } + } + } + + return err; + }