From dedcf4f94fb7c2a7bcc2217ab4bfb063fa021528 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sat, 12 Oct 2024 01:49:49 +0200 Subject: [PATCH] Recast: add >4GB file support for OBJ mesh loader Needed for very large levels. --- src/naveditor/MeshLoaderObj.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/naveditor/MeshLoaderObj.cpp b/src/naveditor/MeshLoaderObj.cpp index 693e8e15..fa3b2a34 100644 --- a/src/naveditor/MeshLoaderObj.cpp +++ b/src/naveditor/MeshLoaderObj.cpp @@ -18,6 +18,14 @@ #include "NavEditor/Include/MeshLoaderObj.h" +#ifdef _WIN32 +#define ftell64 _ftelli64 +#define fseeki64 _fseeki64 +#else +#define ftell64 ftello +#define fseeki64 fseeko +#endif + rcMeshLoaderObj::rcMeshLoaderObj() : m_scale(1.0f), m_verts(0), @@ -139,18 +147,18 @@ bool rcMeshLoaderObj::load(const std::string& filename) FILE* fp = fopen(filename.c_str(), "rb"); if (!fp) return false; - if (fseek(fp, 0, SEEK_END) != 0) + if (fseeki64(fp, 0, SEEK_END) != 0) { fclose(fp); return false; } - long bufSize = ftell(fp); + const ssize_t bufSize = ftell64(fp); if (bufSize < 0) { fclose(fp); return false; } - if (fseek(fp, 0, SEEK_SET) != 0) + if (fseeki64(fp, 0, SEEK_SET) != 0) { fclose(fp); return false; @@ -161,7 +169,7 @@ bool rcMeshLoaderObj::load(const std::string& filename) fclose(fp); return false; } - size_t readLen = fread(buf, bufSize, 1, fp); + const size_t readLen = fread(buf, bufSize, 1, fp); fclose(fp); if (readLen != 1)