aboutsummaryrefslogtreecommitdiff
path: root/C/7zAlloc.c
blob: 2f0659af6f7bf268f3160edd666fc18f2cdc4388 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/* 7zAlloc.c -- Allocation functions for 7z processing
2023-03-04 : Igor Pavlov : Public domain */

#include "Precomp.h"

#include <stdlib.h>

#include "7zAlloc.h"

/* #define SZ_ALLOC_DEBUG */
/* use SZ_ALLOC_DEBUG to debug alloc/free operations */

#ifdef SZ_ALLOC_DEBUG

/*
#ifdef _WIN32
#include "7zWindows.h"
#endif
*/

#include <stdio.h>
static int g_allocCount = 0;
static int g_allocCountTemp = 0;

static void Print_Alloc(const char *s, size_t size, int *counter)
{
  const unsigned size2 = (unsigned)size;
  fprintf(stderr, "\n%s count = %10d : %10u bytes; ", s, *counter, size2);
  (*counter)++;
}
static void Print_Free(const char *s, int *counter)
{
  (*counter)--;
  fprintf(stderr, "\n%s count = %10d", s, *counter);
}
#endif

void *SzAlloc(ISzAllocPtr p, size_t size)
{
  UNUSED_VAR(p)
  if (size == 0)
    return 0;
  #ifdef SZ_ALLOC_DEBUG
  Print_Alloc("Alloc", size, &g_allocCount);
  #endif
  return malloc(size);
}

void SzFree(ISzAllocPtr p, void *address)
{
  UNUSED_VAR(p)
  #ifdef SZ_ALLOC_DEBUG
  if (address)
    Print_Free("Free ", &g_allocCount);
  #endif
  free(address);
}

void *SzAllocTemp(ISzAllocPtr p, size_t size)
{
  UNUSED_VAR(p)
  if (size == 0)
    return 0;
  #ifdef SZ_ALLOC_DEBUG
  Print_Alloc("Alloc_temp", size, &g_allocCountTemp);
  /*
  #ifdef _WIN32
  return HeapAlloc(GetProcessHeap(), 0, size);
  #endif
  */
  #endif
  return malloc(size);
}

void SzFreeTemp(ISzAllocPtr p, void *address)
{
  UNUSED_VAR(p)
  #ifdef SZ_ALLOC_DEBUG
  if (address)
    Print_Free("Free_temp ", &g_allocCountTemp);
  /*
  #ifdef _WIN32
  HeapFree(GetProcessHeap(), 0, address);
  return;
  #endif
  */
  #endif
  free(address);
}