Refactor Hyrule Magic compression functions to return std::vector<uint8_t> instead of raw pointers for improved memory management

This commit is contained in:
scawful
2024-12-31 18:32:25 -05:00
parent 308eb4b287
commit a54143cbab
3 changed files with 31 additions and 48 deletions

View File

@@ -14,9 +14,9 @@
namespace yaze {
namespace gfx {
// Hyrule Magic
uint8_t* HyruleMagicCompress(uint8_t const* const src, int const oldsize,
int* const size, int const flag) {
std::vector<uint8_t> HyruleMagicCompress(uint8_t const* const src,
int const oldsize, int* const size,
int const flag) {
unsigned char* b2 =
(unsigned char*)malloc(0x1000); // allocate a 2^12 sized buffer
@@ -158,11 +158,13 @@ uint8_t* HyruleMagicCompress(uint8_t const* const src, int const oldsize,
b2 = (unsigned char*)realloc(b2, bd);
*size = bd;
return b2;
std::vector<uint8_t> compressed_data(b2, b2 + bd);
free(b2);
return compressed_data;
}
uint8_t* HyruleMagicDecompress(uint8_t const* src, int* const size,
int const p_big_endian) {
std::vector<uint8_t> HyruleMagicDecompress(uint8_t const* src, int* const size,
int const p_big_endian) {
unsigned char* b2 = (unsigned char*)malloc(1024);
int bd = 0, bs = 1024;
@@ -291,7 +293,9 @@ uint8_t* HyruleMagicDecompress(uint8_t const* src, int* const size,
if (size) (*size) = bd;
// return the unsigned char* buffer b2, which contains the uncompressed data.
return b2;
std::vector<uint8_t> decompressed_data(b2, b2 + bd);
free(b2);
return decompressed_data;
}
namespace lc_lz2 {

View File

@@ -3,6 +3,7 @@
#include <memory>
#include <string>
#include <vector>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
@@ -13,12 +14,12 @@
namespace yaze {
namespace gfx {
// Hyrule Magic
uint8_t* HyruleMagicCompress(uint8_t const* const src, int const oldsize,
int* const size, int const flag);
std::vector<uint8_t> HyruleMagicCompress(uint8_t const* const src,
int const oldsize, int* const size,
int const flag);
uint8_t* HyruleMagicDecompress(uint8_t const* src, int* const size,
int const p_big_endian);
std::vector<uint8_t> HyruleMagicDecompress(uint8_t const* src, int* const size,
int const p_big_endian);
/**
* @namespace yaze::gfx::lc_lz2