symport/e32/euser/us_trp.cpp
changeset 1 0a7b44b10206
child 2 806186ab5e14
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symport/e32/euser/us_trp.cpp	Thu Jun 25 15:59:54 2009 +0100
@@ -0,0 +1,155 @@
+// Copyright (c) 1994-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 "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32\euser\us_trp.cpp
+// 
+//
+
+#include "us_std.h"
+#include "us_data.h"
+
+
+
+
+EXPORT_C TTrapHandler::TTrapHandler()
+/**
+Default constructor.
+*/
+	{}
+
+
+#ifndef __LEAVE_EQUALS_THROW__
+
+EXPORT_C void TTrap::UnTrap()
+//
+// Pop the current trap frame
+//
+	{
+
+	TTrapHandler *pH=Exec::PopTrapFrame()->iHandler;
+	if (pH!=NULL)
+		pH->UnTrap();
+	}
+
+
+#else //__LEAVE_EQUALS_THROW__
+
+EXPORT_C void User::Leave(TInt aReason)
+/**
+Leaves the currently executing function, unwinds the call stack, and returns
+from the most recently entered trap harness.
+
+@param aReason The value returned from the most recent call to TRAP or TRAPD.
+               This is known as the reason code and, typically, it gives the
+               reason for the environment or user error causing this leave
+               to occur.
+              
+@see TRAP
+@see TRAPD              
+*/
+	{
+#ifdef __USERSIDE_THREAD_DATA__
+#ifndef __TOOLS2__
+	Exec::LeaveStart();
+#endif
+	TTrapHandler* pH = GetTrapHandler();
+#else
+	TTrapHandler* pH = Exec::LeaveStart();
+#endif
+	if (pH)
+		pH->Leave(aReason);	// causes things on the cleanup stack to be cleaned up
+	throw XLeaveException(aReason);
+	}
+
+#endif // !__LEAVE_EQUALS_THROW__
+
+
+// Private declaration to prevent def file branching
+#ifndef __SUPPORT_CPP_EXCEPTIONS__
+class XLeaveException
+	{
+public:
+	IMPORT_C TInt GetReason() const;
+	};
+#endif //__SUPPORT_CPP_EXCEPTIONS__
+
+#if !defined(__LEAVE_EQUALS_THROW__) || !defined(__WINS__)
+EXPORT_C TInt XLeaveException::GetReason() const
+	{
+#ifdef __SUPPORT_CPP_EXCEPTIONS__
+#ifndef __TOOLS2__
+	Exec::LeaveEnd();
+#endif
+	return iR;
+#else // !__SUPPORT_CPP_EXCEPTIONS__
+	return KErrNone;
+#endif //__SUPPORT_CPP_EXCEPTIONS__
+	}
+#endif	// !defined(__LEAVE_EQUALS_THROW__) || !defined(__WINS__)
+
+EXPORT_C void User::LeaveNoMemory()
+/**
+Leaves with the specific reason code KErrNoMemory.
+
+@see KErrNoMemory
+*/
+	{
+
+	User::Leave(KErrNoMemory);
+	}
+
+
+
+
+EXPORT_C TInt User::LeaveIfError(TInt aReason)
+/**
+Leaves or returns with a specified reason code.
+
+If the reason code is negative the function leaves, and the reason code is 
+returned through the trap harness.
+
+If the reason code is zero or positive, the function simply returns with the 
+reason value.
+
+@param aReason The reason code.
+
+@return If the function returns, the reason code which is either zero or positive.
+*/
+	{
+
+	if (aReason<0)
+		User::Leave(aReason);
+	return(aReason);
+	}
+
+
+
+
+EXPORT_C TAny * User::LeaveIfNull(TAny *aPtr)
+/**
+Leaves with the reason code KErrNoMemory, if the specified pointer is NULL. 
+
+If the pointer is not NULL, the function simply returns with the value of 
+the pointer.
+
+@param aPtr The pointer to be tested.
+
+@return If the function returns, the value of aPtr.
+*/
+	{
+
+	if (aPtr==NULL)
+		User::LeaveNoMemory();
+	return(aPtr);
+	}
+