diff -r 2fb8b9db1c86 -r d55eb581a87c baseport/syborg/svphostfs/fs/svphostfsstart.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/svphostfs/fs/svphostfsstart.cpp Tue Aug 04 10:28:23 2009 +0100 @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include + +_LIT(KEStartPanicCatagory, "SVP_HOSTFS_SYSSTART"); + +enum TEStartPanic + { + ELitNoDM = 1, // No Domain Manager + ELitDMInitFail, // Domain Manager init fail + ELitHALFail, // HAL init fail + ELitConnectFsFail1, // Connect fs 1 fail + ELitInitLocalPwStoreFail, // Init PwStore fail + ELitLocaleInitialisationFail, // Initialisation of locale properties failed + ELitFSInitDriveInfoFail, // FS Init DriveInfo fail + ELitCreateTrapHandlerFail, // Create trap handler fail + ELitLoadSysLddsFail, // Load sys ldds fail + ELitLocalDriveMappingFail, // Local drive mapping fail + ELitDriveMappingFileFail, // Drive mapping file not found + ELitSwapMappingFailArrayInconsistent, // Swap mappings fail - array inconsistent + ELitFsSwapMappingFail, // Swap mappings fail - Fs request failed + EPropertyError, // RProperty return error + ECompMountFsFail, // Failed comp fs mount + EFsNameFail, // File system name on Z: failed + ELitNoWS, // No WSERV + EStartupModeFail, // Get startup mode failed + ESysAgentFail, // Fail to launch system agent + ESetSystemDriveFail // Fail to set System Drive + }; + +inline void Panic(TEStartPanic aPanic, TInt aReason) + { + TBuf<10> panic(KEStartPanicCatagory); + panic.AppendFormat(_L("_%d"), aPanic); + User::Panic(panic, aReason); + } + +_LIT(KServerPathSysBin, "0:\\Sys\\Bin\\"); +_LIT(KWindowServerRootName1,"EWSRV.EXE"); +_LIT(KHostFSMounter, "z:\\sys\\bin\\SVPHOSTFS.EXE"); + +TBool CreateServer(const TDriveList& aDrives, const TDesC& aRootName) + { + RProcess ws; + TInt r=ws.Create(aRootName, KNullDesC); + if (r!=KErrNone) + { + TFileName name; + name = KServerPathSysBin(); + name+=aRootName; + TInt i=EDriveZ; + FOREVER + { + i= (i==0) ? EDriveZ : i-1; + if (aDrives[i]!=KDriveAbsent) // Got a valid drive + { + name[0]=(TUint32)('A'+i); // Set the drive letter + r=ws.Create(name,KNullDesC); + if (r==KErrNone) + break; + } + if (i==EDriveZ) + return EFalse; + } + } + ws.Resume(); + ws.Close(); + return ETrue; + } + +GLDEF_C TInt E32Main() + { + RProcess ws; + TInt r=ws.Create(KHostFSMounter, KNullDesC); + if (r == KErrNone) + { + TRequestStatus stat; + ws.Rendezvous(stat); + ws.Resume(); + User::WaitForRequest(stat); // wait for start or death + ws.Close(); + } + // Start the window server + RFs aFs; + r = aFs.Connect(); + + if (r != KErrNone) + Panic(ELitConnectFsFail1, r); + TDriveList list; + aFs.DriveList(list); + aFs.Close(); + + if (!CreateServer(list,KWindowServerRootName1)) + Panic(ELitNoWS,KErrNotFound); + + return(KErrNone); + }