messagingfw/msgtestfw/TestActions/Capabilities/CapUtils/src/CapUtils.cpp
changeset 0 8e480a14352b
--- /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 <f32file.h>
+#if defined( __WINS__ ) || defined( __WINSCW__ )
+#include <e32wins.h>
+#include <emulator.h>
+#include <stdlib.h>
+#else
+#include <f32image.h>
+#define MAX_PATH 512
+#endif
+
+
+
+TBool ParseRenameIfEmulator(TInt& err, TParse& pathFrom , TParse& pathTo)
+	{
+	err=KErrNone;	
+	
+	TBuf<MAX_PATH> 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<MAX_PATH> dName1;		
+	TBuf<MAX_PATH> 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<MAX_PATH> dName1;		
+	err = MapEmulatedFileName(dName1, pathTo.DriveAndPath());
+	if(err!=KErrNone)
+		return EFalse;
+	
+	TBuf8<MAX_PATH>  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<MAX_PATH> sName;
+	TBuf<MAX_PATH> sName1 = pathFrom.FullName();
+	err = MapEmulatedFileName(sName, sName1);
+	if(err!=KErrNone)
+		{			
+		Fs.Close();
+		return EFalse;
+		}
+
+	TBuf<MAX_PATH> dName;
+	TBuf<MAX_PATH> 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<MAX_PATH> 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<MAX_PATH> sName;
+	err = MapEmulatedFileName(sName, pathFrom.FullName());
+	if(err!=KErrNone)
+		{
+		Fs.Close();
+		return EFalse;
+		}
+
+	TBuf<MAX_PATH> 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<MAX_PATH> 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;	
+	}