From abc7c03e2ef61ded88cf64f0506ae674f36bd0e5 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Mon, 12 Jan 2015 07:15:09 -0600 Subject: new should not through an exception if exceptions are disabled. new is now the same as new[]. Recommended by averyanovin --- misc/uClibc++/libxx/uClibc++/new_op.cxx | 77 ++++++++++++++++++++------------ misc/uClibc++/libxx/uClibc++/new_opv.cxx | 18 ++++---- 2 files changed, 57 insertions(+), 38 deletions(-) diff --git a/misc/uClibc++/libxx/uClibc++/new_op.cxx b/misc/uClibc++/libxx/uClibc++/new_op.cxx index 764eb835c..10e49de81 100644 --- a/misc/uClibc++/libxx/uClibc++/new_op.cxx +++ b/misc/uClibc++/libxx/uClibc++/new_op.cxx @@ -1,35 +1,54 @@ -/* Copyright (C) 2004 Garrett A. Kajmowicz +/* Copyright (C) 2004 Garrett A. Kajmowicz + * + * This file is part of the uClibc++ Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ - This file is part of the uClibc++ Library. +#include +#include - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. +#include - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. +#ifdef CONFIG_UCLIBCXX_EXCEPTION +# include +#else +# include +#endif - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ +_UCXXEXPORT void* operator new(std::size_t numBytes) throw(std::bad_alloc) +{ + // C++ standard 5.3.4.8 requires that a valid pointer be returned for + // a call to new(0). Thus: -#include -#include -#include - -_UCXXEXPORT void* operator new(std::size_t numBytes) throw(std::bad_alloc){ - //C++ stardard 5.3.4.8 requires that a valid pointer be returned for - //a call to new(0). Thus: - if(numBytes == 0){ - numBytes = 1; - } - void * p = malloc(numBytes); - if(p == 0){ - std::__throw_bad_alloc(); - } - return p; + if (numBytes == 0) + { + numBytes = 1; + } + + // Allocate the memory + + void *p = malloc(numBytes); + if (p == 0) + { +#ifdef CONFIG_UCLIBCXX_EXCEPTION + std::__throw_bad_alloc(); +#else + std::terminate(); +#endif + } + + return p; } diff --git a/misc/uClibc++/libxx/uClibc++/new_opv.cxx b/misc/uClibc++/libxx/uClibc++/new_opv.cxx index 312d5adb3..342b43d20 100644 --- a/misc/uClibc++/libxx/uClibc++/new_opv.cxx +++ b/misc/uClibc++/libxx/uClibc++/new_opv.cxx @@ -15,7 +15,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + */ #include #include @@ -30,25 +30,25 @@ _UCXXEXPORT void *operator new[](std::size_t numBytes) throw(std::bad_alloc) { - // C++ stardard 5.3.4.8 requires that a valid pointer be returned for + // C++ standard 5.3.4.8 requires that a valid pointer be returned for // a call to new(0). Thus: if (numBytes == 0) - { - numBytes = 1; - } + { + numBytes = 1; + } // Allocate the memory void *p = malloc(numBytes); if (p == 0) - { + { #ifdef CONFIG_UCLIBCXX_EXCEPTION - std::__throw_bad_alloc(); + std::__throw_bad_alloc(); #else - std::terminate(); + std::terminate(); #endif - } + } return p; } -- cgit v1.2.3