From 65fdc792c3edcfe9d7469f23772698e01fc5c938 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Thu, 13 Jun 2024 14:02:53 +0200 Subject: [PATCH] - [FIX] jfile petava al intentar pillar un arxiu que no existeix --- source/jfile.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/source/jfile.cpp b/source/jfile.cpp index 3279476..18bb53c 100644 --- a/source/jfile.cpp +++ b/source/jfile.cpp @@ -285,9 +285,12 @@ namespace file { // Si estem pillant els recursos de carpeta, simplement obrim el arxiu en questió i tornem el FILE* associat. f = fopen((resource_folder + resourcename).c_str(), binary ? "rb" : "r"); - fseek(f, 0, SEEK_END); - filesize = ftell(f); - fseek(f, 0, SEEK_SET); + if (f) + { + fseek(f, 0, SEEK_END); + filesize = ftell(f); + fseek(f, 0, SEEK_SET); + } } // Tornar el punter FILE* al arxiu. OJO! Tenim que tancar-lo quan acabem amb ell @@ -297,9 +300,15 @@ namespace file // Obté un buffer de memòria en format "char*" del arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos) char *getFileBuffer(const std::string resourcename, int &filesize, const bool zeroTerminated) { + // Per si de cas falla la cosa, fiquem el filesize a 0 + filesize = 0; + // Usem la funció anterior per a obtinde un FILE*, independentment de on pillem els recursos FILE *f = getFilePointer(resourcename, filesize, true); + // Si l'arxiu no existeix, tornem nullptr + if (!f) return nullptr; + // Reservem memòria per al buffer // Si afegim el 0 al final, el tamany del buffer es 1 byte mes gran char *buffer = (char *)malloc(filesize + (zeroTerminated ? 1 : 0));