persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp
branchRCL_3
changeset 23 26645d81f48d
parent 8 fa9941cf3867
child 24 cc28652e0254
--- a/persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp	Thu Aug 19 11:36:21 2010 +0300
+++ b/persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp	Tue Aug 31 16:57:14 2010 +0300
@@ -32,12 +32,25 @@
 	{
 	iNotifier = &aObserver;
 	
-	iRepository = TServerResources::iObserver->AccessL(aUid, aFailIfNotFound);
+	TServerResources::iObserver->iObservers.ReserveL(1);
+	
+	TServerResources::iObserver->AddSharedRepositoryInfoL(aUid);
+	
+	TRAPD( err, iRepository = TServerResources::iObserver->AccessL(aUid, aFailIfNotFound) );
+	
 	//store uid
-	iUid = aUid;	
-
-	TServerResources::iObserver->AddObserverL(aUid, this);
-	TServerResources::iObserver->AddSharedRepositoryInfoL(aUid);
+	iUid = aUid;
+	
+	if (err == KErrNone)
+	    {
+        TRAP( err, TServerResources::iObserver->AddObserverL(aUid, this) );
+	    }
+	    
+	if (err != KErrNone)
+        {
+        TServerResources::iObserver->RemoveSharedRepositoryInfo(aUid);
+        User::Leave(err);
+        }
 	}
 
 void CServerRepository::Close()
@@ -398,6 +411,7 @@
 					  {
 					  if(err == KErrNoMemory)
 					    {
+                        repository->Close();
 					    User::LeaveNoMemory();
 					    }
 				      else
@@ -652,21 +666,27 @@
 			
 		// Create install rep for merging
  		CSharedRepository *installRep = 0;
- 		TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, installRep, CIniFileIn::EInstallOnly);
+ 		TRAPD( err, TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, installRep, CIniFileIn::EInstallOnly); CleanupStack::Pop(installRep) );
 	
-		// Perform merge
-		iRepository->HandleUpdateMergeL(aModified, *installRep);
-						
-		CleanupStack::PopAndDestroy(installRep);
-		Close();
+		if (err == KErrNone)
+            {
+            // Perform merge
+            TRAP( err, iRepository->HandleUpdateMergeL(aModified, *installRep) );
+            }
+        if (installRep!=NULL)
+            {
+            delete installRep;
+            }
+        Close();
+        User::LeaveIfError(err);
 		}
 	else	// No ROM or persists
 		{
 		// Create install rep for persisting
 		OpenL(aUid, aNotifier);
-	
-		iRepository->CommitChangesL();
-		Close();
+		TRAPD(err, iRepository->CommitChangesL());
+	    Close();
+	    User::LeaveIfError(err);
 		}
 	}
 
@@ -698,13 +718,19 @@
 		
 		// Create ROM rep for merging
 	 	CSharedRepository *romRep = 0;
-		TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, romRep, CIniFileIn::ERomOnly);
+		TRAPD( err, TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, romRep, CIniFileIn::ERomOnly); CleanupStack::Pop(romRep) );
 
-		// Perform merge
-		iRepository->HandleDeleteMergeL(*romRep);
-		
-		CleanupStack::PopAndDestroy(romRep);
+		if (err == KErrNone)
+		    {
+            // Perform merge
+            TRAP( err, iRepository->HandleDeleteMergeL(*romRep) );
+		    }
+		if (romRep!=NULL)
+		    {
+            delete romRep;
+		    }
 		Close();
+		User::LeaveIfError(err);
 		}
 	else											// No ROM file, this is a complete uninstall
 		{		
@@ -988,24 +1014,24 @@
 	iRepository = NULL;
 	}
 
-TInt CServerRepository::CheckAccessPolicyBeforeMoving(const TClientRequest& aMessage, const TServerSetting& aSourceSetting, 
-				TUint32 aSourceKey, const TServerSetting& aTargetSetting, TUint32 aTargetKey, TUint32& aErrorKey)
+TInt CServerRepository::CheckAccessPolicyBeforeMoving(const TClientRequest& aMessage, const TServerSetting* aSourceSetting, 
+				TUint32 aSourceKey, const TServerSetting* aTargetSetting, TUint32 aTargetKey, TUint32& aErrorKey)
 	{
 	TInt error = KErrNone;
 	
-	if (&aTargetSetting && !aTargetSetting.IsDeleted())
+	if (aTargetSetting && !aTargetSetting->IsDeleted())
 		{
 		error=KErrAlreadyExists;
 		aErrorKey=aTargetKey;
 		}
 
-	if (!aMessage.CheckPolicy(GetReadAccessPolicy(aSourceSetting),
+	if (!aMessage.CheckPolicy(GetReadAccessPolicy(*aSourceSetting),
 		__PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to read a setting")))
 		{
 		error = KErrPermissionDenied;
 		aErrorKey = aSourceKey;
 		}
-	else if (!aMessage.CheckPolicy(GetWriteAccessPolicy(aSourceSetting),
+	else if (!aMessage.CheckPolicy(GetWriteAccessPolicy(*aSourceSetting),
 		__PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to delete a setting")))
 		{
 		error = KErrPermissionDenied;
@@ -1014,7 +1040,7 @@
 	else if (error == KErrAlreadyExists)
 		{
 		// set error to KErrPermissionDenied in preference to KErrAlreadyExists
-		if (!aMessage.CheckPolicy(GetWriteAccessPolicy(aTargetSetting),
+		if (!aMessage.CheckPolicy(GetWriteAccessPolicy(*aTargetSetting),
 			__PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to create a setting")))
 			{
 			error = KErrPermissionDenied;