kerneltest/e32test/resourceman/resourceman_psl/rescontrol_extended_psl.cpp
changeset 244 a77889bee936
parent 90 947f0dc9f7a8
child 257 3e88ff8f41d5
--- a/kerneltest/e32test/resourceman/resourceman_psl/rescontrol_extended_psl.cpp	Fri Aug 06 16:34:38 2010 +0100
+++ b/kerneltest/e32test/resourceman/resourceman_psl/rescontrol_extended_psl.cpp	Thu Aug 12 11:55:14 2010 +0100
@@ -31,56 +31,65 @@
 									|						  |
 								ResourceF				   ResourceG	
 	*/
-TInt DSimulatedPowerResourceController::DoRegisterStaticResourcesDependency(DStaticPowerResourceD**& aStaticResourceDArray, TUint16& aStaticResourceDCount)
+
+TInt DSimulatedPowerResourceController::DoRegisterStaticResourcesDependency(RPointerArray <DStaticPowerResourceD> & aStaticResourceDArray)
 	{
 	Kern::Printf(">DSimulatedPowerResourceController::DoRegisterStaticResourcesDependency");
-	aStaticResourceDArray = (DStaticPowerResourceD**)new(DStaticPowerResourceD*[MAX_DEPENDENT_RESOURCE_COUNT]);
-	if(!aStaticResourceDArray)
-		return KErrNoMemory;
+
+	// this is just for testing purposes - try to call base-class implementation, which by default resets the values and returns KErrNone
+	TInt r = DPowerResourceController::DoRegisterStaticResourcesDependency(aStaticResourceDArray);
+	if(r != KErrNone || aStaticResourceDArray.Count())
+		{
+		Kern::Printf("DPowerResourceController::DoRegisterStaticResourcesDependency() default base class implementation has failed?");
+		return KErrGeneral;
+		}
+
 	DStaticPowerResourceD* pR = NULL;
+	TBool error_occured = EFalse;
+
 	pR = new DMLSLGLSPDependResource();
-	if(!pR)
-		CLEAN_AND_RETURN(iStaticResDependencyCount, aStaticResourceDArray, KErrNoMemory)
-	aStaticResourceDArray[iStaticResDependencyCount++] = pR;
+	if(!SafeAppend(aStaticResourceDArray, pR))
+		error_occured = ETrue;
 
 	pR = new DMLSIGLSNDependResource();
-	if(!pR)
-		CLEAN_AND_RETURN(iStaticResDependencyCount, aStaticResourceDArray, KErrNoMemory)
-	aStaticResourceDArray[iStaticResDependencyCount++] = pR;
-	
+	if(!SafeAppend(aStaticResourceDArray, pR))
+		error_occured = ETrue;
+
 	pR = new DBSIGLSPDependResource();
-	if(!pR)
-		CLEAN_AND_RETURN(iStaticResDependencyCount, aStaticResourceDArray, KErrNoMemory)
-	aStaticResourceDArray[iStaticResDependencyCount++] = pR;
-
+	if(!SafeAppend(aStaticResourceDArray, pR))
+		error_occured = ETrue;
+	
 	pR = new DMLSHIGLSPDependResource();
-	if(!pR)
-		CLEAN_AND_RETURN(iStaticResDependencyCount, aStaticResourceDArray, KErrNoMemory)
-	aStaticResourceDArray[iStaticResDependencyCount++] = pR;
+	if(!SafeAppend(aStaticResourceDArray, pR))
+		error_occured = ETrue;
 
 	pR = new DBSHLGLSNDependResource();
-	if(!pR)
-		CLEAN_AND_RETURN(iStaticResDependencyCount, aStaticResourceDArray, KErrNoMemory)
-	aStaticResourceDArray[iStaticResDependencyCount++] = pR;
+	if(!SafeAppend(aStaticResourceDArray, pR))
+		error_occured = ETrue;
 
 	pR = new DMLSHLGLSNDependResource();
-	if(!pR)
-		CLEAN_AND_RETURN(iStaticResDependencyCount, aStaticResourceDArray, KErrNoMemory)
-	aStaticResourceDArray[iStaticResDependencyCount++] = pR;
+	if(!SafeAppend(aStaticResourceDArray, pR))
+		error_occured = ETrue;
 
 	//Establish resource dependencies
-	if(CreateResourceDependency(aStaticResourceDArray))
-		CLEAN_AND_RETURN(iStaticResDependencyCount, aStaticResourceDArray, KErrNoMemory)
+	r = CreateResourceDependency(aStaticResourceDArray);
+	if(r != KErrNone)
+		error_occured = ETrue;
 
-	iDependencyResources = aStaticResourceDArray;
+	// the only error that could occur here is KErrNoMemory (also from calling CreateResourceDependency)
+	// clean-up if the error did occur
+	if(error_occured)
+		{
+		aStaticResourceDArray.ResetAndDestroy();
+		r = KErrNoMemory;
+		}
 
-	aStaticResourceDCount = iStaticResDependencyCount;
-	return KErrNone;
+	return r;
 	}
 
 
 // This function establishes above dependency between static dependent resource
-TInt DSimulatedPowerResourceController::CreateResourceDependency(DStaticPowerResourceD** pResArray)
+TInt DSimulatedPowerResourceController::CreateResourceDependency(RPointerArray <DStaticPowerResourceD> & pResArray)
 	{
 	iNodeArray = new SNode[10];
 	SNode* pN1;