Skip to content

Commit

Permalink
Fix returned H5Fget_obj_ids count
Browse files Browse the repository at this point in the history
  • Loading branch information
mattjala committed Sep 12, 2023
1 parent 1dad84f commit 94d8342
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 16 deletions.
37 changes: 23 additions & 14 deletions src/rest_vol_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@

herr_t RV_iterate_copy_hid_cb(hid_t obj_id, void *udata);

struct object_id_list {
struct get_obj_ids_udata_t {
hid_t *obj_id_list;
size_t obj_count;
} typedef object_id_list;
size_t max_obj_count;
} typedef get_obj_ids_udata_t;

/*-------------------------------------------------------------------------
* Function: RV_file_create
Expand Down Expand Up @@ -552,42 +553,48 @@ RV_file_get(void *obj, H5VL_file_get_args_t *args, hid_t dxpl_id, void **req)
/* H5Fget_obj_ids */
case H5VL_FILE_GET_OBJ_IDS:

if (args->args.get_obj_ids.max_objs <= 0)
FUNC_GOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "invalid max object parameter");

if (args->args.get_obj_ids.oid_list == NULL)
FUNC_GOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "given object id list buffer is NULL");

if (args->args.get_obj_ids.count == NULL)
FUNC_GOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "given object id count buffer is NULL");

if (args->args.get_obj_ids.max_objs < 0)
FUNC_GOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "invalid max object parameter");

if (args->args.get_obj_ids.max_objs == 0)
FUNC_GOTO_DONE(SUCCEED);

*args->args.get_obj_ids.count = 0;
unsigned int requested_types = args->args.get_obj_ids.types;

object_id_list id_list;
get_obj_ids_udata_t id_list;
id_list.obj_id_list = args->args.get_obj_ids.oid_list;
id_list.obj_count = 0;
id_list.max_obj_count = args->args.get_obj_ids.max_objs;

if (args->args.get_obj_ids.types & H5F_OBJ_FILE)
if (requested_types & H5F_OBJ_FILE)
if (H5Iiterate(H5I_FILE, RV_iterate_copy_hid_cb, &id_list) < 0)
FUNC_GOTO_ERROR(H5E_FILE, H5E_OBJECTITERERROR, FAIL, "can't iterate over file ids");

if (args->args.get_obj_ids.types & H5F_OBJ_GROUP)
if (requested_types & H5F_OBJ_GROUP)
if (H5Iiterate(H5I_GROUP, RV_iterate_copy_hid_cb, &id_list) < 0)
FUNC_GOTO_ERROR(H5E_FILE, H5E_OBJECTITERERROR, FAIL, "can't iterate over group ids");

if (args->args.get_obj_ids.types & H5F_OBJ_DATATYPE)
if (requested_types & H5F_OBJ_DATATYPE)
if (H5Iiterate(H5I_DATATYPE, RV_iterate_copy_hid_cb, &id_list) < 0)
FUNC_GOTO_ERROR(H5E_FILE, H5E_OBJECTITERERROR, FAIL, "can't iterate over datatype ids");

if (args->args.get_obj_ids.types & H5F_OBJ_DATASET)
if (requested_types & H5F_OBJ_DATASET)
if (H5Iiterate(H5I_DATASET, RV_iterate_copy_hid_cb, &id_list) < 0)
FUNC_GOTO_ERROR(H5E_FILE, H5E_OBJECTITERERROR, FAIL, "can't iterate over dataset ids");

if (args->args.get_obj_ids.types & H5F_OBJ_ATTR)
if (requested_types & H5F_OBJ_ATTR)
if (H5Iiterate(H5I_ATTR, RV_iterate_copy_hid_cb, &id_list) < 0)
FUNC_GOTO_ERROR(H5E_FILE, H5E_OBJECTITERERROR, FAIL, "can't iterate over attribute ids");

*args->args.get_obj_ids.count = id_list.obj_count;

break;
default:
FUNC_GOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't get this type of information from file");
Expand Down Expand Up @@ -812,11 +819,13 @@ RV_file_close(void *file, hid_t dxpl_id, void **req)
herr_t
RV_iterate_copy_hid_cb(hid_t obj_id, void *udata)
{
herr_t ret_value = SUCCEED;
object_id_list *id_list = (object_id_list *)udata;
herr_t ret_value = H5_ITER_CONT;
get_obj_ids_udata_t *id_list = (get_obj_ids_udata_t *)udata;

id_list->obj_id_list[id_list->obj_count] = obj_id;
if (id_list->obj_count >= id_list->max_obj_count)
FUNC_GOTO_DONE(H5_ITER_STOP);

id_list->obj_id_list[id_list->obj_count] = obj_id;
id_list->obj_count++;

done:
Expand Down
2 changes: 0 additions & 2 deletions test/test_rest_vol.c
Original file line number Diff line number Diff line change
Expand Up @@ -1475,8 +1475,6 @@ test_unused_file_API_calls(void)
TEST_ERROR
if (H5Fget_obj_count(file_id, H5F_OBJ_DATASET) >= 0)
TEST_ERROR
if (H5Fget_obj_ids(file_id, H5F_OBJ_DATASET, 0, &obj_id) >= 0)
TEST_ERROR
if (H5Fmount(file_id, "/", file_id, H5P_DEFAULT) >= 0)
TEST_ERROR
if (H5Funmount(file_id, "/") >= 0)
Expand Down

0 comments on commit 94d8342

Please sign in to comment.