xref: /aosp_15_r20/external/lzma/C/7zAlloc.c (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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