msvc: require VS2005 for large file support

Large file support requires `_fseeki64()`. This function is offered in
VS2005 and upper.

VS2003 has it in the static CRT only, with declaration missing from
headers, so it's not usable.

Ref: https://archive.org/details/X10-38445 (MS Visual Studio .NET 2003)
Ref: 8b76a8aeb2 #15526

Closes #15958
This commit is contained in:
Viktor Szakats 2025-01-09 16:17:08 +01:00
parent 81680a4070
commit 0ad30f0f64
No known key found for this signature in database
GPG Key ID: B5ABD165E2AEF201
2 changed files with 7 additions and 4 deletions

View File

@ -1870,9 +1870,11 @@ include(CMake/OtherTests.cmake)
add_definitions("-DHAVE_CONFIG_H") add_definitions("-DHAVE_CONFIG_H")
# For Windows, all compilers used by CMake should support large files
if(WIN32) if(WIN32)
# _fseeki64() requires VS2005
if(NOT MSVC OR (MSVC_VERSION GREATER_EQUAL 1400))
set(USE_WIN32_LARGE_FILES ON) set(USE_WIN32_LARGE_FILES ON)
endif()
# Use the manifest embedded in the Windows Resource # Use the manifest embedded in the Windows Resource
set(CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -DCURL_EMBED_MANIFEST") set(CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -DCURL_EMBED_MANIFEST")
@ -1898,7 +1900,7 @@ if(MSVC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
endif() endif()
# Use multithreaded compilation on VS 2008+ # Use multithreaded compilation on VS2008+
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND MSVC_VERSION GREATER_EQUAL 1500) if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND MSVC_VERSION GREATER_EQUAL 1500)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
endif() endif()

View File

@ -387,7 +387,8 @@ Vista
/* LARGE FILE SUPPORT */ /* LARGE FILE SUPPORT */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
#if defined(_MSC_VER) || defined(__MINGW32__) /* _fseeki64() requires VS2005 */
#if (defined(_MSC_VER) && (_MSC_VER >= 1400)) || defined(__MINGW32__)
# define USE_WIN32_LARGE_FILES # define USE_WIN32_LARGE_FILES
/* Number of bits in a file offset, on hosts where this is settable. */ /* Number of bits in a file offset, on hosts where this is settable. */
# ifdef __MINGW32__ # ifdef __MINGW32__