diff options
author | Takayuki Matsuoka <t-mat@users.noreply.github.com> | 2022-08-07 10:39:50 (GMT) |
---|---|---|
committer | Takayuki Matsuoka <t-mat@users.noreply.github.com> | 2022-08-07 10:39:50 (GMT) |
commit | cdf515c90ff32f681be3ee97e5889f8cdd9ed143 (patch) | |
tree | 8b06f70b56a3496015f7fa1ab455adabc60501f9 /tests | |
parent | 70e76e50b1f011685d95622049e63cf2bd47e5f8 (diff) | |
download | lz4-cdf515c90ff32f681be3ee97e5889f8cdd9ed143.zip lz4-cdf515c90ff32f681be3ee97e5889f8cdd9ed143.tar.gz lz4-cdf515c90ff32f681be3ee97e5889f8cdd9ed143.tar.bz2 |
Fix: Add extern "C" to all standard C replacement functions
Diffstat (limited to 'tests')
-rw-r--r-- | tests/freestanding.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/tests/freestanding.c b/tests/freestanding.c index 00cd695..6bf2e6d 100644 --- a/tests/freestanding.c +++ b/tests/freestanding.c @@ -26,12 +26,19 @@ #include <stddef.h> #include <stdint.h> +#if defined(__cplusplus) +# define EXTERN_C extern "C" +#else +# define EXTERN_C +#endif + + static void MY_exit(int exitCode); static void MY_abort(void); -void *memmove(void *dst, const void *src, size_t n); -void *memcpy(void * __restrict__ dst, const void * __restrict__ src, size_t n); -void *memset(void *s, int c, size_t n); -int memcmp(const void *s1, const void *s2, size_t n); +EXTERN_C void *memmove(void *dst, const void *src, size_t n); +EXTERN_C void *memcpy(void * __restrict__ dst, const void * __restrict__ src, size_t n); +EXTERN_C void *memset(void *s, int c, size_t n); +EXTERN_C int memcmp(const void *s1, const void *s2, size_t n); // LZ4/HC basic freestanding setup #define LZ4_FREESTANDING 1 @@ -42,7 +49,6 @@ int memcmp(const void *s1, const void *s2, size_t n); #include "../lib/lz4.c" #include "../lib/lz4hc.c" - // Test for LZ4 static void test_lz4(const uint8_t* srcData, int srcSize) { // Compress @@ -172,7 +178,7 @@ void __assert_fail(const char * assertion, const char * file, unsigned int line, // GCC requires memcpy, memmove, memset and memcmp. // https://gcc.gnu.org/onlinedocs/gcc/Standards.html // > GCC requires the freestanding environment provide memcpy, memmove, memset and memcmp. -void *memmove(void *dst, const void *src, size_t n) { +EXTERN_C void *memmove(void *dst, const void *src, size_t n) { uint8_t* d = (uint8_t*) dst; const uint8_t* s = (const uint8_t*) src; @@ -190,11 +196,11 @@ void *memmove(void *dst, const void *src, size_t n) { return dst; } -void *memcpy(void * __restrict__ dst, const void * __restrict__ src, size_t n) { +EXTERN_C void *memcpy(void * __restrict__ dst, const void * __restrict__ src, size_t n) { return memmove(dst, src, n); } -void *memset(void *s, int c, size_t n) { +EXTERN_C void *memset(void *s, int c, size_t n) { uint8_t* p = (uint8_t*) s; while (n--) { *p++ = (uint8_t) c; @@ -202,7 +208,7 @@ void *memset(void *s, int c, size_t n) { return s; } -int memcmp(const void *s1, const void *s2, size_t n) { +EXTERN_C int memcmp(const void *s1, const void *s2, size_t n) { const uint8_t* p1 = (const uint8_t*) s1; const uint8_t* p2 = (const uint8_t*) s2; while (n--) { @@ -219,10 +225,7 @@ int memcmp(const void *s1, const void *s2, size_t n) { // -#if defined(__cplusplus) -extern "C" -#endif -void _start(void) { +EXTERN_C void _start(void) { test(); MY_exit(0); } |