1
0
mirror of https://github.com/facebook/zstd.git synced 2025-08-05 19:15:58 +03:00

Support for libc variants without fseeko/ftello

Some older Android libc implementations don't support `fseeko` or `ftello`.
This commit adds a new compile-time macro `LIBC_NO_FSEEKO` as well as a usage in CMake for old Android APIs.
This commit is contained in:
Victor Zhang
2025-01-02 14:02:10 -08:00
parent f5d9d57fe6
commit 54c3d998a0
4 changed files with 25 additions and 3 deletions

View File

@@ -82,8 +82,19 @@ else ()
add_definitions(-DZSTD_LEGACY_SUPPORT=0) add_definitions(-DZSTD_LEGACY_SUPPORT=0)
endif () endif ()
get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
message("${_variableName}=${${_variableName}}")
endforeach()
if (ANDROID) if (ANDROID)
set(ZSTD_MULTITHREAD_SUPPORT_DEFAULT OFF) set(ZSTD_MULTITHREAD_SUPPORT_DEFAULT OFF)
# Old versions of bionic libc don't have fseeko/ftello
if ((NOT ${ANDROID_PLATFORM_LEVEL}) OR ${ANDROID_PLATFORM_LEVEL} VERSION_LESS 24)
message("Hi Android SDK")
add_compile_definitions(LIBC_NO_FSEEKO)
endif ()
else() else()
set(ZSTD_MULTITHREAD_SUPPORT_DEFAULT ON) set(ZSTD_MULTITHREAD_SUPPORT_DEFAULT ON)
endif() endif()
@@ -153,6 +164,7 @@ if (ZSTD_BUILD_PROGRAMS)
elseif(NOT ZSTD_BUILD_SHARED AND ZSTD_PROGRAMS_LINK_SHARED) elseif(NOT ZSTD_BUILD_SHARED AND ZSTD_PROGRAMS_LINK_SHARED)
message(SEND_ERROR "You need to build shared library to build zstd CLI") message(SEND_ERROR "You need to build shared library to build zstd CLI")
endif () endif ()
message("Building program")
add_subdirectory(programs) add_subdirectory(programs)
endif () endif ()

View File

@@ -77,7 +77,10 @@
/* ************************************************************ /* ************************************************************
* Avoid fseek()'s 2GiB barrier with MSVC, macOS, *BSD, MinGW * Avoid fseek()'s 2GiB barrier with MSVC, macOS, *BSD, MinGW
***************************************************************/ ***************************************************************/
#if defined(_MSC_VER) && _MSC_VER >= 1400 #if defined(LIBC_NO_FSEEKO)
/* Some older libc implementations don't include these functions (e.g. Bionic < 24) */
#define LONG_SEEK fseek
#elif defined(_MSC_VER) && _MSC_VER >= 1400
# define LONG_SEEK _fseeki64 # define LONG_SEEK _fseeki64
#elif !defined(__64BIT__) && (PLATFORM_POSIX_VERSION >= 200112L) /* No point defining Large file for 64 bit */ #elif !defined(__64BIT__) && (PLATFORM_POSIX_VERSION >= 200112L) /* No point defining Large file for 64 bit */
# define LONG_SEEK fseeko # define LONG_SEEK fseeko

View File

@@ -79,7 +79,11 @@ extern UTIL_time_t g_displayClock;
/* Avoid fseek()'s 2GiB barrier with MSVC, macOS, *BSD, MinGW */ /* Avoid fseek()'s 2GiB barrier with MSVC, macOS, *BSD, MinGW */
#if defined(_MSC_VER) && _MSC_VER >= 1400 #if defined(LIBC_NO_FSEEKO)
/* Some older libc implementations don't include these functions (e.g. Bionic < 24) */
#define LONG_SEEK fseek
#define LONG_TELL ftell
#elif defined(_MSC_VER) && _MSC_VER >= 1400
# define LONG_SEEK _fseeki64 # define LONG_SEEK _fseeki64
# define LONG_TELL _ftelli64 # define LONG_TELL _ftelli64
#elif !defined(__64BIT__) && (PLATFORM_POSIX_VERSION >= 200112L) /* No point defining Large file for 64 bit */ #elif !defined(__64BIT__) && (PLATFORM_POSIX_VERSION >= 200112L) /* No point defining Large file for 64 bit */

View File

@@ -24,7 +24,10 @@
/*-************************************************************ /*-************************************************************
* Fix fseek()'s 2GiB barrier with MSVC, macOS, *BSD, MinGW * Fix fseek()'s 2GiB barrier with MSVC, macOS, *BSD, MinGW
***************************************************************/ ***************************************************************/
#if defined(_MSC_VER) && (_MSC_VER >= 1400) #if defined(LIBC_NO_FSEEKO)
/* Some older libc implementations don't include these functions (e.g. Bionic < 24) */
#define UTIL_fseek fseek
#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
# define UTIL_fseek _fseeki64 # define UTIL_fseek _fseeki64
#elif !defined(__64BIT__) && (PLATFORM_POSIX_VERSION >= 200112L) /* No point defining Large file for 64 bit */ #elif !defined(__64BIT__) && (PLATFORM_POSIX_VERSION >= 200112L) /* No point defining Large file for 64 bit */
# define UTIL_fseek fseeko # define UTIL_fseek fseeko