From 379be68f69322d1bf9f3a14df353b4a7cf70ae51 Mon Sep 17 00:00:00 2001 From: Andy Vandijck Date: Sun, 13 Jul 2025 10:11:02 +0200 Subject: [PATCH] Tar recognition Tar recognition --- src/core/base/file_util.h | 3 ++- src/core/base/file_util_common.cpp | 9 +++++++++ src/core/base/file_util_desktop.cpp | 1 + src/core/fex/fex/Tar_Extractor.cpp | 8 ++++++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/core/base/file_util.h b/src/core/base/file_util.h index ba32aca8..a0d71989 100644 --- a/src/core/base/file_util.h +++ b/src/core/base/file_util.h @@ -26,6 +26,7 @@ uint8_t *utilLoad(const char *, bool (*)(const char *), uint8_t *, int &); IMAGE_TYPE utilFindType(const char *); bool utilIsGBAImage(const char *); bool utilIsGBImage(const char *); +bool utilIsTARAchive(const char *); #if defined(__LIBRETRO__) @@ -58,4 +59,4 @@ void utilWriteInt(gzFile, int); #endif // defined(__LIBRETRO__) -#endif // VBAM_CORE_BASE_FILE_UTIL_H_ \ No newline at end of file +#endif // VBAM_CORE_BASE_FILE_UTIL_H_ diff --git a/src/core/base/file_util_common.cpp b/src/core/base/file_util_common.cpp index eade5ad8..1cacd553 100644 --- a/src/core/base/file_util_common.cpp +++ b/src/core/base/file_util_common.cpp @@ -39,6 +39,15 @@ FILE* utilOpenFile(const char* filename, const char* mode) { #endif // _WIN32 } +bool utilIsTARAchive(const char* file) { + const char* p = strrchr(file, '.'); + + if ((strcasecmp(p, ".tar") == 0)) + return true; + + return false; +} + bool utilIsGBAImage(const char* file) { coreOptions.cpuIsMultiBoot = false; if (strlen(file) > 4) { diff --git a/src/core/base/file_util_desktop.cpp b/src/core/base/file_util_desktop.cpp index 9229e2cb..037a7911 100644 --- a/src/core/base/file_util_desktop.cpp +++ b/src/core/base/file_util_desktop.cpp @@ -141,6 +141,7 @@ uint8_t* utilLoad(const char* file, bool (*accept)(const char*), uint8_t* data, int read = fileSize <= size ? fileSize : size; // do not read beyond file err = fex_read(fe, image, read); fex_close(fe); + if (err) { systemMessage(MSG_ERROR_READING_IMAGE, N_("Error reading image from %s: %s"), buffer, err); if (data == nullptr) diff --git a/src/core/fex/fex/Tar_Extractor.cpp b/src/core/fex/fex/Tar_Extractor.cpp index 8fd0b98f..6337c510 100644 --- a/src/core/fex/fex/Tar_Extractor.cpp +++ b/src/core/fex/fex/Tar_Extractor.cpp @@ -65,7 +65,11 @@ blargg_err_t Tar_Extractor::open_v() { arc().read(&header, BLOCKSIZE); set_name( header.name ); +#if __STDC_WANT_SECURE_LIB__ + sscanf_s(header.size, "%o", &tarsize); +#else sscanf(header.size, "%o", &tarsize); +#endif return blargg_ok; } @@ -78,7 +82,11 @@ blargg_err_t Tar_Extractor::next_v() { arc().read(&header, BLOCKSIZE); set_name( header.name ); +#if __STDC_WANT_SECURE_LIB__ + sscanf_s(header.size, "%o", &tarsize); +#else sscanf(header.size, "%o", &tarsize); +#endif return blargg_ok; }