diff options
Diffstat (limited to 'test/objcopy.c')
-rwxr-xr-x | test/objcopy.c | 138 |
1 files changed, 53 insertions, 85 deletions
diff --git a/test/objcopy.c b/test/objcopy.c index 5d2afd2..c916f8f 100755 --- a/test/objcopy.c +++ b/test/objcopy.c @@ -1260,11 +1260,8 @@ compare_groups(hid_t gid, hid_t gid2, hid_t pid, int depth, unsigned copy_flags) if(ginfo2.nlinks > 0) { char objname[NAME_BUF_SIZE]; /* Name of object in group */ char objname2[NAME_BUF_SIZE]; /* Name of object in group */ - H5G_obj_t objtype; /* Type of object in group */ - H5G_obj_t objtype2; /* Type of object in group */ H5L_info_t linfo; /* Link information */ H5L_info_t linfo2; /* Link information */ - hid_t oid, oid2; /* IDs of objects within group */ /* Loop over contents of groups */ for(idx = 0; idx < ginfo.nlinks; idx++) { @@ -1273,11 +1270,6 @@ compare_groups(hid_t gid, hid_t gid2, hid_t pid, int depth, unsigned copy_flags) if(H5Lget_name_by_idx(gid2, ".", H5_INDEX_NAME, H5_ITER_INC, idx, objname2, (size_t)NAME_BUF_SIZE, H5P_DEFAULT) < 0) TEST_ERROR if(HDstrcmp(objname, objname2)) TEST_ERROR - /* Check type of objects */ - if((objtype = H5Gget_objtype_by_idx(gid, idx)) < 0) TEST_ERROR - if((objtype2 = H5Gget_objtype_by_idx(gid2, idx)) < 0) TEST_ERROR - if(objtype != objtype2) TEST_ERROR - /* Get link info */ if(H5Lget_info(gid, objname, &linfo, H5P_DEFAULT) < 0) TEST_ERROR if(H5Lget_info(gid2, objname2, &linfo2, H5P_DEFAULT) < 0) TEST_ERROR @@ -1285,8 +1277,8 @@ compare_groups(hid_t gid, hid_t gid2, hid_t pid, int depth, unsigned copy_flags) /* Extra checks for "real" objects */ if(linfo.type == H5L_TYPE_HARD) { - H5O_info_t oinfo; /* Object info */ - H5O_info_t oinfo2; /* Object info */ + hid_t oid, oid2; /* IDs of objects within group */ + H5O_info_t oinfo, oinfo2; /* Object info */ /* Compare some pieces of the object info */ if(H5Oget_info(gid, objname, &oinfo, H5P_DEFAULT) < 0) TEST_ERROR @@ -1312,83 +1304,59 @@ compare_groups(hid_t gid, hid_t gid2, hid_t pid, int depth, unsigned copy_flags) continue; else addr_insert(&oinfo); - } /* end if */ - /* Compare objects within group */ - switch(objtype) { - case H5G_LINK: - { - char linkname[NAME_BUF_SIZE]; /* Link value */ - char linkname2[NAME_BUF_SIZE]; /* Link value */ - - /* Check link values */ - if(H5Lget_val(gid, objname, linkname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT) < 0) TEST_ERROR - if(H5Lget_val(gid2, objname2, linkname2, (size_t)NAME_BUF_SIZE, H5P_DEFAULT) < 0) TEST_ERROR - if(HDstrcmp(linkname, linkname2)) TEST_ERROR - } - break; - - case H5G_GROUP: - /* Open groups */ - if((oid = H5Gopen2(gid, objname, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR - if((oid2 = H5Gopen2(gid2, objname2, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR - - /* Compare groups */ - if(compare_groups(oid, oid2, pid, depth - 1, copy_flags) != TRUE) TEST_ERROR - - /* Close groups */ - if(H5Gclose(oid) < 0) TEST_ERROR - if(H5Gclose(oid2) < 0) TEST_ERROR - break; - - case H5G_DATASET: - /* Open datasets */ - if((oid = H5Dopen(gid, objname)) < 0) TEST_ERROR - if((oid2 = H5Dopen(gid2, objname2)) < 0) TEST_ERROR - - /* Compare datasets */ - if(compare_datasets(oid, oid2, pid, NULL) != TRUE) TEST_ERROR - - /* Close datasets */ - if(H5Dclose(oid) < 0) TEST_ERROR - if(H5Dclose(oid2) < 0) TEST_ERROR - break; - - case H5G_TYPE: - /* Open datatypes */ - if((oid = H5Topen(gid, objname)) < 0) TEST_ERROR - if((oid2 = H5Topen(gid2, objname2)) < 0) TEST_ERROR - - /* Compare datatypes */ - if(H5Tequal(oid, oid2) != TRUE) TEST_ERROR - - /* Close datatypes */ - if(H5Tclose(oid) < 0) TEST_ERROR - if(H5Tclose(oid2) < 0) TEST_ERROR - break; - - case H5G_UDLINK: - { - char linkval[NAME_BUF_SIZE]; /* Link value */ - char linkval2[NAME_BUF_SIZE]; /* Link value */ - - /* Check that both links are the same type and the same size */ - if(linfo.type != linfo2.type) TEST_ERROR - if(linfo.u.val_size != linfo2.u.val_size) TEST_ERROR - - /* Get link udata */ - if(H5Lget_val(gid, objname, linkval, (size_t)NAME_BUF_SIZE, H5P_DEFAULT) < 0) TEST_ERROR - if(H5Lget_val(gid2, objname2, linkval2, (size_t)NAME_BUF_SIZE, H5P_DEFAULT) < 0) TEST_ERROR - - /* Compare link udata */ - if(HDmemcmp(linkval, linkval2, linfo.u.val_size)) TEST_ERROR - } - break; - - default: + /* Open objects */ + if((oid = H5Oopen(gid, objname, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR + if((oid2 = H5Oopen(gid2, objname2, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR + + /* Compare objects within group */ + switch(oinfo.type) { + case H5O_TYPE_GROUP: + /* Compare groups */ + if(compare_groups(oid, oid2, pid, depth - 1, copy_flags) != TRUE) TEST_ERROR + break; + + case H5O_TYPE_DATASET: + /* Compare datasets */ + if(compare_datasets(oid, oid2, pid, NULL) != TRUE) TEST_ERROR + break; + + case H5O_TYPE_NAMED_DATATYPE: + /* Compare datatypes */ + if(H5Tequal(oid, oid2) != TRUE) TEST_ERROR + break; + + default: HDassert(0 && "Unknown type of object"); - break; - } /* end switch */ + break; + } /* end switch */ + + /* Close objects */ + if(H5Oclose(oid) < 0) TEST_ERROR + if(H5Oclose(oid2) < 0) TEST_ERROR + } /* end if */ + else { + /* Check that both links are the same size */ + if(linfo.u.val_size != linfo2.u.val_size) TEST_ERROR + + /* Compare link values */ + if(linfo.type == H5L_TYPE_SOFT || + (linfo.type >= H5L_TYPE_UD_MIN && linfo.type <= H5L_TYPE_MAX)) { + char linkval[NAME_BUF_SIZE]; /* Link value */ + char linkval2[NAME_BUF_SIZE]; /* Link value */ + + /* Get link values */ + HDassert(linfo.u.val_size <= NAME_BUF_SIZE); + if(H5Lget_val(gid, objname, linkval, (size_t)NAME_BUF_SIZE, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lget_val(gid2, objname2, linkval2, (size_t)NAME_BUF_SIZE, H5P_DEFAULT) < 0) TEST_ERROR + + /* Compare link data */ + if(HDmemcmp(linkval, linkval2, linfo.u.val_size)) TEST_ERROR + } /* end else-if */ + else { +HDassert(0 && "Unknown type of link"); + } /* end else */ + } /* end else */ } /* end for */ } /* end if */ |