mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-29 15:22:08 +00:00
4497d7fdaa
As a bonus, add support for XZ-compressed files in ZIP
89 lines
1.6 KiB
C
89 lines
1.6 KiB
C
/* 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);
|
|
}
|