Annotation of elwix/tools/oldlzma/SRC/Common/NewHandler.cpp, revision 1.1

1.1     ! misho       1: // NewHandler.cpp
        !             2:  
        !             3: #include "StdAfx.h"
        !             4: 
        !             5: #include "NewHandler.h"
        !             6: 
        !             7: // #define DEBUG_MEMORY_LEAK
        !             8: 
        !             9: #ifndef DEBUG_MEMORY_LEAK
        !            10: 
        !            11: #include <stdlib.h>
        !            12: 
        !            13: void * __cdecl operator new(size_t size)
        !            14: {
        !            15:   // void *p = ::HeapAlloc(::GetProcessHeap(), 0, size);
        !            16:   void *p = ::malloc(size);
        !            17:   if (p == 0)
        !            18:     throw CNewException();
        !            19:   return p;
        !            20: }
        !            21: 
        !            22: void __cdecl operator delete(void *p)
        !            23: {
        !            24:   /*
        !            25:   if (p == 0)
        !            26:     return;
        !            27:   ::HeapFree(::GetProcessHeap(), 0, p);
        !            28:   */
        !            29:   ::free(p);
        !            30: }
        !            31: 
        !            32: #else
        !            33: 
        !            34: #pragma init_seg(lib)
        !            35: const int kDebugSize = 1000000;
        !            36: static void *a[kDebugSize];
        !            37: static int index = 0;
        !            38: 
        !            39: static int numAllocs = 0;
        !            40: void * __cdecl operator new(size_t size)
        !            41: {
        !            42:   numAllocs++;
        !            43:   void *p = HeapAlloc(GetProcessHeap(), 0, size);
        !            44:   if (index == 40)
        !            45:   {
        !            46:     int t = 1;
        !            47:   }
        !            48:   if (index < kDebugSize)
        !            49:   {
        !            50:     a[index] = p;
        !            51:     index++;
        !            52:   }
        !            53:   if (p == 0)
        !            54:     throw CNewException();
        !            55:   printf("Alloc %6d, size = %8d\n", numAllocs, size);
        !            56:   return p;
        !            57: }
        !            58: 
        !            59: class CC
        !            60: {
        !            61: public:
        !            62:   CC()
        !            63:   {
        !            64:     for (int i = 0; i < kDebugSize; i++)
        !            65:       a[i] = 0;
        !            66:   }
        !            67:   ~CC()
        !            68:   {
        !            69:     for (int i = 0; i < kDebugSize; i++)
        !            70:       if (a[i] != 0)
        !            71:         return;
        !            72:   }
        !            73: } g_CC;
        !            74: 
        !            75: 
        !            76: void __cdecl operator delete(void *p)
        !            77: {
        !            78:   if (p == 0)
        !            79:     return;
        !            80:   /*
        !            81:   for (int i = 0; i < index; i++)
        !            82:     if (a[i] == p)
        !            83:       a[i] = 0;
        !            84:   */
        !            85:   HeapFree(GetProcessHeap(), 0, p);
        !            86:   numAllocs--;
        !            87:   printf("Free %d\n", numAllocs);
        !            88: }
        !            89: 
        !            90: #endif
        !            91: 
        !            92: /*
        !            93: int MemErrorVC(size_t)
        !            94: {
        !            95:   throw CNewException();
        !            96:   // return 1;
        !            97: }
        !            98: CNewHandlerSetter::CNewHandlerSetter()
        !            99: {
        !           100:   // MemErrorOldVCFunction = _set_new_handler(MemErrorVC);
        !           101: }
        !           102: CNewHandlerSetter::~CNewHandlerSetter()
        !           103: {
        !           104:   // _set_new_handler(MemErrorOldVCFunction);
        !           105: }
        !           106: */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>