1 | /* 7zAlloc.c -- Allocation functions |
2 | 2010-10-29 : Igor Pavlov : Public domain */ |
3 | |
4 | #include "7zAlloc.h" |
5 | |
6 | /* #define _SZ_ALLOC_DEBUG */ |
7 | /* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ |
8 | |
9 | #ifdef _SZ_ALLOC_DEBUG |
10 | |
11 | #ifdef _WIN32 |
12 | #include <windows.h> |
13 | #endif |
14 | |
15 | #include <stdio.h> |
16 | int g_allocCount = 0; |
17 | int g_allocCountTemp = 0; |
18 | |
19 | #endif |
20 | |
21 | void *SzAlloc(void *p, size_t size) |
22 | { |
23 | p = p; |
24 | if (size == 0) |
25 | return 0; |
26 | #ifdef _SZ_ALLOC_DEBUG |
27 | fprintf(stderr, "\nAlloc %10d bytes; count = %10d" , size, g_allocCount); |
28 | g_allocCount++; |
29 | #endif |
30 | return malloc(size); |
31 | } |
32 | |
33 | void SzFree(void *p, void *address) |
34 | { |
35 | p = p; |
36 | #ifdef _SZ_ALLOC_DEBUG |
37 | if (address != 0) |
38 | { |
39 | g_allocCount--; |
40 | fprintf(stderr, "\nFree; count = %10d" , g_allocCount); |
41 | } |
42 | #endif |
43 | free(address); |
44 | } |
45 | |
46 | void *SzAllocTemp(void *p, size_t size) |
47 | { |
48 | p = p; |
49 | if (size == 0) |
50 | return 0; |
51 | #ifdef _SZ_ALLOC_DEBUG |
52 | fprintf(stderr, "\nAlloc_temp %10d bytes; count = %10d" , size, g_allocCountTemp); |
53 | g_allocCountTemp++; |
54 | #ifdef _WIN32 |
55 | return HeapAlloc(GetProcessHeap(), 0, size); |
56 | #endif |
57 | #endif |
58 | return malloc(size); |
59 | } |
60 | |
61 | void SzFreeTemp(void *p, void *address) |
62 | { |
63 | p = p; |
64 | #ifdef _SZ_ALLOC_DEBUG |
65 | if (address != 0) |
66 | { |
67 | g_allocCountTemp--; |
68 | fprintf(stderr, "\nFree_temp; count = %10d" , g_allocCountTemp); |
69 | } |
70 | #ifdef _WIN32 |
71 | HeapFree(GetProcessHeap(), 0, address); |
72 | return; |
73 | #endif |
74 | #endif |
75 | free(address); |
76 | } |
77 | |