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