summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-01-12 07:15:09 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-01-12 07:15:09 -0600
commitabc7c03e2ef61ded88cf64f0506ae674f36bd0e5 (patch)
tree12c6611e122fbf755dc0c32ff4de8137b7efdc2d
parent2a34454b57e467a1e0a95956d8b91e495370ba71 (diff)
downloadnuttx-abc7c03e2ef61ded88cf64f0506ae674f36bd0e5.tar.gz
nuttx-abc7c03e2ef61ded88cf64f0506ae674f36bd0e5.tar.bz2
nuttx-abc7c03e2ef61ded88cf64f0506ae674f36bd0e5.zip
new should not through an exception if exceptions are disabled. new is now the same as new[]. Recommended by averyanovin
-rw-r--r--misc/uClibc++/libxx/uClibc++/new_op.cxx77
-rw-r--r--misc/uClibc++/libxx/uClibc++/new_opv.cxx18
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 <new>
+#include <cstdlib>
- 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 <basic_definitions>
- 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 <func_exception>
+#else
+# include <exception>
+#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 <new>
-#include <cstdlib>
-#include <func_exception>
-
-_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 <new>
#include <cstdlib>
@@ -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;
}