diff --git a/ev_vec.h b/ev_vec.h index b3b8a71..0f750c2 100644 --- a/ev_vec.h +++ b/ev_vec.h @@ -643,20 +643,19 @@ ev_vec_pop( if(metadata->length == 0) return EV_VEC_ERR_INVALID_OP; + void *elem = ((char *)*v) + ((metadata->length-1) * metadata->typeData.size); if(out != NULL) { - void *src = ((char *)*v) + ((metadata->length-1) * metadata->typeData.size); if (metadata->typeData.copy_fn) { - metadata->typeData.copy_fn(out, src); + metadata->typeData.copy_fn(out, elem); } else { - memcpy(out, src, metadata->typeData.size); - } - } else { - void *elem = ((char *)*v) + ((metadata->length-1) * metadata->typeData.size); - if (metadata->typeData.free_fn) { - metadata->typeData.free_fn(elem); + memcpy(out, elem, metadata->typeData.size); } } + if (metadata->typeData.free_fn) { + metadata->typeData.free_fn(elem); + } + metadata->length--; return EV_VEC_ERR_NONE;