libpropeller
Making PropellerGCC Easier
 All Classes Files Functions Variables Enumerations Enumerator Macros Pages
c++allocate.h
Go to the documentation of this file.
1 #ifndef PROPGCC_SRLM_CPLUSPLUS_ALLOC_H_
2 #define PROPGCC_SRLM_CPLUSPLUS_ALLOC_H_
3 
4 #include <cstdlib>
5 #include <new>
6 
7 using std::new_handler;
8 new_handler __new_handler;
9 
10 void *
11 operator new (std::size_t sz)
12 {
13 void *p;
14 
15 /* malloc (0) is unpredictable; avoid it. */
16 if (sz == 0)
17  sz = 1;
18 p = (void *) malloc (sz);
19 while (p == 0)
20  {
21  new_handler handler = __new_handler;
22  if (! handler)
23  std::abort();
24  handler ();
25  p = (void *) std::malloc (sz);
26  }
27 
28 return p;
29 }
30 
31 void*
32 operator new[] (std::size_t sz)
33 {
34 return ::operator new(sz);
35 }
36 
37 void
38 operator delete(void* ptr)
39 {
40 if (ptr)
41  std::free(ptr);
42 }
43 
44 new_handler
45 std::set_new_handler (new_handler handler)
46 {
47 new_handler prev_handler = __new_handler;
48 __new_handler = handler;
49 return prev_handler;
50 }
51 
52 #endif // PROPGCC_SRLM_CPLUSPLUS_ALLOC_H_