From 194b55a799ffd68ffa27bff0051f74697601e107 Mon Sep 17 00:00:00 2001 From: Tom Finegan Date: Fri, 12 Mar 2021 11:02:04 -0800 Subject: [PATCH] draco: Complete the large file support fix in the stdio reader. Builds on the Windows-only fix added in https://github.com/google/draco/pull/691 --- cmake/draco_build_definitions.cmake | 5 +++++ src/draco/io/stdio_file_reader.cc | 11 ++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/cmake/draco_build_definitions.cmake b/cmake/draco_build_definitions.cmake index 3a232ba..f7354c1 100644 --- a/cmake/draco_build_definitions.cmake +++ b/cmake/draco_build_definitions.cmake @@ -63,6 +63,11 @@ macro(draco_set_build_definitions) if(BUILD_SHARED_LIBS) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) endif() + else() + if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) + # Ensure 64-bit platforms can support large files. + list(APPEND draco_defines "_LARGEFILE_SOURCE" "_FILE_OFFSET_BITS=64") + endif() endif() if(ANDROID) diff --git a/src/draco/io/stdio_file_reader.cc b/src/draco/io/stdio_file_reader.cc index 09ce0fb..a99c96f 100644 --- a/src/draco/io/stdio_file_reader.cc +++ b/src/draco/io/stdio_file_reader.cc @@ -87,13 +87,14 @@ size_t StdioFileReader::GetFileSize() { return false; } - - - #if defined(_WIN64) +#if _FILE_OFFSET_BITS == 64 + const size_t file_size = static_cast(ftello(file_)); +#elif defined _WIN64 const size_t file_size = static_cast(_ftelli64(file_)); - #else +#else const size_t file_size = static_cast(ftell(file_)); - #endif +#endif + rewind(file_); return file_size;