Fixed underflow in ev_vec_pop
This commit is contained in:
@@ -45,7 +45,8 @@ typedef void *ev_svec_t;
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
EV_VEC_ERR_NONE = 0,
|
EV_VEC_ERR_NONE = 0,
|
||||||
EV_VEC_ERR_OOM = 1
|
EV_VEC_ERR_OOM = -1,
|
||||||
|
EV_VEC_ERR_INVALID_OP = -2
|
||||||
} ev_vec_error_t;
|
} ev_vec_error_t;
|
||||||
TYPEDATA_GEN(ev_vec_error_t, DEFAULT(EV_VEC_ERR_NONE));
|
TYPEDATA_GEN(ev_vec_error_t, DEFAULT(EV_VEC_ERR_NONE));
|
||||||
|
|
||||||
@@ -252,7 +253,7 @@ ev_vec_fini(
|
|||||||
* vector
|
* vector
|
||||||
*
|
*
|
||||||
* \returns The index of the element that was just pushed. If the operation
|
* \returns The index of the element that was just pushed. If the operation
|
||||||
* failed, a non-zero (vec_error_t) value is returned.
|
* failed, a less-than-zero (vec_error_t) value is returned.
|
||||||
*/
|
*/
|
||||||
EV_VEC_API int
|
EV_VEC_API int
|
||||||
ev_vec_push_impl(
|
ev_vec_push_impl(
|
||||||
@@ -640,6 +641,8 @@ ev_vec_pop(
|
|||||||
ev_vec_t* v = (ev_vec_t*)vec_p;
|
ev_vec_t* v = (ev_vec_t*)vec_p;
|
||||||
__ev_vec_getmeta(*v)
|
__ev_vec_getmeta(*v)
|
||||||
|
|
||||||
|
if(metadata->length == 0) return EV_VEC_ERR_INVALID_OP;
|
||||||
|
|
||||||
if(out != NULL) {
|
if(out != NULL) {
|
||||||
void *src = ((char *)*v) + ((metadata->length-1) * metadata->typeData.size);
|
void *src = ((char *)*v) + ((metadata->length-1) * metadata->typeData.size);
|
||||||
if (metadata->typeData.copy_fn) {
|
if (metadata->typeData.copy_fn) {
|
||||||
|
|||||||
Reference in New Issue
Block a user