sl@0: // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // Name : new_handler.cpp sl@0: // Part of : libstdcpp sl@0: // Adaptation layer to get locale functionality. sl@0: // Version : sl@0: // This material, including documentation and any related sl@0: // computer programs, is protected by copyright controlled by sl@0: // Nokia Corporation. All rights are reserved. Copying, sl@0: // including reproducing, storing, adapting or translating, any sl@0: // or all of this material requires the prior written consent of sl@0: // Nokia Corporation. This material also contains confidential sl@0: // information which may not be disclosed to others without the sl@0: // prior written consent of Nokia Corporation. sl@0: // sl@0: sl@0: sl@0: sl@0: #include "new" sl@0: #include sl@0: sl@0: _LIT(K,"set_new_handler"); sl@0: sl@0: sl@0: using std::new_handler; sl@0: sl@0: #ifdef __SYMBIAN_STDCPP_SUPPORT__ sl@0: sl@0: EXPORT_C new_handler std::set_new_handler(new_handler a_new_nh) __NO_THROW sl@0: { sl@0: new_handler current_nh; sl@0: TAny* tls_word_p = Dll::Tls(); sl@0: sl@0: if (!tls_word_p) sl@0: { sl@0: // This is the first time we're called, so we need to set up the TLS. sl@0: sl@0: tls_word_p = User::Alloc( sizeof(new_handler) ); sl@0: if ( !tls_word_p ) sl@0: { sl@0: User::Panic(K, KErrNoMemory); sl@0: } sl@0: sl@0: Dll::SetTls(tls_word_p); sl@0: current_nh = 0; sl@0: } sl@0: else sl@0: { sl@0: // Get the currently installed new_handler function. sl@0: current_nh = *reinterpret_cast(tls_word_p); sl@0: } sl@0: sl@0: // Set the new new_handler. sl@0: *reinterpret_cast(tls_word_p) = a_new_nh; sl@0: sl@0: return current_nh; sl@0: } sl@0: sl@0: #endif // __SYMBIAN_STDCPP_SUPPORT__