Listing 5 Runtime library patches to track working papers

////////////////////////////////////////////////////////////
// runtime.cpp                Copyright 1994 Gregory Colvin.
//                    Free distribution OK with this notice.
//

#include "runtime.h"

static new_handler cur_new_handler;
new_handler set_new_handler(new_handler cur) throw() {
   new_handler old= cur_new_handler;
   cur_new_handler = cur;
   return old;
}

static void* allocate_loop(size_t n) {
   void* p=0;
   for(;;) {
      p = allocate(n);
       if (p || !cur_new_handler)
         break;
      cur_new_handler( );
   }
   return p;
}

void* operator new(size_t n) throw (bad_alloc) {
   if (n == 0) n++;
   void* p= allocate_loop(n);
   if (!p)
      throw bad_alloc();
   return p;
}
void* operator new[](size_t n) throw(bad_alloc) {
   if (n == 0) n++;
   void* p= allocate_loop(n);
   if (!p)
      throw bad_alloc();
   return p;
}

void operator delete(void* p) throw() {
   deallocate(p);
}
void operator delete[](void* p) throw() {
   deallocate(p);
}

//End of File