15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 7zAlloc.c -- Allocation functions
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)2010-10-29 : Igor Pavlov : Public domain */
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "7zAlloc.h"
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* #define _SZ_ALLOC_DEBUG */
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _SZ_ALLOC_DEBUG
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _WIN32
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int g_allocCount = 0;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int g_allocCountTemp = 0;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void *SzAlloc(void *p, size_t size)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  p = p;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (size == 0)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #ifdef _SZ_ALLOC_DEBUG
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_allocCount++;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #endif
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return malloc(size);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SzFree(void *p, void *address)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  p = p;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #ifdef _SZ_ALLOC_DEBUG
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (address != 0)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    g_allocCount--;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stderr, "\nFree; count = %10d", g_allocCount);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #endif
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  free(address);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void *SzAllocTemp(void *p, size_t size)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  p = p;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (size == 0)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #ifdef _SZ_ALLOC_DEBUG
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  fprintf(stderr, "\nAlloc_temp %10d bytes;  count = %10d", size, g_allocCountTemp);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_allocCountTemp++;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #ifdef _WIN32
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return HeapAlloc(GetProcessHeap(), 0, size);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #endif
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #endif
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return malloc(size);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SzFreeTemp(void *p, void *address)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  p = p;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #ifdef _SZ_ALLOC_DEBUG
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (address != 0)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    g_allocCountTemp--;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stderr, "\nFree_temp; count = %10d", g_allocCountTemp);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #ifdef _WIN32
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HeapFree(GetProcessHeap(), 0, address);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #endif
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #endif
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  free(address);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
77