1*f6dc9357SAndroid Build Coastguard Worker /* 7zAlloc.c -- Allocation functions for 7z processing
2*f6dc9357SAndroid Build Coastguard Worker 2023-03-04 : Igor Pavlov : Public domain */
3*f6dc9357SAndroid Build Coastguard Worker
4*f6dc9357SAndroid Build Coastguard Worker #include "Precomp.h"
5*f6dc9357SAndroid Build Coastguard Worker
6*f6dc9357SAndroid Build Coastguard Worker #include <stdlib.h>
7*f6dc9357SAndroid Build Coastguard Worker
8*f6dc9357SAndroid Build Coastguard Worker #include "7zAlloc.h"
9*f6dc9357SAndroid Build Coastguard Worker
10*f6dc9357SAndroid Build Coastguard Worker /* #define SZ_ALLOC_DEBUG */
11*f6dc9357SAndroid Build Coastguard Worker /* use SZ_ALLOC_DEBUG to debug alloc/free operations */
12*f6dc9357SAndroid Build Coastguard Worker
13*f6dc9357SAndroid Build Coastguard Worker #ifdef SZ_ALLOC_DEBUG
14*f6dc9357SAndroid Build Coastguard Worker
15*f6dc9357SAndroid Build Coastguard Worker /*
16*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
17*f6dc9357SAndroid Build Coastguard Worker #include "7zWindows.h"
18*f6dc9357SAndroid Build Coastguard Worker #endif
19*f6dc9357SAndroid Build Coastguard Worker */
20*f6dc9357SAndroid Build Coastguard Worker
21*f6dc9357SAndroid Build Coastguard Worker #include <stdio.h>
22*f6dc9357SAndroid Build Coastguard Worker static int g_allocCount = 0;
23*f6dc9357SAndroid Build Coastguard Worker static int g_allocCountTemp = 0;
24*f6dc9357SAndroid Build Coastguard Worker
Print_Alloc(const char * s,size_t size,int * counter)25*f6dc9357SAndroid Build Coastguard Worker static void Print_Alloc(const char *s, size_t size, int *counter)
26*f6dc9357SAndroid Build Coastguard Worker {
27*f6dc9357SAndroid Build Coastguard Worker const unsigned size2 = (unsigned)size;
28*f6dc9357SAndroid Build Coastguard Worker fprintf(stderr, "\n%s count = %10d : %10u bytes; ", s, *counter, size2);
29*f6dc9357SAndroid Build Coastguard Worker (*counter)++;
30*f6dc9357SAndroid Build Coastguard Worker }
Print_Free(const char * s,int * counter)31*f6dc9357SAndroid Build Coastguard Worker static void Print_Free(const char *s, int *counter)
32*f6dc9357SAndroid Build Coastguard Worker {
33*f6dc9357SAndroid Build Coastguard Worker (*counter)--;
34*f6dc9357SAndroid Build Coastguard Worker fprintf(stderr, "\n%s count = %10d", s, *counter);
35*f6dc9357SAndroid Build Coastguard Worker }
36*f6dc9357SAndroid Build Coastguard Worker #endif
37*f6dc9357SAndroid Build Coastguard Worker
SzAlloc(ISzAllocPtr p,size_t size)38*f6dc9357SAndroid Build Coastguard Worker void *SzAlloc(ISzAllocPtr p, size_t size)
39*f6dc9357SAndroid Build Coastguard Worker {
40*f6dc9357SAndroid Build Coastguard Worker UNUSED_VAR(p)
41*f6dc9357SAndroid Build Coastguard Worker if (size == 0)
42*f6dc9357SAndroid Build Coastguard Worker return 0;
43*f6dc9357SAndroid Build Coastguard Worker #ifdef SZ_ALLOC_DEBUG
44*f6dc9357SAndroid Build Coastguard Worker Print_Alloc("Alloc", size, &g_allocCount);
45*f6dc9357SAndroid Build Coastguard Worker #endif
46*f6dc9357SAndroid Build Coastguard Worker return malloc(size);
47*f6dc9357SAndroid Build Coastguard Worker }
48*f6dc9357SAndroid Build Coastguard Worker
SzFree(ISzAllocPtr p,void * address)49*f6dc9357SAndroid Build Coastguard Worker void SzFree(ISzAllocPtr p, void *address)
50*f6dc9357SAndroid Build Coastguard Worker {
51*f6dc9357SAndroid Build Coastguard Worker UNUSED_VAR(p)
52*f6dc9357SAndroid Build Coastguard Worker #ifdef SZ_ALLOC_DEBUG
53*f6dc9357SAndroid Build Coastguard Worker if (address)
54*f6dc9357SAndroid Build Coastguard Worker Print_Free("Free ", &g_allocCount);
55*f6dc9357SAndroid Build Coastguard Worker #endif
56*f6dc9357SAndroid Build Coastguard Worker free(address);
57*f6dc9357SAndroid Build Coastguard Worker }
58*f6dc9357SAndroid Build Coastguard Worker
SzAllocTemp(ISzAllocPtr p,size_t size)59*f6dc9357SAndroid Build Coastguard Worker void *SzAllocTemp(ISzAllocPtr p, size_t size)
60*f6dc9357SAndroid Build Coastguard Worker {
61*f6dc9357SAndroid Build Coastguard Worker UNUSED_VAR(p)
62*f6dc9357SAndroid Build Coastguard Worker if (size == 0)
63*f6dc9357SAndroid Build Coastguard Worker return 0;
64*f6dc9357SAndroid Build Coastguard Worker #ifdef SZ_ALLOC_DEBUG
65*f6dc9357SAndroid Build Coastguard Worker Print_Alloc("Alloc_temp", size, &g_allocCountTemp);
66*f6dc9357SAndroid Build Coastguard Worker /*
67*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
68*f6dc9357SAndroid Build Coastguard Worker return HeapAlloc(GetProcessHeap(), 0, size);
69*f6dc9357SAndroid Build Coastguard Worker #endif
70*f6dc9357SAndroid Build Coastguard Worker */
71*f6dc9357SAndroid Build Coastguard Worker #endif
72*f6dc9357SAndroid Build Coastguard Worker return malloc(size);
73*f6dc9357SAndroid Build Coastguard Worker }
74*f6dc9357SAndroid Build Coastguard Worker
SzFreeTemp(ISzAllocPtr p,void * address)75*f6dc9357SAndroid Build Coastguard Worker void SzFreeTemp(ISzAllocPtr p, void *address)
76*f6dc9357SAndroid Build Coastguard Worker {
77*f6dc9357SAndroid Build Coastguard Worker UNUSED_VAR(p)
78*f6dc9357SAndroid Build Coastguard Worker #ifdef SZ_ALLOC_DEBUG
79*f6dc9357SAndroid Build Coastguard Worker if (address)
80*f6dc9357SAndroid Build Coastguard Worker Print_Free("Free_temp ", &g_allocCountTemp);
81*f6dc9357SAndroid Build Coastguard Worker /*
82*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
83*f6dc9357SAndroid Build Coastguard Worker HeapFree(GetProcessHeap(), 0, address);
84*f6dc9357SAndroid Build Coastguard Worker return;
85*f6dc9357SAndroid Build Coastguard Worker #endif
86*f6dc9357SAndroid Build Coastguard Worker */
87*f6dc9357SAndroid Build Coastguard Worker #endif
88*f6dc9357SAndroid Build Coastguard Worker free(address);
89*f6dc9357SAndroid Build Coastguard Worker }
90