diff --git a/include/rtti/typeinfo.h b/include/rtti/typeinfo.h index 91fd2b3..06b1b1f 100644 --- a/include/rtti/typeinfo.h +++ b/include/rtti/typeinfo.h @@ -164,7 +164,7 @@ typedef struct { typedef int (*vstore_fn_t)(meta_obj_t*, void*); typedef int (*vget_fn_t)(meta_obj_t*, int, void**); typedef int (*vput_fn_t)(meta_obj_t*, int, void*); -typedef void (*vclear_fn_t)(meta_obj_t*); +typedef int (*vclear_fn_t)(meta_obj_t*, int); typedef struct { vstore_fn_t vstore; @@ -237,5 +237,6 @@ extern int key_find(var, void*, void**); extern int vstore(var, void*); extern int vget(var, int, void**); extern int vput(var, int, void*); +extern int vclear(var, int); #endif diff --git a/src/varray.c b/src/varray.c index 9feb876..d2bdc28 100644 --- a/src/varray.c +++ b/src/varray.c @@ -65,25 +65,24 @@ int vput(var v, int idx, void* data) return method(obj, idx, data); } -void vclear(var v) +int vclear(var v, int idx) { meta_obj_t* obj = NULL; vclear_fn_t method = NULL; + if (idx < 0) { + return -EINVAL; + } + obj = RTTI_DATA_TO_OBJ(v); if (RTTI_OBJ_INVALID(obj)) { - errno = EINVAL; - return; + return -EINVAL; } RTTI_GET_METHOD(method, obj, varray, vclear); if (method == NULL) { - errno = EINVAL; - - return; + return -EINVAL; } - method(obj); - - return; + return method(obj, idx); }