Do not call memcpy if copying nothing

c.f.
* e7b18ca6d9b45b7e71694557b9fab8152c62c1ed
* 34e1079aef81d108890fb167d7df69960e994ff5
This commit is contained in:
Nobuyoshi Nakada 2019-05-17 10:25:34 +09:00
parent 32e8b42852
commit b1b385465e
No known key found for this signature in database
GPG Key ID: 4BC7D6DF58D8DF60

View File

@ -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 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 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)) #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); void rb_obj_infect(VALUE victim, VALUE carrier);