secureswitools/swisistools/source/interpretsislib/installablefile.cpp
branchRCL_3
changeset 73 79647526f98c
parent 62 5cc91383ab1e
child 81 42552535c1ac
--- a/secureswitools/swisistools/source/interpretsislib/installablefile.cpp	Tue Sep 14 21:31:28 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/installablefile.cpp	Wed Sep 15 12:20:42 2010 +0300
@@ -34,7 +34,8 @@
 
 
 // SA SIS files
-InstallableFile::InstallableFile(const CSISFileDescription& aFdes, const CSISFileData* aFdata, const std::wstring aDrivePath, int aInstallingDrive)
+InstallableFile::InstallableFile(const CSISFileDescription& aFdes, const CSISFileData* aFdata, const std::wstring aDrivePath, 
+									int aInstallingDrive, const int aSystemdrive, const bool aGenerateRomStub)
 : isExecutable(aFdata->IsExecutable()),
   isExe(aFdata->IsExe()),
   iSid(aFdata->GetSid()),
@@ -50,7 +51,7 @@
 	std::transform(iLocalTargetFile.begin(), iLocalTargetFile.end(), iLocalTargetFile.begin(), tolower);
 
 	// Update the installing file with the actual target drive letter
-	ChangeTargetDrive(aDrivePath, aInstallingDrive);
+	ChangeTargetDrive(aDrivePath, aInstallingDrive, aSystemdrive, aGenerateRomStub);
 
 	// warn the user if they are using a winscw emulator binary
 	if (aFdata->IsEmulatorExecutable())
@@ -59,7 +60,7 @@
 
 // PA SIS files		
 InstallableFile::InstallableFile(const CSISFileDescription& aFdes, const std::wstring aDrivePath,
-								 int aInstallingDrive)
+								 int aInstallingDrive, const int aSystemdrive, const bool aGenerateRomStub)
 : isExecutable(false),
   isExe(false),
   iSid(0),
@@ -75,7 +76,7 @@
 	std::transform(iLocalTargetFile.begin(), iLocalTargetFile.end(), iLocalTargetFile.begin(), tolower);
 
 	// Update the installing file with the actual target drive letter
-	ChangeTargetDrive(aDrivePath, aInstallingDrive);
+	ChangeTargetDrive(aDrivePath, aInstallingDrive, aSystemdrive, aGenerateRomStub);
 
 		// retrieve the file attributes e.g. exe, dll, SID etc.
 	const bool fileExists = FileExists( iLocalTargetFile );
@@ -116,8 +117,13 @@
 	delete iFileData;
 }
 
+void InstallableFile::SetTarget(const  std::wstring& aTargetFile)
+{
+	iTargetFile = aTargetFile;
+}
 
-void InstallableFile::ChangeTargetDrive(const std::wstring aDrivePath, int aInstallingDrive)
+void InstallableFile::ChangeTargetDrive(const std::wstring aDrivePath, int aInstallingDrive, 
+												const int aSystemdrive, const bool aGenerateRomStub)
 {
 	// get the local path
 	ConvertToLocalPath(iLocalTargetFile,aDrivePath);
@@ -132,9 +138,24 @@
 		int targetFileDrive = tolower(target[0]);
 		if (targetFileDrive != aInstallingDrive)
 		{
-			iTargetFile[0] = aInstallingDrive;
-			LINFO(L"Disregarding drive selection. Installing "
-				+ target + L" to " + iTargetFile);
+			if((iTargetFile[0] == '$') && !aGenerateRomStub)
+			{
+				//Creating tmpTarget so that '$' in iTargetFile is retained  and 
+				//can be used as a marker while File Copy to system drive and 
+				//not to LocalTargetPath
+				std::wstring tmpTarget(iTargetFile);
+				tmpTarget[0] = aSystemdrive;
+				
+				LINFO(L"Disregarding drive selection. Installing "
+					<< target.c_str() << L" to " << tmpTarget.c_str());
+			}
+			else
+			{
+				iTargetFile[0] = aInstallingDrive;
+				
+				LINFO(L"Disregarding drive selection. Installing "
+					<< target.c_str() << L" to " << iTargetFile.c_str());
+			}
 		}
 	}
 	else