Merge pull request #87 from fryshorts/fixes
Use memmove instead of memcpy for potentially overlapping memory
This commit is contained in:
commit
6e6cb9f317
@ -299,15 +299,10 @@ static inline void darray_erase(const size_t element_size, struct darray *dst,
|
||||
{
|
||||
assert(idx < dst->num);
|
||||
|
||||
if (idx >= dst->num)
|
||||
if (idx >= dst->num || !--dst->num)
|
||||
return;
|
||||
|
||||
if (!--dst->num) {
|
||||
dst->num = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(darray_item(element_size, dst, idx),
|
||||
memmove(darray_item(element_size, dst, idx),
|
||||
darray_item(element_size, dst, idx+1),
|
||||
element_size*(dst->num-idx));
|
||||
}
|
||||
@ -408,7 +403,7 @@ static inline void darray_move_item(const size_t element_size,
|
||||
memmove(darray_item(element_size, dst, to+1), p_to,
|
||||
element_size*(from-to));
|
||||
else
|
||||
memcpy(p_from, darray_item(element_size, dst, from+1),
|
||||
memmove(p_from, darray_item(element_size, dst, from+1),
|
||||
element_size*(to-from));
|
||||
|
||||
memcpy(p_to, temp, element_size);
|
||||
@ -454,7 +449,7 @@ static inline void darray_swap(const size_t element_size,
|
||||
size_t num; \
|
||||
size_t capacity; \
|
||||
}; \
|
||||
}
|
||||
}
|
||||
|
||||
#define da_init(v) darray_init(&v.da)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user