aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/libsupc++/new_op.cc
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@gcc.gnu.org>2000-10-06 23:31:22 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2000-10-06 23:31:22 +0000
commit06bd10fb63d7bcdb508e34474fa72e75770b052d (patch)
tree2314d5dbdf5b1c34ddc9e7f6588386f6d3ba990b /libstdc++-v3/libsupc++/new_op.cc
parent4071f896a0695fb3c31153e803bbb3d1bc880108 (diff)
downloadgcc-06bd10fb63d7bcdb508e34474fa72e75770b052d.zip
gcc-06bd10fb63d7bcdb508e34474fa72e75770b052d.tar.gz
gcc-06bd10fb63d7bcdb508e34474fa72e75770b052d.tar.bz2
libsupc++: New directory.
2000-10-06 Benjamin Kosnik <bkoz@cygnus.com> Richard Henderson <rth@cygnus.com> Alexandre Oliva <aoliva@redhat.com> * libsupc++: New directory. * libsupc++/*: Populate. * libsupc++/Makefile.am (INCLUDES): Add -I../../gcc for eh-common.h, gansidecl.h. * configure.in: Add in libsupc++/Makefile to AC_OUTPUT. * configure: Regenerate. * Makefile.am (SUBDIRS): Add libsupc++. * Makefile.in: Regenerate. * src/Makefile.am (libstdc___la_LIBADD): Add in libsupc++.la * src/Makefile.in: Regenerate. * libio/Makefile.am: Remove extraneous, confusing bits. * libio/Makefile.in: Regeneate. From-SVN: r36763
Diffstat (limited to 'libstdc++-v3/libsupc++/new_op.cc')
-rw-r--r--libstdc++-v3/libsupc++/new_op.cc56
1 files changed, 56 insertions, 0 deletions
diff --git a/libstdc++-v3/libsupc++/new_op.cc b/libstdc++-v3/libsupc++/new_op.cc
new file mode 100644
index 0000000..92577e2
--- /dev/null
+++ b/libstdc++-v3/libsupc++/new_op.cc
@@ -0,0 +1,56 @@
+// Support routines for the -*- C++ -*- dynamic memory management.
+// Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
+//
+// This file is part of GNU CC.
+//
+// GNU CC is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// GNU CC 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with GNU CC; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include "new"
+using std::new_handler;
+using std::bad_alloc;
+
+extern "C" void *malloc (size_t);
+extern new_handler __new_handler;
+
+void *
+operator new (size_t sz) throw (std::bad_alloc)
+{
+ void *p;
+
+ /* malloc (0) is unpredictable; avoid it. */
+ if (sz == 0)
+ sz = 1;
+ p = (void *) malloc (sz);
+ while (p == 0)
+ {
+ new_handler handler = __new_handler;
+ if (! handler)
+ throw bad_alloc ();
+ handler ();
+ p = (void *) malloc (sz);
+ }
+
+ return p;
+}