From 7f64989e5c913ef7624e084badd1a43ce65b3ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= Date: Wed, 6 Jul 2022 09:18:28 +0900 Subject: [PATCH] do not define our own version of memcpy The (sole) use of memcpy in our public header is now replaced to directly call ruby_nonempty_memcpy, and the previous definition of memcpy is now internal-only. [Bug#18893] --- include/ruby/internal/memory.h | 6 +----- internal.h | 3 +++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/include/ruby/internal/memory.h b/include/ruby/internal/memory.h index aa3464465d..0f59262a91 100644 --- a/include/ruby/internal/memory.h +++ b/include/ruby/internal/memory.h @@ -363,7 +363,7 @@ typedef uint128_t DSIZE_T; * @return `p1`. * @post First `n` elements of `p2` are copied into `p1`. */ -#define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n))) +#define MEMCPY(p1,p2,type,n) ruby_nonempty_memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n))) /** * Handy macro to call memmove. @@ -644,7 +644,6 @@ rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize) return rb_alloc_tmp_buffer_with_count(store, total_size, cnt); } -#if ! defined(__MINGW32__) && ! defined(__DOXYGEN__) RBIMPL_SYMBOL_EXPORT_BEGIN() RBIMPL_ATTR_NOALIAS() RBIMPL_ATTR_NONNULL((1)) @@ -663,8 +662,5 @@ ruby_nonempty_memcpy(void *dest, const void *src, size_t n) } } RBIMPL_SYMBOL_EXPORT_END() -#undef memcpy -#define memcpy ruby_nonempty_memcpy -#endif #endif /* RBIMPL_MEMORY_H */ diff --git a/internal.h b/internal.h index 00a8295295..236d68524c 100644 --- a/internal.h +++ b/internal.h @@ -106,4 +106,7 @@ RUBY_SYMBOL_EXPORT_END #define RBOOL(v) ((v) ? Qtrue : Qfalse) #define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM) +#ifndef __MINGW32__ +#define memcpy ruby_nonempty_memcpy +#endif #endif /* RUBY_INTERNAL_H */