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