1// -*- C++ -*- 2// Utility subroutines for the C++ library testsuite. 3// 4// Copyright (C) 2000-2015 Free Software Foundation, Inc. 5// 6// This file is part of the GNU ISO C++ Library. This library is free 7// software; you can redistribute it and/or modify it under the 8// terms of the GNU General Public License as published by the 9// Free Software Foundation; either version 3, or (at your option) 10// any later version. 11// 12// This library is distributed in the hope that it will be useful, 13// but WITHOUT ANY WARRANTY; without even the implied warranty of 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15// GNU General Public License for more details. 16// 17// You should have received a copy of the GNU General Public License along 18// with this library; see the file COPYING3. If not see 19// <http://www.gnu.org/licenses/>. 20// 21 22#ifndef _GLIBCXX_TESTSUITE_NEW_OPERATORS_H 23#define _GLIBCXX_TESTSUITE_NEW_OPERATORS_H 24 25#include <new> 26 27namespace __gnu_test 28{ 29 std::size_t& 30 get_new_limit() 31 { 32 static std::size_t limit = 1024 * 1024; 33 return limit; 34 } 35 36 void 37 set_new_limit(std::size_t l) 38 { get_new_limit() = l; } 39} 40 41void* operator new(std::size_t size) throw(std::bad_alloc) 42{ 43 if (size > __gnu_test::get_new_limit()) 44 throw std::bad_alloc(); 45 46 void* p = std::malloc(size); 47 if (!p) 48 throw std::bad_alloc(); 49 50 return p; 51} 52 53void* operator new (std::size_t size, const std::nothrow_t&) throw() 54{ 55 if (size > __gnu_test::get_new_limit()) 56 return 0; 57 58 return std::malloc(size); 59} 60 61void operator delete(void* p) throw() 62{ 63 if (p) 64 std::free(p); 65} 66 67#endif // _GLIBCXX_TESTSUITE_NEW_OPERATORS_H 68 69 70