mirror of
https://github.com/facebook/zstd.git
synced 2025-07-29 11:21:22 +03:00
[api][visibility] Make the visibility macros more consistent
1. Follow the scheme introduced in PR #2501 for both `zdict.h` and `zstd_errors.h`. 2. If the `*_VISIBLE` macro isn't set, but the `*_VISIBILITY` macro is, use that. Also make this change for `zstd.h`, since we probably shouldn't have changed that macro name without backward compatibility in the first place. 3. Change all references to `*_VISIBILITY` to `*_VISIBLE`. Fixes #3359.
This commit is contained in:
committed by
Nick Terrell
parent
58508398f4
commit
358a237484
@ -49,8 +49,8 @@ libzstd:
|
|||||||
-UZSTD_MULTITHREAD \
|
-UZSTD_MULTITHREAD \
|
||||||
-U_MSC_VER \
|
-U_MSC_VER \
|
||||||
-U_WIN32 \
|
-U_WIN32 \
|
||||||
-RZSTDLIB_VISIBILITY= \
|
-RZSTDLIB_VISIBLE= \
|
||||||
-RZSTDERRORLIB_VISIBILITY= \
|
-RZSTDERRORLIB_VISIBLE= \
|
||||||
-RZSTD_FALLTHROUGH=fallthrough \
|
-RZSTD_FALLTHROUGH=fallthrough \
|
||||||
-DZSTD_HAVE_WEAK_SYMBOLS=0 \
|
-DZSTD_HAVE_WEAK_SYMBOLS=0 \
|
||||||
-DZSTD_TRACE=0 \
|
-DZSTD_TRACE=0 \
|
||||||
|
@ -161,6 +161,13 @@ The file structure is designed to make this selection manually achievable for an
|
|||||||
`ZSTD_DCtx` decompression contexts,
|
`ZSTD_DCtx` decompression contexts,
|
||||||
but might also result in a small decompression speed cost.
|
but might also result in a small decompression speed cost.
|
||||||
|
|
||||||
|
- The C compiler macros `ZSTDLIB_VISIBLE`, `ZSTDERRORLIB_VISIBLE` and `ZDICTLIB_VISIBLE`
|
||||||
|
can be overridden to control the visibility of zstd's API. Additionally,
|
||||||
|
`ZSTDLIB_STATIC_API` and `ZDICTLIB_STATIC_API` can be overridden to control the visibility
|
||||||
|
of zstd's static API. Specifically, it can be set to `ZSTDLIB_HIDDEN` to hide the symbols
|
||||||
|
from the shared library. These macros default to `ZSTDLIB_VISIBILITY`,
|
||||||
|
`ZSTDERRORLIB_VSIBILITY`, and `ZDICTLIB_VISIBILITY` if unset, for backwards compatibility
|
||||||
|
with the old macro names.
|
||||||
|
|
||||||
#### Windows : using MinGW+MSYS to create DLL
|
#### Windows : using MinGW+MSYS to create DLL
|
||||||
|
|
||||||
|
@ -1,17 +1,27 @@
|
|||||||
module libzstd [extern_c] {
|
module libzstd [extern_c] {
|
||||||
header "zstd.h"
|
header "zstd.h"
|
||||||
export *
|
export *
|
||||||
config_macros [exhaustive] /* zstd.h */ \
|
config_macros [exhaustive] \
|
||||||
|
/* zstd.h */ \
|
||||||
ZSTD_STATIC_LINKING_ONLY, \
|
ZSTD_STATIC_LINKING_ONLY, \
|
||||||
|
ZSTDLIB_VISIBILITY, \
|
||||||
ZSTDLIB_VISIBLE, \
|
ZSTDLIB_VISIBLE, \
|
||||||
|
ZSTDLIB_HIDDEN, \
|
||||||
ZSTD_DLL_EXPORT, \
|
ZSTD_DLL_EXPORT, \
|
||||||
ZSTDLIB_STATIC_API, \
|
ZSTDLIB_STATIC_API, \
|
||||||
ZSTD_DISABLE_DEPRECATE_WARNINGS, \
|
ZSTD_DISABLE_DEPRECATE_WARNINGS, \
|
||||||
ZSTD_CLEVEL_DEFAULT, \
|
ZSTD_CLEVEL_DEFAULT, \
|
||||||
/* zdict.h */ ZDICT_STATIC_LINKING_ONLY, \
|
/* zdict.h */ \
|
||||||
|
ZDICT_STATIC_LINKING_ONLY, \
|
||||||
|
ZDICTLIB_VISIBLE, \
|
||||||
|
ZDICTLIB_HIDDEN, \
|
||||||
ZDICTLIB_VISIBILITY, \
|
ZDICTLIB_VISIBILITY, \
|
||||||
|
ZDICTLIB_STATIC_API, \
|
||||||
ZDICT_DISABLE_DEPRECATE_WARNINGS, \
|
ZDICT_DISABLE_DEPRECATE_WARNINGS, \
|
||||||
/* zstd_errors.h */ ZSTDERRORLIB_VISIBILITY
|
/* zstd_errors.h */ \
|
||||||
|
ZSTDERRORLIB_VISIBLE, \
|
||||||
|
ZSTDERRORLIB_HIDDEN, \
|
||||||
|
ZSTDERRORLIB_VISIBILITY
|
||||||
|
|
||||||
module dictbuilder [extern_c] {
|
module dictbuilder [extern_c] {
|
||||||
header "zdict.h"
|
header "zdict.h"
|
||||||
|
60
lib/zdict.h
60
lib/zdict.h
@ -21,19 +21,31 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* ===== ZDICTLIB_API : control library symbols visibility ===== */
|
/* ===== ZDICTLIB_API : control library symbols visibility ===== */
|
||||||
#ifndef ZDICTLIB_VISIBILITY
|
#ifndef ZDICTLIB_VISIBLE
|
||||||
# if defined(__GNUC__) && (__GNUC__ >= 4)
|
/* Backwards compatibility with old macro name */
|
||||||
# define ZDICTLIB_VISIBILITY __attribute__ ((visibility ("default")))
|
# ifdef ZDICTLIB_VISIBILITY
|
||||||
|
# define ZDICTLIB_VISIBLE ZDICTLIB_VISIBILITY
|
||||||
|
# elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
|
||||||
|
# define ZDICTLIB_VISIBLE __attribute__ ((visibility ("default")))
|
||||||
# else
|
# else
|
||||||
# define ZDICTLIB_VISIBILITY
|
# define ZDICTLIB_VISIBLE
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ZDICTLIB_HIDDEN
|
||||||
|
# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
|
||||||
|
# define ZDICTLIB_HIDDEN __attribute__ ((visibility ("hidden")))
|
||||||
|
# else
|
||||||
|
# define ZDICTLIB_HIDDEN
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
||||||
# define ZDICTLIB_API __declspec(dllexport) ZDICTLIB_VISIBILITY
|
# define ZDICTLIB_API __declspec(dllexport) ZDICTLIB_VISIBLE
|
||||||
#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
|
#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
|
||||||
# define ZDICTLIB_API __declspec(dllimport) ZDICTLIB_VISIBILITY /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
|
# define ZDICTLIB_API __declspec(dllimport) ZDICTLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
|
||||||
#else
|
#else
|
||||||
# define ZDICTLIB_API ZDICTLIB_VISIBILITY
|
# define ZDICTLIB_API ZDICTLIB_VISIBLE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -264,6 +276,17 @@ ZDICTLIB_API const char* ZDICT_getErrorName(size_t errorCode);
|
|||||||
|
|
||||||
#ifdef ZDICT_STATIC_LINKING_ONLY
|
#ifdef ZDICT_STATIC_LINKING_ONLY
|
||||||
|
|
||||||
|
/* This can be overridden externally to hide static symbols. */
|
||||||
|
#ifndef ZDICTLIB_STATIC_API
|
||||||
|
# if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
||||||
|
# define ZDICTLIB_STATIC_API __declspec(dllexport) ZDICTLIB_VISIBLE
|
||||||
|
# elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
|
||||||
|
# define ZDICTLIB_STATIC_API __declspec(dllimport) ZDICTLIB_VISIBLE
|
||||||
|
# else
|
||||||
|
# define ZDICTLIB_STATIC_API ZDICTLIB_VISIBLE
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ====================================================================================
|
/* ====================================================================================
|
||||||
* The definitions in this section are considered experimental.
|
* The definitions in this section are considered experimental.
|
||||||
* They should never be used with a dynamic library, as they may change in the future.
|
* They should never be used with a dynamic library, as they may change in the future.
|
||||||
@ -318,7 +341,7 @@ typedef struct {
|
|||||||
* In general, it's recommended to provide a few thousands samples, though this can vary a lot.
|
* In general, it's recommended to provide a few thousands samples, though this can vary a lot.
|
||||||
* It's recommended that total size of all samples be about ~x100 times the target size of dictionary.
|
* It's recommended that total size of all samples be about ~x100 times the target size of dictionary.
|
||||||
*/
|
*/
|
||||||
ZDICTLIB_API size_t ZDICT_trainFromBuffer_cover(
|
ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_cover(
|
||||||
void *dictBuffer, size_t dictBufferCapacity,
|
void *dictBuffer, size_t dictBufferCapacity,
|
||||||
const void *samplesBuffer, const size_t *samplesSizes, unsigned nbSamples,
|
const void *samplesBuffer, const size_t *samplesSizes, unsigned nbSamples,
|
||||||
ZDICT_cover_params_t parameters);
|
ZDICT_cover_params_t parameters);
|
||||||
@ -340,7 +363,7 @@ ZDICTLIB_API size_t ZDICT_trainFromBuffer_cover(
|
|||||||
* See ZDICT_trainFromBuffer() for details on failure modes.
|
* See ZDICT_trainFromBuffer() for details on failure modes.
|
||||||
* Note: ZDICT_optimizeTrainFromBuffer_cover() requires about 8 bytes of memory for each input byte and additionally another 5 bytes of memory for each byte of memory for each thread.
|
* Note: ZDICT_optimizeTrainFromBuffer_cover() requires about 8 bytes of memory for each input byte and additionally another 5 bytes of memory for each byte of memory for each thread.
|
||||||
*/
|
*/
|
||||||
ZDICTLIB_API size_t ZDICT_optimizeTrainFromBuffer_cover(
|
ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_cover(
|
||||||
void* dictBuffer, size_t dictBufferCapacity,
|
void* dictBuffer, size_t dictBufferCapacity,
|
||||||
const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples,
|
const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples,
|
||||||
ZDICT_cover_params_t* parameters);
|
ZDICT_cover_params_t* parameters);
|
||||||
@ -361,7 +384,7 @@ ZDICTLIB_API size_t ZDICT_optimizeTrainFromBuffer_cover(
|
|||||||
* In general, it's recommended to provide a few thousands samples, though this can vary a lot.
|
* In general, it's recommended to provide a few thousands samples, though this can vary a lot.
|
||||||
* It's recommended that total size of all samples be about ~x100 times the target size of dictionary.
|
* It's recommended that total size of all samples be about ~x100 times the target size of dictionary.
|
||||||
*/
|
*/
|
||||||
ZDICTLIB_API size_t ZDICT_trainFromBuffer_fastCover(void *dictBuffer,
|
ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_fastCover(void *dictBuffer,
|
||||||
size_t dictBufferCapacity, const void *samplesBuffer,
|
size_t dictBufferCapacity, const void *samplesBuffer,
|
||||||
const size_t *samplesSizes, unsigned nbSamples,
|
const size_t *samplesSizes, unsigned nbSamples,
|
||||||
ZDICT_fastCover_params_t parameters);
|
ZDICT_fastCover_params_t parameters);
|
||||||
@ -384,7 +407,7 @@ ZDICTLIB_API size_t ZDICT_trainFromBuffer_fastCover(void *dictBuffer,
|
|||||||
* See ZDICT_trainFromBuffer() for details on failure modes.
|
* See ZDICT_trainFromBuffer() for details on failure modes.
|
||||||
* Note: ZDICT_optimizeTrainFromBuffer_fastCover() requires about 6 * 2^f bytes of memory for each thread.
|
* Note: ZDICT_optimizeTrainFromBuffer_fastCover() requires about 6 * 2^f bytes of memory for each thread.
|
||||||
*/
|
*/
|
||||||
ZDICTLIB_API size_t ZDICT_optimizeTrainFromBuffer_fastCover(void* dictBuffer,
|
ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_fastCover(void* dictBuffer,
|
||||||
size_t dictBufferCapacity, const void* samplesBuffer,
|
size_t dictBufferCapacity, const void* samplesBuffer,
|
||||||
const size_t* samplesSizes, unsigned nbSamples,
|
const size_t* samplesSizes, unsigned nbSamples,
|
||||||
ZDICT_fastCover_params_t* parameters);
|
ZDICT_fastCover_params_t* parameters);
|
||||||
@ -409,7 +432,7 @@ typedef struct {
|
|||||||
* It's recommended that total size of all samples be about ~x100 times the target size of dictionary.
|
* It's recommended that total size of all samples be about ~x100 times the target size of dictionary.
|
||||||
* Note: ZDICT_trainFromBuffer_legacy() will send notifications into stderr if instructed to, using notificationLevel>0.
|
* Note: ZDICT_trainFromBuffer_legacy() will send notifications into stderr if instructed to, using notificationLevel>0.
|
||||||
*/
|
*/
|
||||||
ZDICTLIB_API size_t ZDICT_trainFromBuffer_legacy(
|
ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_legacy(
|
||||||
void* dictBuffer, size_t dictBufferCapacity,
|
void* dictBuffer, size_t dictBufferCapacity,
|
||||||
const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples,
|
const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples,
|
||||||
ZDICT_legacy_params_t parameters);
|
ZDICT_legacy_params_t parameters);
|
||||||
@ -421,23 +444,24 @@ ZDICTLIB_API size_t ZDICT_trainFromBuffer_legacy(
|
|||||||
or _CRT_SECURE_NO_WARNINGS in Visual.
|
or _CRT_SECURE_NO_WARNINGS in Visual.
|
||||||
Otherwise, it's also possible to manually define ZDICT_DISABLE_DEPRECATE_WARNINGS */
|
Otherwise, it's also possible to manually define ZDICT_DISABLE_DEPRECATE_WARNINGS */
|
||||||
#ifdef ZDICT_DISABLE_DEPRECATE_WARNINGS
|
#ifdef ZDICT_DISABLE_DEPRECATE_WARNINGS
|
||||||
# define ZDICT_DEPRECATED(message) ZDICTLIB_API /* disable deprecation warnings */
|
# define ZDICT_DEPRECATED(message) /* disable deprecation warnings */
|
||||||
#else
|
#else
|
||||||
# define ZDICT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
|
# define ZDICT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
|
||||||
# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */
|
# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */
|
||||||
# define ZDICT_DEPRECATED(message) [[deprecated(message)]] ZDICTLIB_API
|
# define ZDICT_DEPRECATED(message) [[deprecated(message)]]
|
||||||
# elif defined(__clang__) || (ZDICT_GCC_VERSION >= 405)
|
# elif defined(__clang__) || (ZDICT_GCC_VERSION >= 405)
|
||||||
# define ZDICT_DEPRECATED(message) ZDICTLIB_API __attribute__((deprecated(message)))
|
# define ZDICT_DEPRECATED(message) __attribute__((deprecated(message)))
|
||||||
# elif (ZDICT_GCC_VERSION >= 301)
|
# elif (ZDICT_GCC_VERSION >= 301)
|
||||||
# define ZDICT_DEPRECATED(message) ZDICTLIB_API __attribute__((deprecated))
|
# define ZDICT_DEPRECATED(message) __attribute__((deprecated))
|
||||||
# elif defined(_MSC_VER)
|
# elif defined(_MSC_VER)
|
||||||
# define ZDICT_DEPRECATED(message) ZDICTLIB_API __declspec(deprecated(message))
|
# define ZDICT_DEPRECATED(message) __declspec(deprecated(message))
|
||||||
# else
|
# else
|
||||||
# pragma message("WARNING: You need to implement ZDICT_DEPRECATED for this compiler")
|
# pragma message("WARNING: You need to implement ZDICT_DEPRECATED for this compiler")
|
||||||
# define ZDICT_DEPRECATED(message) ZDICTLIB_API
|
# define ZDICT_DEPRECATED(message)
|
||||||
# endif
|
# endif
|
||||||
#endif /* ZDICT_DISABLE_DEPRECATE_WARNINGS */
|
#endif /* ZDICT_DISABLE_DEPRECATE_WARNINGS */
|
||||||
|
|
||||||
|
ZDICTLIB_STATIC_API
|
||||||
ZDICT_DEPRECATED("use ZDICT_finalizeDictionary() instead")
|
ZDICT_DEPRECATED("use ZDICT_finalizeDictionary() instead")
|
||||||
size_t ZDICT_addEntropyTablesFromBuffer(void* dictBuffer, size_t dictContentSize, size_t dictBufferCapacity,
|
size_t ZDICT_addEntropyTablesFromBuffer(void* dictBuffer, size_t dictContentSize, size_t dictBufferCapacity,
|
||||||
const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples);
|
const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples);
|
||||||
|
14
lib/zstd.h
14
lib/zstd.h
@ -21,14 +21,24 @@ extern "C" {
|
|||||||
|
|
||||||
/* ===== ZSTDLIB_API : control library symbols visibility ===== */
|
/* ===== ZSTDLIB_API : control library symbols visibility ===== */
|
||||||
#ifndef ZSTDLIB_VISIBLE
|
#ifndef ZSTDLIB_VISIBLE
|
||||||
# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
|
/* Backwards compatibility with old macro name */
|
||||||
|
# ifdef ZSTDLIB_VISIBILITY
|
||||||
|
# define ZSTDLIB_VISIBLE ZSTDLIB_VISIBILITY
|
||||||
|
# elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
|
||||||
# define ZSTDLIB_VISIBLE __attribute__ ((visibility ("default")))
|
# define ZSTDLIB_VISIBLE __attribute__ ((visibility ("default")))
|
||||||
# define ZSTDLIB_HIDDEN __attribute__ ((visibility ("hidden")))
|
|
||||||
# else
|
# else
|
||||||
# define ZSTDLIB_VISIBLE
|
# define ZSTDLIB_VISIBLE
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ZSTDLIB_HIDDEN
|
||||||
|
# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
|
||||||
|
# define ZSTDLIB_HIDDEN __attribute__ ((visibility ("hidden")))
|
||||||
|
# else
|
||||||
# define ZSTDLIB_HIDDEN
|
# define ZSTDLIB_HIDDEN
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
||||||
# define ZSTDLIB_API __declspec(dllexport) ZSTDLIB_VISIBLE
|
# define ZSTDLIB_API __declspec(dllexport) ZSTDLIB_VISIBLE
|
||||||
#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
|
#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
|
||||||
|
@ -20,19 +20,31 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */
|
/* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */
|
||||||
#ifndef ZSTDERRORLIB_VISIBILITY
|
#ifndef ZSTDERRORLIB_VISIBLE
|
||||||
# if defined(__GNUC__) && (__GNUC__ >= 4)
|
/* Backwards compatibility with old macro name */
|
||||||
# define ZSTDERRORLIB_VISIBILITY __attribute__ ((visibility ("default")))
|
# ifdef ZSTDERRORLIB_VISIBILITY
|
||||||
|
# define ZSTDERRORLIB_VISIBLE ZSTDERRORLIB_VISIBILITY
|
||||||
|
# elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
|
||||||
|
# define ZSTDERRORLIB_VISIBLE __attribute__ ((visibility ("default")))
|
||||||
# else
|
# else
|
||||||
# define ZSTDERRORLIB_VISIBILITY
|
# define ZSTDERRORLIB_VISIBLE
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ZSTDERRORLIB_HIDDEN
|
||||||
|
# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
|
||||||
|
# define ZSTDERRORLIB_HIDDEN __attribute__ ((visibility ("hidden")))
|
||||||
|
# else
|
||||||
|
# define ZSTDERRORLIB_HIDDEN
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
||||||
# define ZSTDERRORLIB_API __declspec(dllexport) ZSTDERRORLIB_VISIBILITY
|
# define ZSTDERRORLIB_API __declspec(dllexport) ZSTDERRORLIB_VISIBLE
|
||||||
#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
|
#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
|
||||||
# define ZSTDERRORLIB_API __declspec(dllimport) ZSTDERRORLIB_VISIBILITY /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
|
# define ZSTDERRORLIB_API __declspec(dllimport) ZSTDERRORLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
|
||||||
#else
|
#else
|
||||||
# define ZSTDERRORLIB_API ZSTDERRORLIB_VISIBILITY
|
# define ZSTDERRORLIB_API ZSTDERRORLIB_VISIBLE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-*********************************************
|
/*-*********************************************
|
||||||
|
Reference in New Issue
Block a user