fix vclear

This commit is contained in:
Rongsong Shen 2026-02-14 16:41:10 +08:00
parent 277bc31225
commit cbda3378da
2 changed files with 10 additions and 10 deletions

View file

@ -164,7 +164,7 @@ typedef struct {
typedef int (*vstore_fn_t)(meta_obj_t*, void*); typedef int (*vstore_fn_t)(meta_obj_t*, void*);
typedef int (*vget_fn_t)(meta_obj_t*, int, void**); typedef int (*vget_fn_t)(meta_obj_t*, int, void**);
typedef int (*vput_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 { typedef struct {
vstore_fn_t vstore; vstore_fn_t vstore;
@ -237,5 +237,6 @@ extern int key_find(var, void*, void**);
extern int vstore(var, void*); extern int vstore(var, void*);
extern int vget(var, int, void**); extern int vget(var, int, void**);
extern int vput(var, int, void*); extern int vput(var, int, void*);
extern int vclear(var, int);
#endif #endif

View file

@ -65,25 +65,24 @@ int vput(var v, int idx, void* data)
return method(obj, idx, data); return method(obj, idx, data);
} }
void vclear(var v) int vclear(var v, int idx)
{ {
meta_obj_t* obj = NULL; meta_obj_t* obj = NULL;
vclear_fn_t method = NULL; vclear_fn_t method = NULL;
if (idx < 0) {
return -EINVAL;
}
obj = RTTI_DATA_TO_OBJ(v); obj = RTTI_DATA_TO_OBJ(v);
if (RTTI_OBJ_INVALID(obj)) { if (RTTI_OBJ_INVALID(obj)) {
errno = EINVAL; return -EINVAL;
return;
} }
RTTI_GET_METHOD(method, obj, varray, vclear); RTTI_GET_METHOD(method, obj, varray, vclear);
if (method == NULL) { if (method == NULL) {
errno = EINVAL; return -EINVAL;
return;
} }
method(obj); return method(obj, idx);
return;
} }