summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-05-17 10:25:34 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-05-17 13:16:39 +0900
commitb1b385465e4fc1cab84b2a3fa112a33a3e5ab076 (patch)
tree125f2248d0b4b2ca17b3bf6c7a5bc95beb652ce0 /include
parent32e8b42852fc59a7064ec9ad642774c562b69c21 (diff)
Do not call memcpy if copying nothing
c.f. * e7b18ca6d9b45b7e71694557b9fab8152c62c1ed * 34e1079aef81d108890fb167d7df69960e994ff5
Diffstat (limited to 'include')
-rw-r--r--include/ruby/ruby.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h
index c73fd63941..0c6d7e3e63 100644
--- a/include/ruby/ruby.h
+++ b/include/ruby/ruby.h
@@ -1749,6 +1749,15 @@ rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
#define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), sizeof(type)*(size_t)(n))
#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), sizeof(type)*(size_t)(n))
#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), sizeof(type)*(size_t)(n))
+#ifdef __GLIBC__
+static inline void *
+ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
+{
+ /* if nothing to be copied, src may be NULL */
+ return (n ? memcpy(dest, src, n) : dest);
+}
+#define memcpy(p1,p2,n) ruby_nonempty_memcpy(p1, p2, n)
+#endif
void rb_obj_infect(VALUE victim, VALUE carrier);