refactor: file_getfilebuffer → file_readfile (std::vector<char>) — elimina 3 leaks (paleta + música gameplay + música cinemàtica)

This commit is contained in:
2026-04-16 09:43:27 +02:00
parent d343e719ca
commit b3ff620c81
12 changed files with 83 additions and 172 deletions

View File

@@ -45,13 +45,10 @@ JD8_Surface JD8_NewSurface() {
}
JD8_Surface JD8_LoadSurface(const char* file) {
int filesize = 0;
char* buffer = file_getfilebuffer(file, filesize);
auto buffer = file_readfile(file);
unsigned short w, h;
Uint8* pixels = LoadGif((unsigned char*)buffer, &w, &h);
free(buffer);
Uint8* pixels = LoadGif(reinterpret_cast<unsigned char*>(buffer.data()), &w, &h);
if (pixels == NULL) {
printf("Unable to load bitmap: %s\n", SDL_GetError());
@@ -66,13 +63,8 @@ JD8_Surface JD8_LoadSurface(const char* file) {
}
JD8_Palette JD8_LoadPalette(const char* file) {
int filesize = 0;
char* buffer = NULL;
buffer = file_getfilebuffer(file, filesize);
JD8_Palette palette = (JD8_Palette)LoadPalette((unsigned char*)buffer);
return palette;
auto buffer = file_readfile(file);
return (JD8_Palette)LoadPalette(reinterpret_cast<unsigned char*>(buffer.data()));
}
void JD8_SetScreenPalette(JD8_Palette palette) {

View File

@@ -147,12 +147,12 @@ FILE* file_getfilepointer(const char* resourcename, int& filesize, const bool bi
return f;
}
char* file_getfilebuffer(const char* resourcename, int& filesize, const bool zero_terminate) {
std::vector<char> file_readfile(const char* resourcename) {
int filesize = 0;
FILE* f = file_getfilepointer(resourcename, filesize, true);
if (!f) return nullptr;
char* buffer = static_cast<char*>(malloc(zero_terminate ? filesize + 1 : filesize));
fread(buffer, filesize, 1, f);
if (zero_terminate) buffer[filesize] = 0;
if (!f) return {};
std::vector<char> buffer(filesize);
fread(buffer.data(), filesize, 1, f);
fclose(f);
return buffer;
}

View File

@@ -1,6 +1,8 @@
#pragma once
#include <stdio.h>
#include <vector>
#define SOURCE_FILE 0
#define SOURCE_FOLDER 1
@@ -12,7 +14,12 @@ void file_setresourcefolder(const char* str);
void file_setsource(const int src);
FILE* file_getfilepointer(const char* resourcename, int& filesize, const bool binary = false);
char* file_getfilebuffer(const char* resourcename, int& filesize, const bool zero_terminate = false);
// Llig tot el contingut d'un recurs (fitxer solt o entrada del .jrf).
// Retorna un vector buit si el recurs no existeix. El vector es destrueix
// automàticament en eixir d'àmbit — no fa falta cap free() manual. Mida =
// bytes llegits (el buffer no està null-terminated).
std::vector<char> file_readfile(const char* resourcename);
const char* file_getconfigvalue(const char* key);
void file_setconfigvalue(const char* key, const char* value);