diff options
Diffstat (limited to 'test/links.c')
-rw-r--r-- | test/links.c | 2231 |
1 files changed, 1184 insertions, 1047 deletions
diff --git a/test/links.c b/test/links.c index 1825214..1d6b329 100644 --- a/test/links.c +++ b/test/links.c @@ -50,12 +50,12 @@ const char *FILENAME[] = { /* Link type IDs */ #define UD_HARD_TYPE 201 -#define UD_CB_TYPE H5L_LINK_MAX +#define UD_CB_TYPE H5L_TYPE_MAX #define UD_PLIST_TYPE 128 #define UD_CBFAIL_TYPE UD_PLIST_TYPE #define UD_ERROR_TYPE 189 #define UD_BAD_TYPE1 H5G_LINK_HARD -#define UD_BAD_TYPE2 (H5L_LINK_UD_MIN - 5) +#define UD_BAD_TYPE2 (H5L_TYPE_UD_MIN - 5) #define UD_BAD_VERS (H5L_LINK_CLASS_T_VERS + 1) #define DEST_PROP_NAME "destination_group" @@ -90,42 +90,45 @@ const char *FILENAME[] = { *------------------------------------------------------------------------- */ static int -mklinks(hid_t fapl) +mklinks(hid_t fapl, hbool_t new_format) { hid_t file, scalar, grp, d1; hsize_t size[1] = {1}; char filename[NAME_BUF_SIZE]; - TESTING("link creation"); + if(new_format) + TESTING("link creation (w/new group format)") + else + TESTING("link creation") /* Create a file */ h5_fixname(FILENAME[1], fapl, filename, sizeof filename); - if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; - if ((scalar=H5Screate_simple (1, size, size))<0) TEST_ERROR; + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR + if ((scalar=H5Screate_simple (1, size, size)) < 0) TEST_ERROR /* Create a group */ - if ((grp=H5Gcreate (file, "grp1", (size_t)0))<0) TEST_ERROR; - if (H5Gclose (grp)<0) TEST_ERROR; + if ((grp=H5Gcreate (file, "grp1", (size_t)0)) < 0) TEST_ERROR + if (H5Gclose (grp) < 0) TEST_ERROR /* Create a dataset */ - if ((d1=H5Dcreate (file, "d1", H5T_NATIVE_INT, scalar, H5P_DEFAULT))<0) TEST_ERROR; - if (H5Dclose (d1)<0) TEST_ERROR; + if ((d1=H5Dcreate (file, "d1", H5T_NATIVE_INT, scalar, H5P_DEFAULT)) < 0) TEST_ERROR + if (H5Dclose (d1) < 0) TEST_ERROR /* Create a hard link */ - if (H5Lcreate_hard (file, "d1", H5L_SAME_LOC, "grp1/hard", H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; + if (H5Lcreate_hard (file, "d1", H5L_SAME_LOC, "grp1/hard", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create a symbolic link */ - if (H5Lcreate_soft ("/d1", file, "grp1/soft", H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; + if (H5Lcreate_soft ("/d1", file, "grp1/soft", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create a symbolic link to something that doesn't exist */ - if (H5Lcreate_soft ("foobar", file, "grp1/dangle", H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; + if (H5Lcreate_soft ("foobar", file, "grp1/dangle", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create a recursive symbolic link */ - if (H5Lcreate_soft ("/grp1/recursive", file, "/grp1/recursive", H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; + if (H5Lcreate_soft ("/grp1/recursive", file, "/grp1/recursive", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Close */ - if (H5Sclose (scalar)<0) TEST_ERROR; - if (H5Fclose (file)<0) TEST_ERROR; + if (H5Sclose (scalar) < 0) TEST_ERROR + if (H5Fclose (file) < 0) TEST_ERROR PASSED(); return 0; @@ -152,7 +155,7 @@ mklinks(hid_t fapl) *------------------------------------------------------------------------- */ static int -new_links(hid_t fapl) +new_links(hid_t fapl, hbool_t new_format) { hid_t file_a, file_b=(-1); hid_t grp1_a=(-1), grp1_b=(-1), grp2_a=(-1), grp2_b=(-1); @@ -161,57 +164,60 @@ new_links(hid_t fapl) char filename[NAME_BUF_SIZE]; hsize_t size[1] = {1}; - TESTING("H5Lcreate functions"); + if(new_format) + TESTING("H5Lcreate functions (w/new group format)") + else + TESTING("H5Lcreate functions") /* Create two files */ h5_fixname(FILENAME[1], fapl, filename, sizeof filename); - if ((file_a=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if ((file_a=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR h5_fixname(FILENAME[2], fapl, filename, sizeof filename); - if ((file_b=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if ((file_b=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR - if ((scalar=H5Screate_simple (1, size, size))<0) TEST_ERROR; + if ((scalar=H5Screate_simple (1, size, size)) < 0) TEST_ERROR /* Create two groups in each file */ - if ((grp1_a=H5Gcreate (file_a, "grp1", (size_t)0))<0) TEST_ERROR; - if ((grp2_a=H5Gcreate (file_a, "grp2", (size_t)0))<0) TEST_ERROR; - if ((grp1_b=H5Gcreate (file_b, "grp1", (size_t)0))<0) TEST_ERROR; - if ((grp2_b=H5Gcreate (file_b, "grp2", (size_t)0))<0) TEST_ERROR; + if ((grp1_a=H5Gcreate (file_a, "grp1", (size_t)0)) < 0) TEST_ERROR + if ((grp2_a=H5Gcreate (file_a, "grp2", (size_t)0)) < 0) TEST_ERROR + if ((grp1_b=H5Gcreate (file_b, "grp1", (size_t)0)) < 0) TEST_ERROR + if ((grp2_b=H5Gcreate (file_b, "grp2", (size_t)0)) < 0) TEST_ERROR /* Create datasets */ - if((dset1=H5Dcreate(file_a, "dataset1", H5T_NATIVE_INT, scalar, H5P_DEFAULT))<0) TEST_ERROR; - if((dset2=H5Dcreate(grp1_a, "dataset2", H5T_NATIVE_INT, scalar, H5P_DEFAULT))<0) TEST_ERROR; + if((dset1=H5Dcreate(file_a, "dataset1", H5T_NATIVE_INT, scalar, H5P_DEFAULT)) < 0) TEST_ERROR + if((dset2=H5Dcreate(grp1_a, "dataset2", H5T_NATIVE_INT, scalar, H5P_DEFAULT)) < 0) TEST_ERROR /* Create links within a file. Both of source and destination use * H5L_SAME_LOC. Both hard and soft links should fail. */ H5E_BEGIN_TRY { - if(H5Lcreate_hard(H5L_SAME_LOC, "dataset1", H5L_SAME_LOC, "hard", H5P_DEFAULT, H5P_DEFAULT)!=FAIL) TEST_ERROR; + if(H5Lcreate_hard(H5L_SAME_LOC, "dataset1", H5L_SAME_LOC, "hard", H5P_DEFAULT, H5P_DEFAULT)!=FAIL) TEST_ERROR } H5E_END_TRY; H5E_BEGIN_TRY { - if(H5Lcreate_soft("dataset1", H5L_SAME_LOC, "soft", H5P_DEFAULT, H5P_DEFAULT)!=FAIL) TEST_ERROR; + if(H5Lcreate_soft("dataset1", H5L_SAME_LOC, "soft", H5P_DEFAULT, H5P_DEFAULT)!=FAIL) TEST_ERROR } H5E_END_TRY; /* Create links across files with hard link. Should fail. */ H5E_BEGIN_TRY { - if(H5Lcreate_hard(file_a, "dataset1", file_b, "hard", H5P_DEFAULT, H5P_DEFAULT)!=FAIL) TEST_ERROR; + if(H5Lcreate_hard(file_a, "dataset1", file_b, "hard", H5P_DEFAULT, H5P_DEFAULT)!=FAIL) TEST_ERROR } H5E_END_TRY; /* Create hard link to test H5L_SAME_LOC */ - if(H5Lcreate_hard(grp1_a, "dataset2", H5L_SAME_LOC, "hard1", H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; + if(H5Lcreate_hard(grp1_a, "dataset2", H5L_SAME_LOC, "hard1", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create links to test hard links across different locations */ - if(H5Lcreate_hard(grp1_a, "dataset2", grp2_a, "hard2", H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; + if(H5Lcreate_hard(grp1_a, "dataset2", grp2_a, "hard2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Close dataspace and files */ - if (H5Sclose (scalar)<0) TEST_ERROR; - if (H5Dclose(dset1)<0) TEST_ERROR; - if (H5Dclose(dset2)<0) TEST_ERROR; - if (H5Gclose (grp1_a)<0) TEST_ERROR; - if (H5Gclose (grp2_a)<0) TEST_ERROR; - if (H5Gclose (grp1_b)<0) TEST_ERROR; - if (H5Gclose (grp2_b)<0) TEST_ERROR; - if (H5Fclose (file_a)<0) TEST_ERROR; - if (H5Fclose (file_b)<0) TEST_ERROR; + if (H5Sclose (scalar) < 0) TEST_ERROR + if (H5Dclose(dset1) < 0) TEST_ERROR + if (H5Dclose(dset2) < 0) TEST_ERROR + if (H5Gclose (grp1_a) < 0) TEST_ERROR + if (H5Gclose (grp2_a) < 0) TEST_ERROR + if (H5Gclose (grp1_b) < 0) TEST_ERROR + if (H5Gclose (grp2_b) < 0) TEST_ERROR + if (H5Fclose (file_a) < 0) TEST_ERROR + if (H5Fclose (file_b) < 0) TEST_ERROR PASSED(); return 0; @@ -250,7 +256,7 @@ new_links(hid_t fapl) *------------------------------------------------------------------------- */ static int -cklinks(hid_t fapl) +cklinks(hid_t fapl, hbool_t new_format) { hid_t file; H5G_stat_t sb1, sb2; @@ -258,45 +264,48 @@ cklinks(hid_t fapl) char filename[NAME_BUF_SIZE]; herr_t status; - TESTING("link queries"); + if(new_format) + TESTING("link queries (w/new group format)") + else + TESTING("link queries") /* Open the file */ h5_fixname(FILENAME[1], fapl, filename, sizeof filename); - if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR; + if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR /* Hard link */ - if (H5Gget_objinfo(file, "d1", TRUE, &sb1)<0) TEST_ERROR; - if (H5Gget_objinfo(file, "grp1/hard", TRUE, &sb2)<0) TEST_ERROR; + if (H5Gget_objinfo(file, "d1", TRUE, &sb1) < 0) TEST_ERROR + if (H5Gget_objinfo(file, "grp1/hard", TRUE, &sb2) < 0) TEST_ERROR if (H5G_DATASET!=sb2.type) { H5_FAILED(); printf(" %d: Unexpected object type should have been a dataset\n", __LINE__); - TEST_ERROR; + TEST_ERROR } if (HDmemcmp(&sb1.objno, &sb2.objno, sizeof(sb1.objno))) { H5_FAILED(); puts(" Hard link test failed. Link seems not to point to the "); puts(" expected file location."); - TEST_ERROR; + TEST_ERROR } /* Symbolic link */ - if (H5Gget_objinfo(file, "grp1/soft", TRUE, &sb2)<0) TEST_ERROR; + if (H5Gget_objinfo(file, "grp1/soft", TRUE, &sb2) < 0) TEST_ERROR if (H5G_DATASET!=sb2.type) { H5_FAILED(); printf(" %d: Unexpected object type should have been a dataset\n", __LINE__); - TEST_ERROR; + TEST_ERROR } if (HDmemcmp(&sb1.objno, &sb2.objno, sizeof(sb1.objno))) { H5_FAILED(); puts(" Soft link test failed. Link seems not to point to the "); puts(" expected file location."); - TEST_ERROR; + TEST_ERROR } - if (H5Lget_linkval(file, "grp1/soft", sizeof linkval, linkval, H5P_DEFAULT)<0) TEST_ERROR; + if (H5Lget_linkval(file, "grp1/soft", sizeof linkval, linkval, H5P_DEFAULT) < 0) TEST_ERROR if (HDstrcmp(linkval, "/d1")) { H5_FAILED(); puts(" Soft link test failed. Wrong link value"); - TEST_ERROR; + TEST_ERROR } /* Dangling link */ @@ -306,23 +315,23 @@ cklinks(hid_t fapl) if (status>=0) { H5_FAILED(); puts(" H5Gget_objinfo() should have failed for a dangling link."); - TEST_ERROR; + TEST_ERROR } - if (H5Gget_objinfo(file, "grp1/dangle", FALSE, &sb2)<0) TEST_ERROR; + if (H5Gget_objinfo(file, "grp1/dangle", FALSE, &sb2) < 0) TEST_ERROR if (H5G_LINK!=sb2.type) { H5_FAILED(); printf(" %d: Unexpected object type should have been a symbolic link\n", __LINE__); - TEST_ERROR; + TEST_ERROR } - if (H5Gget_linkval(file, "grp1/dangle", sizeof linkval, linkval)<0) { + if (H5Gget_linkval(file, "grp1/dangle", sizeof linkval, linkval) < 0) { H5_FAILED(); printf(" %d: Can't retrieve link value\n", __LINE__); - TEST_ERROR; + TEST_ERROR } if (HDstrcmp(linkval, "foobar")) { H5_FAILED(); puts(" Dangling link test failed. Wrong link value"); - TEST_ERROR; + TEST_ERROR } /* Recursive link */ @@ -332,27 +341,27 @@ cklinks(hid_t fapl) if (status>=0) { H5_FAILED(); puts(" H5Gget_objinfo() should have failed for a recursive link."); - TEST_ERROR; + TEST_ERROR } - if (H5Gget_objinfo(file, "grp1/recursive", FALSE, &sb2)<0) TEST_ERROR; + if (H5Gget_objinfo(file, "grp1/recursive", FALSE, &sb2) < 0) TEST_ERROR if (H5G_LINK!=sb2.type) { H5_FAILED(); printf(" %d: Unexpected object type should have been a symbolic link\n", __LINE__); - TEST_ERROR; + TEST_ERROR } - if (H5Gget_linkval(file, "grp1/recursive", sizeof linkval, linkval)<0) { + if (H5Gget_linkval(file, "grp1/recursive", sizeof linkval, linkval) < 0) { H5_FAILED(); printf(" %d: Can't retrieve link value\n", __LINE__); - TEST_ERROR; + TEST_ERROR } if (HDstrcmp(linkval, "/grp1/recursive")) { H5_FAILED(); puts(" Recursive link test failed. Wrong link value"); - TEST_ERROR; + TEST_ERROR } /* Cleanup */ - if (H5Fclose(file)<0) TEST_ERROR; + if (H5Fclose(file) < 0) TEST_ERROR PASSED(); return 0; @@ -377,41 +386,44 @@ cklinks(hid_t fapl) *------------------------------------------------------------------------- */ static int -ck_new_links(hid_t fapl) +ck_new_links(hid_t fapl, hbool_t new_format) { hid_t file; H5G_stat_t sb_dset, sb_hard1, sb_hard2; char filename[NAME_BUF_SIZE]; - TESTING("new link queries"); + if(new_format) + TESTING("new link queries (w/new group format)") + else + TESTING("new link queries") /* Open the file */ h5_fixname(FILENAME[1], fapl, filename, sizeof filename); - if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR; + if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR /* Get hard link info */ - if(H5Gget_objinfo(file, "/grp1/dataset2", TRUE, &sb_dset)<0) - TEST_ERROR; - if(H5Gget_objinfo(file, "/grp1/hard1", TRUE, &sb_hard1)<0) - TEST_ERROR; - if(H5Gget_objinfo(file, "/grp2/hard2", TRUE, &sb_hard2)<0) - TEST_ERROR; + if(H5Gget_objinfo(file, "/grp1/dataset2", TRUE, &sb_dset) < 0) + TEST_ERROR + if(H5Gget_objinfo(file, "/grp1/hard1", TRUE, &sb_hard1) < 0) + TEST_ERROR + if(H5Gget_objinfo(file, "/grp2/hard2", TRUE, &sb_hard2) < 0) + TEST_ERROR /* Check hard links */ if(H5G_DATASET!=sb_hard1.type || H5G_DATASET!=sb_hard2.type) { H5_FAILED(); printf(" %d: Unexpected object type should have been a dataset\n", __LINE__); - TEST_ERROR; + TEST_ERROR } if(HDmemcmp(&sb_dset.objno, &sb_hard1.objno, sizeof(sb_dset.objno)) || HDmemcmp(&sb_dset.objno, &sb_hard2.objno, sizeof(sb_dset.objno))) { H5_FAILED(); puts(" Hard link test failed. Link seems not to point to the "); puts(" expected file location."); - TEST_ERROR; + TEST_ERROR } /* Cleanup */ - if(H5Fclose(file)<0) TEST_ERROR; + if(H5Fclose(file) < 0) TEST_ERROR PASSED(); return 0; @@ -437,7 +449,7 @@ ck_new_links(hid_t fapl) *------------------------------------------------------------------------- */ static int -long_links(hid_t fapl) +long_links(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1); /* Group ID */ @@ -446,35 +458,38 @@ long_links(hid_t fapl) size_t u; /* Local index variable */ char filename[NAME_BUF_SIZE]; - TESTING("long names for objects & links"); + if(new_format) + TESTING("long names for objects & links (w/new group format)") + else + TESTING("long names for objects & links") /* Create files */ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create group with short name in file (used as target for hard links) */ - if((gid=H5Gcreate (fid, "grp1", (size_t)0))<0) TEST_ERROR; + if((gid=H5Gcreate (fid, "grp1", (size_t)0)) < 0) TEST_ERROR /* Construct very long file name */ - if((objname = HDmalloc((size_t)(MAX_NAME_LEN + 1))) == NULL) TEST_ERROR; + if((objname = HDmalloc((size_t)(MAX_NAME_LEN + 1))) == NULL) TEST_ERROR for(u = 0; u < MAX_NAME_LEN; u++) objname[u] = 'a'; objname[MAX_NAME_LEN] = '\0'; /* Create hard link to existing object */ - if(H5Lcreate_hard(fid, "grp1", fid, objname, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_hard(fid, "grp1", fid, objname, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create soft link to existing object */ objname[0] = 'b'; - if(H5Lcreate_soft("grp1", fid, objname, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_soft("grp1", fid, objname, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create group with long name in existing group */ - if((gid2=H5Gcreate(gid, objname, (size_t)0))<0) TEST_ERROR; + if((gid2=H5Gcreate(gid, objname, (size_t)0)) < 0) TEST_ERROR /* Close objects */ - if(H5Gclose(gid2)<0) TEST_ERROR; - if(H5Gclose(gid)<0) TEST_ERROR; - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Gclose(gid2) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR + if(H5Fclose(fid) < 0) TEST_ERROR /* Release memory */ HDfree(objname); @@ -510,7 +525,7 @@ long_links(hid_t fapl) *------------------------------------------------------------------------- */ static int -toomany(hid_t fapl) +toomany(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -518,7 +533,10 @@ toomany(hid_t fapl) ssize_t name_len; /* Length of object name */ char filename[NAME_BUF_SIZE]; - TESTING("too many links"); + if(new_format) + TESTING("too many links (w/new group format)") + else + TESTING("too many links") /* Make certain test is valid */ /* XXX: should probably make a "generic" test that creates the proper @@ -528,62 +546,62 @@ toomany(hid_t fapl) /* Create file */ h5_fixname(FILENAME[1], fapl, filename, sizeof filename); - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create group with short name in file (used as target for hard links) */ - if((gid=H5Gcreate (fid, "final", (size_t)0))<0) TEST_ERROR; + if((gid=H5Gcreate (fid, "final", (size_t)0)) < 0) TEST_ERROR /* Create chain of hard links to existing object (no limit on #) */ - if(H5Lcreate_hard(fid, "final", fid, "hard1", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard1", fid, "hard2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard2", fid, "hard3", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard3", fid, "hard4", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard4", fid, "hard5", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard5", fid, "hard6", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard6", fid, "hard7", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard7", fid, "hard8", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard8", fid, "hard9", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard9", fid, "hard10", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard10", fid, "hard11", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard11", fid, "hard12", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard12", fid, "hard13", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard13", fid, "hard14", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard14", fid, "hard15", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard15", fid, "hard16", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard16", fid, "hard17", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard17", fid, "hard18", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard18", fid, "hard19", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard19", fid, "hard20", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_hard(fid, "hard20", fid, "hard21", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_hard(fid, "final", fid, "hard1", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard1", fid, "hard2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard2", fid, "hard3", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard3", fid, "hard4", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard4", fid, "hard5", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard5", fid, "hard6", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard6", fid, "hard7", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard7", fid, "hard8", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard8", fid, "hard9", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard9", fid, "hard10", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard10", fid, "hard11", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard11", fid, "hard12", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard12", fid, "hard13", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard13", fid, "hard14", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard14", fid, "hard15", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard15", fid, "hard16", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard16", fid, "hard17", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard17", fid, "hard18", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard18", fid, "hard19", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard19", fid, "hard20", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_hard(fid, "hard20", fid, "hard21", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create chain of soft links to existing object (limited) */ - if(H5Lcreate_soft("final", fid, "soft1", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft1", fid, "soft2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft2", fid, "soft3", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft3", fid, "soft4", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft4", fid, "soft5", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft5", fid, "soft6", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft6", fid, "soft7", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft7", fid, "soft8", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft8", fid, "soft9", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft9", fid, "soft10", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft10", fid, "soft11", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft11", fid, "soft12", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft12", fid, "soft13", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft13", fid, "soft14", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft14", fid, "soft15", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft15", fid, "soft16", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_soft("soft16", fid, "soft17", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_soft("final", fid, "soft1", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft1", fid, "soft2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft2", fid, "soft3", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft3", fid, "soft4", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft4", fid, "soft5", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft5", fid, "soft6", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft6", fid, "soft7", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft7", fid, "soft8", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft8", fid, "soft9", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft9", fid, "soft10", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft10", fid, "soft11", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft11", fid, "soft12", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft12", fid, "soft13", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft13", fid, "soft14", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft14", fid, "soft15", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft15", fid, "soft16", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_soft("soft16", fid, "soft17", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Close objects */ - if(H5Gclose(gid)<0) TEST_ERROR; - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR + if(H5Fclose(fid) < 0) TEST_ERROR /* Open file */ - if((fid=H5Fopen(filename, H5F_ACC_RDWR, fapl))<0) TEST_ERROR; + if((fid=H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR /* Open object through last hard link */ - if((gid = H5Gopen(fid, "hard21")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "hard21")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -596,7 +614,7 @@ toomany(hid_t fapl) if(H5Gclose(gid2) < 0) TEST_ERROR /* Close hard-linked object */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Open object through too deep soft link */ H5E_BEGIN_TRY { @@ -605,11 +623,11 @@ toomany(hid_t fapl) if (gid >= 0) { H5_FAILED(); puts(" Should have failed for sequence of too many nested links."); - TEST_ERROR; + TEST_ERROR } /* Open object through lesser soft link */ - if((gid = H5Gopen(fid, "soft16")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "soft16")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -623,7 +641,7 @@ toomany(hid_t fapl) if(H5Gclose(gid) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -638,7 +656,6 @@ toomany(hid_t fapl) } /* end toomany() */ -#ifdef H5_GROUP_REVISION /*------------------------------------------------------------------------- * Function: test_h5l_create * @@ -655,7 +672,7 @@ toomany(hid_t fapl) *------------------------------------------------------------------------- */ static int -test_h5l_create(hid_t fapl) +test_h5l_create(hid_t fapl, hbool_t new_format) { hid_t file_id=-1; hid_t group_id=-1; @@ -668,24 +685,28 @@ test_h5l_create(hid_t fapl) int i, n, j; int wdata[H5L_DIM1][H5L_DIM2]; int rdata[H5L_DIM1][H5L_DIM2]; - TESTING("H5Llink"); + + if(new_format) + TESTING("H5Llink (w/new group format)") + else + TESTING("H5Llink") /* Create file */ h5_fixname(FILENAME[3], fapl, filename, sizeof filename); - if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create and commit a datatype with no name */ - if((type_id =H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR; - if(H5Tcommit_expand(file_id, type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(! H5Tcommitted(type_id)) TEST_ERROR; + if((type_id =H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR + if(H5Tcommit_expand(file_id, type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(! H5Tcommitted(type_id)) TEST_ERROR /* Create the dataspace */ dims[0] = H5L_DIM1; dims[1] = H5L_DIM2; - if((space_id=H5Screate_simple(2 ,dims, NULL))<0) TEST_ERROR; + if((space_id=H5Screate_simple(2 ,dims, NULL)) < 0) TEST_ERROR /* Create a dataset with no name using the committed datatype*/ - if ((dset_id = H5Dcreate_expand(file_id, type_id, space_id, H5P_DEFAULT, H5P_DEFAULT)) <0) TEST_ERROR; + if ((dset_id = H5Dcreate_expand(file_id, type_id, space_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR /* Verify that we can write to and read from the dataset */ /* Initialize the dataset */ @@ -694,74 +715,69 @@ test_h5l_create(hid_t fapl) wdata[i][j] = n++; /* Write the data to the dataset */ - if (H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata)<0) TEST_ERROR; + if (H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata) < 0) TEST_ERROR /* Read the data back */ - if (H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata)<0) TEST_ERROR; + if (H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata) < 0) TEST_ERROR /* Verify the data */ - for (i = 0; i < H5L_DIM1; i++) { - for (j = 0; j < H5L_DIM2; j++) { + for (i = 0; i < H5L_DIM1; i++) + for (j = 0; j < H5L_DIM2; j++) if (wdata[i][j] != rdata[i][j]) - { - TEST_ERROR; - } - }} + TEST_ERROR /* Create a group with no name*/ - if((group_id = H5Gcreate_expand(file_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if((group_id = H5Gcreate_expand(file_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR /* Link nameless datatype into nameless group */ - if(H5Llink(group_id, "datatype", type_id, H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; + if(H5Llink(group_id, "datatype", type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create LCPL with intermediate group creation flag set */ - if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) <0) TEST_ERROR; - if(H5Pset_create_intermediate_group(lcpl_id, TRUE) <0) TEST_ERROR; + if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR + if(H5Pset_create_intermediate_group(lcpl_id, TRUE) < 0) TEST_ERROR /* Link nameless dataset into nameless group with intermediate group */ - if(H5Llink(group_id, "inter_group/dataset", dset_id, lcpl_id, H5P_DEFAULT)<0) TEST_ERROR; + if(H5Llink(group_id, "inter_group/dataset", dset_id, lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR /* Close IDs for dataset and datatype */ - if(H5Dclose(dset_id)<0) TEST_ERROR; - if(H5Tclose(type_id)<0) TEST_ERROR; + if(H5Dclose(dset_id) < 0) TEST_ERROR + if(H5Tclose(type_id) < 0) TEST_ERROR /* Re-open datatype using new link */ - if((type_id = H5Topen(group_id, "datatype"))<0) TEST_ERROR; + if((type_id = H5Topen(group_id, "datatype")) < 0) TEST_ERROR /* Link nameless group to root group and close the group ID*/ - if(H5Llink(file_id, "/group", group_id, H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; - if(H5Gclose(group_id)<0) TEST_ERROR; + if(H5Llink(file_id, "/group", group_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gclose(group_id) < 0) TEST_ERROR /* Open dataset through root group and verify its data */ - if((dset_id = H5Dopen(file_id, "/group/inter_group/dataset"))<0) TEST_ERROR; + if((dset_id = H5Dopen(file_id, "/group/inter_group/dataset")) < 0) TEST_ERROR /* Read data from dataset */ - if (H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata)<0) TEST_ERROR; - for (i = 0; i < H5L_DIM1; i++) { - for (j = 0; j < H5L_DIM2; j++) { - if (wdata[i][j] != rdata[i][j]) - { - TEST_ERROR; - } - }} + if (H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata) < 0) TEST_ERROR + for (i = 0; i < H5L_DIM1; i++) + for (j = 0; j < H5L_DIM2; j++) + if (wdata[i][j] != rdata[i][j]) + TEST_ERROR /* Close open IDs */ - if(H5Dclose(dset_id)<0) TEST_ERROR; - if(H5Tclose(type_id)<0) TEST_ERROR; - if(H5Pclose(lcpl_id)<0) TEST_ERROR; - if(H5Sclose(space_id)<0) TEST_ERROR; - if(H5Fclose(file_id)<0) TEST_ERROR; + if(H5Dclose(dset_id) < 0) TEST_ERROR + if(H5Tclose(type_id) < 0) TEST_ERROR + if(H5Pclose(lcpl_id) < 0) TEST_ERROR + if(H5Sclose(space_id) < 0) TEST_ERROR + if(H5Fclose(file_id) < 0) TEST_ERROR + PASSED(); return 0; error: H5E_BEGIN_TRY { - H5Gclose(group_id); - H5Dclose(dset_id); - H5Tclose(type_id); - H5Pclose(lcpl_id); - H5Sclose(space_id); - H5Fclose(file_id); + H5Gclose(group_id); + H5Dclose(dset_id); + H5Tclose(type_id); + H5Pclose(lcpl_id); + H5Sclose(space_id); + H5Fclose(file_id); } H5E_END_TRY; return 1; } /* end test_h5l_create() */ @@ -783,7 +799,7 @@ error: *------------------------------------------------------------------------- */ static int -test_lcpl(hid_t fapl) +test_lcpl(hid_t fapl, hbool_t new_format) { hid_t file_id=-1; hid_t group_id=-1; @@ -795,101 +811,99 @@ test_lcpl(hid_t fapl) char filename[1024]; hsize_t dims[2]; - TESTING("link creation property lists"); + if(new_format) + TESTING("link creation property lists (w/new group format)") + else + TESTING("link creation property lists") + /* Actually, intermediate group creation is tested elsewhere (tmisc). * Here we only need to test the character encoding property */ /* Create file */ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create and link a group with the default LCPL */ - if((group_id = H5Gcreate_expand(file_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Llink(file_id, "/group", group_id, H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; - if(H5Gclose(group_id)<0) TEST_ERROR; + if((group_id = H5Gcreate_expand(file_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR + if(H5Llink(file_id, "/group", group_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gclose(group_id) < 0) TEST_ERROR /* Check that its character encoding is the default */ - if(H5Lget_linkinfo(file_id, "group", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5F_CRT_DEFAULT_CSET) TEST_ERROR; + if(H5Lget_linkinfo(file_id, "group", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5F_CRT_DEFAULT_CSET) TEST_ERROR /* Create and commit a datatype with the default LCPL */ - if((type_id =H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR; - if(H5Tcommit_expand(file_id, type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Llink(file_id, "/type", type_id, H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; - if(H5Tclose(type_id)<0) TEST_ERROR; + if((type_id =H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR + if(H5Tcommit_expand(file_id, type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Llink(file_id, "/type", type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Tclose(type_id) < 0) TEST_ERROR; /* Check that its character encoding is the default */ - if(H5Lget_linkinfo(file_id, "type", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5F_CRT_DEFAULT_CSET) TEST_ERROR; + if(H5Lget_linkinfo(file_id, "type", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5F_CRT_DEFAULT_CSET) TEST_ERROR /* Create a dataspace */ dims[0] = H5L_DIM1; dims[1] = H5L_DIM2; - if((space_id=H5Screate_simple(2 ,dims, NULL))<0) TEST_ERROR; + if((space_id=H5Screate_simple(2 ,dims, NULL)) < 0) TEST_ERROR /* Create a dataset using the default LCPL */ - if ((dset_id = H5Dcreate_expand(file_id, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT)) <0) TEST_ERROR; - if(H5Llink(file_id, "/dataset", dset_id, H5P_DEFAULT, H5P_DEFAULT)<0) TEST_ERROR; - if(H5Dclose(dset_id)<0) TEST_ERROR; + if ((dset_id = H5Dcreate_expand(file_id, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR + if(H5Llink(file_id, "/dataset", dset_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Dclose(dset_id) < 0) TEST_ERROR /* Check that its character encoding is the default */ - if(H5Lget_linkinfo(file_id, "dataset", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5F_CRT_DEFAULT_CSET) TEST_ERROR; + if(H5Lget_linkinfo(file_id, "dataset", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5F_CRT_DEFAULT_CSET) TEST_ERROR /* Create a link creation property list with the UTF-8 character encoding */ - if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) <0) TEST_ERROR; - if(H5Pset_char_encoding(lcpl_id, H5T_CSET_UTF8) < 0) TEST_ERROR; + if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR + if(H5Pset_char_encoding(lcpl_id, H5T_CSET_UTF8) < 0) TEST_ERROR /* Create and link a group with the new LCPL */ - if((group_id = H5Gcreate_expand(file_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Llink(file_id, "/group2", group_id, lcpl_id, H5P_DEFAULT)<0) TEST_ERROR; - if(H5Gclose(group_id)<0) TEST_ERROR; + if((group_id = H5Gcreate_expand(file_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR + if(H5Llink(file_id, "/group2", group_id, lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gclose(group_id) < 0) TEST_ERROR /* Check that its character encoding is UTF-8 */ - if(H5Lget_linkinfo(file_id, "group2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR; + if(H5Lget_linkinfo(file_id, "group2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR /* Create and commit a datatype with the new LCPL */ - if((type_id =H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR; - if(H5Tcommit_expand(file_id, type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Llink(file_id, "/type2", type_id, lcpl_id, H5P_DEFAULT)<0) TEST_ERROR; - if(H5Tclose(type_id)<0) TEST_ERROR; + if((type_id =H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR + if(H5Tcommit_expand(file_id, type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Llink(file_id, "/type2", type_id, lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Tclose(type_id) < 0) TEST_ERROR; /* Check that its character encoding is UTF-8 */ - if(H5Lget_linkinfo(file_id, "type2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR; + if(H5Lget_linkinfo(file_id, "type2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR /* Create a dataset using the new LCPL */ - if ((dset_id = H5Dcreate_expand(file_id, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT)) <0) TEST_ERROR; - if(H5Llink(file_id, "/dataset2", dset_id, lcpl_id, H5P_DEFAULT)<0) TEST_ERROR; - if(H5Dclose(dset_id)<0) TEST_ERROR; + if ((dset_id = H5Dcreate_expand(file_id, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR + if(H5Llink(file_id, "/dataset2", dset_id, lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Dclose(dset_id) < 0) TEST_ERROR /* Check that its character encoding is UTF-8 */ - if(H5Lget_linkinfo(file_id, "dataset2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR; + if(H5Lget_linkinfo(file_id, "dataset2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR /* Create a new link to the dataset with a different character encoding. */ - if(H5Pclose(lcpl_id)<0) TEST_ERROR; - if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) <0) TEST_ERROR; - if(H5Pset_char_encoding(lcpl_id, H5T_CSET_ASCII) < 0) TEST_ERROR; + if(H5Pclose(lcpl_id) < 0) TEST_ERROR + if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR + if(H5Pset_char_encoding(lcpl_id, H5T_CSET_ASCII) < 0) TEST_ERROR - if(H5Lcreate_hard(file_id, "/dataset2", file_id, "/dataset2_link", lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_hard(file_id, "/dataset2", file_id, "/dataset2_link", lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR /* Check that its character encoding is ASCII */ - if(H5Lget_linkinfo(file_id, "/dataset2_link", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5T_CSET_ASCII) TEST_ERROR; + if(H5Lget_linkinfo(file_id, "/dataset2_link", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5T_CSET_ASCII) TEST_ERROR /* Check that the first link's encoding hasn't changed */ - if(H5Lget_linkinfo(file_id, "/dataset2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR; - + if(H5Lget_linkinfo(file_id, "/dataset2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR -/* JAMES: these tests don't work because the character set encoding is - * not stored in the symbol table. - * Quincey says this will be fixed someday. - */ -#ifdef NOTYET /* Make sure that LCPLs work properly for other API calls: */ /* H5Lcreate_soft */ if(H5Pset_char_encoding(lcpl_id, H5T_CSET_UTF8) < 0) TEST_ERROR @@ -900,25 +914,24 @@ test_lcpl(hid_t fapl) /* H5Lmove */ if(H5Pset_char_encoding(lcpl_id, H5T_CSET_ASCII) < 0) TEST_ERROR if(H5Lmove(file_id, "slink_to_dset2", file_id, "moved_slink", lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR - if(H5Lget_linkinfo(file_id, "moved_slink", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5T_CSET_ASCII) TEST_ERROR; + if(H5Lget_linkinfo(file_id, "moved_slink", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5T_CSET_ASCII) TEST_ERROR /* H5Lcopy */ - if(H5Pset_char_encoding(lcpl_id, H5T_CSET_UTF8) < 0) TEST_ERROR; + if(H5Pset_char_encoding(lcpl_id, H5T_CSET_UTF8) < 0) TEST_ERROR if(H5Lcopy(file_id, "moved_slink", file_id, "copied_slink", lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR - if(H5Lget_linkinfo(file_id, "copied_slink", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR; + if(H5Lget_linkinfo(file_id, "copied_slink", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR /* H5Lcreate_external */ if(H5Lcreate_external("filename", "path", file_id, "extlink", lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR - if(H5Lget_linkinfo(file_id, "extlink", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR; -#endif /* NOTYET */ + if(H5Lget_linkinfo(file_id, "extlink", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR /* Close open IDs */ - if(H5Pclose(lcpl_id)<0) TEST_ERROR; - if(H5Sclose(space_id)<0) TEST_ERROR; - if(H5Fclose(file_id)<0) TEST_ERROR; + if(H5Pclose(lcpl_id) < 0) TEST_ERROR + if(H5Sclose(space_id) < 0) TEST_ERROR + if(H5Fclose(file_id) < 0) TEST_ERROR PASSED(); return 0; @@ -934,7 +947,6 @@ error: } H5E_END_TRY; return 1; } /* end test_lcpl() */ -#endif /* H5_GROUP_REVISION */ /*------------------------------------------------------------------------- @@ -954,103 +966,106 @@ error: *------------------------------------------------------------------------- */ static int -test_move(hid_t fapl) +test_move(hid_t fapl, hbool_t new_format) { hid_t file_a, file_b=(-1); hid_t grp_1=(-1), grp_2=(-1), grp_move=(-1), moved_grp=(-1); char filename[1024]; - TESTING("H5Lmove"); + if(new_format) + TESTING("H5Lmove (w/new group format)") + else + TESTING("H5Lmove") /* Create two new files */ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if ((file_a=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) - TEST_ERROR; + if ((file_a=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) + TEST_ERROR h5_fixname(FILENAME[1], fapl, filename, sizeof filename); - if ((file_b=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) - TEST_ERROR; + if ((file_b=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) + TEST_ERROR /* Create groups in first file */ - if((grp_1=H5Gcreate(file_a, "group1", 0))<0) TEST_ERROR; - if((grp_2=H5Gcreate(file_a, "group2", 0))<0) TEST_ERROR; - if((grp_move=H5Gcreate(grp_1, "group_move", 0))<0) TEST_ERROR; + if((grp_1=H5Gcreate(file_a, "group1", (size_t)0)) < 0) TEST_ERROR + if((grp_2=H5Gcreate(file_a, "group2", (size_t)0)) < 0) TEST_ERROR + if((grp_move=H5Gcreate(grp_1, "group_move", (size_t)0)) < 0) TEST_ERROR /* Create hard and soft links. */ - if(H5Lcreate_hard(grp_1, "group_move", H5L_SAME_LOC, "hard", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; - if(H5Lcreate_soft("/group1/group_move", grp_2, "soft", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lcreate_hard(grp_1, "group_move", H5L_SAME_LOC, "hard", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR + if(H5Lcreate_soft("/group1/group_move", grp_2, "soft", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Move a group within the file. Both of source and destination use * H5L_SAME_LOC. Should fail. */ H5E_BEGIN_TRY { if(H5Lmove(H5L_SAME_LOC, "group_move", H5L_SAME_LOC, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) - !=FAIL) TEST_ERROR; + !=FAIL) TEST_ERROR } H5E_END_TRY; /* Move a group across files. Should fail. */ H5E_BEGIN_TRY { if(H5Lmove(grp_1, "group_move", file_b, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) - !=FAIL) TEST_ERROR; + !=FAIL) TEST_ERROR } H5E_END_TRY; /* Move a group across groups in the same file while renaming it. */ - if(H5Lmove(grp_1, "group_move", grp_2, "group_new_name", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lmove(grp_1, "group_move", grp_2, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Open the group just moved to the new location. */ - if((moved_grp = H5Gopen(grp_2, "group_new_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_2, "group_new_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Verify that the group is no longer in the original location */ H5E_BEGIN_TRY { if((moved_grp = H5Gopen(grp_1, "group_move"))>=0) - TEST_ERROR; + TEST_ERROR } H5E_END_TRY; /* Use H5Lmove to rename a group without moving it. */ - if(H5Lmove(grp_2, "group_new_name", H5L_SAME_LOC, "group_newer_name", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lmove(grp_2, "group_new_name", H5L_SAME_LOC, "group_newer_name", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Open the group. */ - if((moved_grp = H5Gopen(grp_2, "group_newer_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_2, "group_newer_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Use H5Lmove to move a group without renaming it. */ - if(H5Lmove(grp_2, "group_newer_name", grp_1, "group_newer_name", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lmove(grp_2, "group_newer_name", grp_1, "group_newer_name", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Open the group . */ - if((moved_grp = H5Gopen(grp_1, "group_newer_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_1, "group_newer_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Move the group while giving long paths. */ - if(H5Lmove(file_a, "/group1/group_newer_name", grp_2, "/group2/group_newest_name", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lmove(file_a, "/group1/group_newer_name", grp_2, "/group2/group_newest_name", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Open the group just moved to the new location. */ - if((moved_grp = H5Gopen(grp_2, "group_newest_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_2, "group_newest_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Verify that the group is in no previous locations */ H5E_BEGIN_TRY { if((moved_grp = H5Gopen(grp_1, "group_newer_name"))>=0) - TEST_ERROR; + TEST_ERROR if((moved_grp = H5Gopen(grp_2, "group_newer_name"))>=0) - TEST_ERROR; + TEST_ERROR if((moved_grp = H5Gopen(grp_2, "group_new_name"))>=0) - TEST_ERROR; + TEST_ERROR if((moved_grp = H5Gopen(grp_1, "group_copy"))>=0) - TEST_ERROR; + TEST_ERROR } H5E_END_TRY; H5Gclose(grp_1); @@ -1093,119 +1108,122 @@ test_move(hid_t fapl) *------------------------------------------------------------------------- */ static int -test_copy(hid_t fapl) +test_copy(hid_t fapl, hbool_t new_format) { hid_t file_a, file_b=(-1); hid_t grp_1=(-1), grp_2=(-1), grp_move=(-1), moved_grp=(-1); char filename[1024]; - TESTING("H5Lcopy"); + if(new_format) + TESTING("H5Lcopy (w/new group format)") + else + TESTING("H5Lcopy") /* Create two new files */ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if ((file_a=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) - TEST_ERROR; + if ((file_a=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) + TEST_ERROR h5_fixname(FILENAME[1], fapl, filename, sizeof filename); - if ((file_b=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) - TEST_ERROR; + if ((file_b=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) + TEST_ERROR /* Create groups in first file */ - if((grp_1=H5Gcreate(file_a, "group1", 0))<0) TEST_ERROR; - if((grp_2=H5Gcreate(file_a, "group2", 0))<0) TEST_ERROR; - if((grp_move=H5Gcreate(grp_1, "group_copy", 0))<0) TEST_ERROR; + if((grp_1=H5Gcreate(file_a, "group1", (size_t)0)) < 0) TEST_ERROR + if((grp_2=H5Gcreate(file_a, "group2", (size_t)0)) < 0) TEST_ERROR + if((grp_move=H5Gcreate(grp_1, "group_copy", (size_t)0)) < 0) TEST_ERROR /* Create hard and soft links. */ - if(H5Lcreate_hard(grp_1, "group_copy", H5L_SAME_LOC, "hard", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; - if(H5Lcreate_soft("/group1/group_copy", grp_2, "soft", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lcreate_hard(grp_1, "group_copy", H5L_SAME_LOC, "hard", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR + if(H5Lcreate_soft("/group1/group_copy", grp_2, "soft", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Copy a group within the file. Both of source and destination use * H5L_SAME_LOC. Should fail. */ H5E_BEGIN_TRY { if(H5Lcopy(H5L_SAME_LOC, "group_copy", H5L_SAME_LOC, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) - !=FAIL) TEST_ERROR; + !=FAIL) TEST_ERROR } H5E_END_TRY; /* Copy a group across files. Should fail. */ H5E_BEGIN_TRY { if(H5Lcopy(grp_1, "group_copy", file_b, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) - !=FAIL) TEST_ERROR; + !=FAIL) TEST_ERROR } H5E_END_TRY; /* Move a group across groups in the same file while renaming it. */ - if(H5Lcopy(grp_1, "group_copy", grp_2, "group_new_name", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lcopy(grp_1, "group_copy", grp_2, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Open the group just moved to the new location. */ - if((moved_grp = H5Gopen(grp_2, "group_new_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_2, "group_new_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Verify that the group is also in the original location */ - if((moved_grp = H5Gopen(grp_1, "group_copy"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_1, "group_copy")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Use H5Lcopy to create a group in the same location with a different name. */ - if(H5Lcopy(grp_2, "group_new_name", H5L_SAME_LOC, "group_newer_name", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lcopy(grp_2, "group_new_name", H5L_SAME_LOC, "group_newer_name", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Open the group. */ - if((moved_grp = H5Gopen(grp_2, "group_newer_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_2, "group_newer_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Verify that the group is also in the original location */ - if((moved_grp = H5Gopen(grp_2, "group_new_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_2, "group_new_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Use H5Lcopy to copy to a different location with the same name. */ - if(H5Lcopy(grp_2, "group_newer_name", grp_1, "group_newer_name", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lcopy(grp_2, "group_newer_name", grp_1, "group_newer_name", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Open the group . */ - if((moved_grp = H5Gopen(grp_1, "group_newer_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_1, "group_newer_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Verify that the group is still in the previous location */ - if((moved_grp = H5Gopen(grp_2, "group_new_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_2, "group_new_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Copy the group while giving long paths. */ - if(H5Lcopy(file_a, "/group1/group_newer_name", grp_2, "/group2/group_newest_name", H5P_DEFAULT, H5P_DEFAULT)<0) - TEST_ERROR; + if(H5Lcopy(file_a, "/group1/group_newer_name", grp_2, "/group2/group_newest_name", H5P_DEFAULT, H5P_DEFAULT) < 0) + TEST_ERROR /* Open the group just moved to the new location. */ - if((moved_grp = H5Gopen(grp_2, "group_newest_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_2, "group_newest_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR /* Verify that the group is still in all previous original locations */ - if((moved_grp = H5Gopen(grp_1, "group_newer_name"))<0) - TEST_ERROR; + if((moved_grp = H5Gopen(grp_1, "group_newer_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; - if((moved_grp = H5Gopen(grp_2, "group_newer_name"))<0) - TEST_ERROR; + TEST_ERROR + if((moved_grp = H5Gopen(grp_2, "group_newer_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; - if((moved_grp = H5Gopen(grp_2, "group_new_name"))<0) - TEST_ERROR; + TEST_ERROR + if((moved_grp = H5Gopen(grp_2, "group_new_name")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; - if((moved_grp = H5Gopen(grp_1, "group_copy"))<0) - TEST_ERROR; + TEST_ERROR + if((moved_grp = H5Gopen(grp_1, "group_copy")) < 0) + TEST_ERROR if( H5Gclose(moved_grp) < 0) - TEST_ERROR; + TEST_ERROR H5Gclose(grp_1); H5Gclose(grp_2); @@ -1228,8 +1246,8 @@ test_copy(hid_t fapl) } H5E_END_TRY; return 1; } + -#ifdef H5_GROUP_REVISION /*------------------------------------------------------------------------- * Function: test_move_preserves * @@ -1247,117 +1265,156 @@ test_copy(hid_t fapl) *------------------------------------------------------------------------- */ static int -test_move_preserves(hid_t fapl_id) +test_move_preserves(hid_t fapl_id, hbool_t new_format) { hid_t file_id=-1; hid_t group_id=-1; + hid_t fcpl_id=-1; /* Group creation property list ID */ hid_t lcpl_id=-1; hid_t lcpl2_id=-1; H5G_stat_t statbuf; H5L_linkinfo_t linfo; - time_t old_create_time; + H5T_cset_t old_cset; + int64_t old_corder; /* Creation order value of link */ time_t old_modification_time; time_t curr_time; + hbool_t track_corder; /* Status of creation order tracking for GCPL */ char filename[1024]; - TESTING("moving and copying links preserves their properties"); + if(new_format) + TESTING("moving and copying links preserves their properties (w/new group format)") + else + TESTING("moving and copying links preserves their properties") + + /* Create a file creation property list with creation order stored for links + * in the root group + */ + if((fcpl_id = H5Pcreate(H5P_FILE_CREATE)) < 0) TEST_ERROR + if(H5Pget_creation_order_tracking(fcpl_id, &track_corder) < 0) TEST_ERROR + if(track_corder != FALSE) TEST_ERROR + if(H5Pset_creation_order_tracking(fcpl_id, TRUE) < 0) TEST_ERROR + if(H5Pget_creation_order_tracking(fcpl_id, &track_corder) < 0) TEST_ERROR + if(track_corder != TRUE) TEST_ERROR /* Create file */ + /* (with creation order tracking for the root group) */ h5_fixname(FILENAME[0], fapl_id, filename, sizeof filename); - - if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id))<0) TEST_ERROR; + if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl_id, fapl_id)) < 0) TEST_ERROR /* Create a link creation property list with the UTF-8 character encoding */ - if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) <0) TEST_ERROR; - if(H5Pset_char_encoding(lcpl_id, H5T_CSET_UTF8) < 0) TEST_ERROR; + if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR + if(H5Pset_char_encoding(lcpl_id, H5T_CSET_UTF8) < 0) TEST_ERROR + /* Create a group with that lcpl */ - if((group_id = H5Gcreate_expand(file_id, H5P_DEFAULT, H5P_DEFAULT)) <0) TEST_ERROR; - if(H5Llink(file_id, "group", group_id, lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Gclose(group_id) < 0) TEST_ERROR; - - /* Get the group's link's creation time */ - if(H5Lget_linkinfo(file_id, "group", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Gget_objinfo(file_id, "group", TRUE, &statbuf) <0) TEST_ERROR; - old_create_time = linfo.ctime; + if((group_id = H5Gcreate_expand(file_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR + if(H5Llink(file_id, "group", group_id, lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gclose(group_id) < 0) TEST_ERROR + + /* Get the group's link's information */ + if(H5Lget_linkinfo(file_id, "group", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gget_objinfo(file_id, "group", TRUE, &statbuf) < 0) TEST_ERROR + old_cset = linfo.cset; + if(old_cset != H5T_CSET_UTF8) TEST_ERROR + if(linfo.corder_valid != TRUE) TEST_ERROR + old_corder = linfo.corder; + if(old_corder != 0) TEST_ERROR old_modification_time = statbuf.mtime; - /* If this test happens too quickly, the creation times will all be the same. Make sure the time changes. */ - curr_time=time(NULL); - while(time(NULL) <= curr_time ); + /* If this test happens too quickly, the times will all be the same. Make sure the time changes. */ + curr_time = HDtime(NULL); + while(HDtime(NULL) <= curr_time) + ; /* Close the file and reopen it */ - if(H5Fclose(file_id)<0) TEST_ERROR; - if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id)) <0) TEST_ERROR; - - /* Get the group's link's creation time. The times should be unchanged */ - if(H5Lget_linkinfo(file_id, "group", &linfo, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Gget_objinfo(file_id, "group", TRUE, &statbuf) <0) TEST_ERROR; - if(old_modification_time != statbuf.mtime) TEST_ERROR; - if(old_create_time != linfo.ctime) TEST_ERROR; - - /* Create a new link to the group. It should have a different creation time but the same modification time */ - if(H5Lcreate_hard(file_id, "group", file_id, "group2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Gget_objinfo(file_id, "group2", TRUE, &statbuf) <0) TEST_ERROR; - if(old_modification_time != statbuf.mtime) TEST_ERROR; - if(H5Lget_linkinfo(file_id, "group2", &linfo, H5P_DEFAULT) <0) TEST_ERROR; - if(old_create_time == linfo.ctime) TEST_ERROR; - - /* Copy the first link to a UTF-8 name. Its creation time and modification time should not change. */ - if(H5Lcopy(file_id, "group", file_id, "group_copied", lcpl_id, H5P_DEFAULT) <0) TEST_ERROR; - if(H5Gget_objinfo(file_id, "group_copied", TRUE, &statbuf) <0) TEST_ERROR; - if(old_modification_time != statbuf.mtime) TEST_ERROR; - if(H5Lget_linkinfo(file_id, "group_copied", &linfo, H5P_DEFAULT) <0) TEST_ERROR; - if(old_create_time != linfo.ctime) TEST_ERROR; + if(H5Fclose(file_id) < 0) TEST_ERROR + if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id)) < 0) TEST_ERROR + + /* Get the link's character set & modification time . They should be unchanged */ + if(H5Lget_linkinfo(file_id, "group", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gget_objinfo(file_id, "group", TRUE, &statbuf) < 0) TEST_ERROR + if(old_modification_time != statbuf.mtime) TEST_ERROR + if(old_cset != linfo.cset) TEST_ERROR + if(linfo.corder_valid != TRUE) TEST_ERROR + if(old_corder != linfo.corder) TEST_ERROR + + /* Create a new link to the group. It should have a different creation order value but the same modification time */ + if(H5Lcreate_hard(file_id, "group", file_id, "group2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gget_objinfo(file_id, "group2", TRUE, &statbuf) < 0) TEST_ERROR + if(old_modification_time != statbuf.mtime) TEST_ERROR + if(H5Lget_linkinfo(file_id, "group2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(old_corder == linfo.corder) TEST_ERROR + if(linfo.corder_valid != TRUE) TEST_ERROR + if(linfo.corder != 1) TEST_ERROR + if(linfo.cset != H5T_CSET_ASCII) TEST_ERROR + + /* Copy the first link to a UTF-8 name. + * Its creation order value should be different, but modification time + * should not change. + */ + if(H5Lcopy(file_id, "group", file_id, "group_copied", lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gget_objinfo(file_id, "group_copied", TRUE, &statbuf) < 0) TEST_ERROR + if(old_modification_time != statbuf.mtime) TEST_ERROR + if(H5Lget_linkinfo(file_id, "group_copied", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.corder_valid != TRUE) TEST_ERROR + if(linfo.corder != 2) TEST_ERROR /* Check that its character encoding is UTF-8 */ - if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR; + if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR /* Move the link with the default property list. */ - if(H5Lmove(file_id, "group_copied", file_id, "group_copied2", H5P_DEFAULT, H5P_DEFAULT) <0) TEST_ERROR; - if(H5Gget_objinfo(file_id, "group_copied2", TRUE, &statbuf) <0) TEST_ERROR; - if(old_modification_time != statbuf.mtime) TEST_ERROR; - if(H5Lget_linkinfo(file_id, "group_copied2", &linfo, H5P_DEFAULT) <0) TEST_ERROR; - if(old_create_time != linfo.ctime) TEST_ERROR; + if(H5Lmove(file_id, "group_copied", file_id, "group_copied2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gget_objinfo(file_id, "group_copied2", TRUE, &statbuf) < 0) TEST_ERROR + if(old_modification_time != statbuf.mtime) TEST_ERROR + if(H5Lget_linkinfo(file_id, "group_copied2", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.corder_valid != TRUE) TEST_ERROR + if(linfo.corder != 3) TEST_ERROR /* Check that its character encoding is not UTF-8 */ - if(linfo.cset == H5T_CSET_UTF8) TEST_ERROR; + if(linfo.cset == H5T_CSET_UTF8) TEST_ERROR /* Check that the original link is unchanged */ - if(H5Gget_objinfo(file_id, "group", TRUE, &statbuf) <0) TEST_ERROR; - if(old_modification_time != statbuf.mtime) TEST_ERROR; - if(H5Lget_linkinfo(file_id, "group", &linfo, H5P_DEFAULT) <0) TEST_ERROR; - if(old_create_time != linfo.ctime) TEST_ERROR; - if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR; - - /* Move the first link to a UTF-8 name. Its creation time and modification time should not change. */ - if(H5Lmove(file_id, "group", file_id, "group_moved", lcpl_id, H5P_DEFAULT) <0) TEST_ERROR; - if(H5Gget_objinfo(file_id, "group_moved", TRUE, &statbuf) <0) TEST_ERROR; - if(old_modification_time != statbuf.mtime) TEST_ERROR; - if(H5Lget_linkinfo(file_id, "group_moved", &linfo, H5P_DEFAULT) <0) TEST_ERROR; - if(old_create_time != linfo.ctime) TEST_ERROR; + if(H5Gget_objinfo(file_id, "group", TRUE, &statbuf) < 0) TEST_ERROR + if(old_modification_time != statbuf.mtime) TEST_ERROR + if(H5Lget_linkinfo(file_id, "group", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.corder_valid != TRUE) TEST_ERROR + if(old_corder != linfo.corder) TEST_ERROR + if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR + + /* Move the first link to a UTF-8 name. + * Its creation order value will change, but modification time should not + * change. */ + if(H5Lmove(file_id, "group", file_id, "group_moved", lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gget_objinfo(file_id, "group_moved", TRUE, &statbuf) < 0) TEST_ERROR + if(old_modification_time != statbuf.mtime) TEST_ERROR + if(H5Lget_linkinfo(file_id, "group_moved", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.corder_valid != TRUE) TEST_ERROR + if(linfo.corder != 4) TEST_ERROR /* Check that its character encoding is UTF-8 */ - if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR; + if(linfo.cset != H5T_CSET_UTF8) TEST_ERROR /* Move the link again using the default property list. */ - if(H5Lmove(file_id, "group_moved", file_id, "group_moved_again", H5P_DEFAULT, H5P_DEFAULT) <0) TEST_ERROR; - if(H5Gget_objinfo(file_id, "group_moved_again", TRUE, &statbuf) <0) TEST_ERROR; - if(old_modification_time != statbuf.mtime) TEST_ERROR; - if(H5Lget_linkinfo(file_id, "group_moved_again", &linfo, H5P_DEFAULT) <0) TEST_ERROR; - if(old_create_time != linfo.ctime) TEST_ERROR; + if(H5Lmove(file_id, "group_moved", file_id, "group_moved_again", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gget_objinfo(file_id, "group_moved_again", TRUE, &statbuf) < 0) TEST_ERROR + if(old_modification_time != statbuf.mtime) TEST_ERROR + if(H5Lget_linkinfo(file_id, "group_moved_again", &linfo, H5P_DEFAULT) < 0) TEST_ERROR + if(linfo.corder_valid != TRUE) TEST_ERROR + if(linfo.corder != 5) TEST_ERROR /* Check that its character encoding is not UTF-8 */ - if(linfo.cset == H5T_CSET_UTF8) TEST_ERROR; + if(linfo.cset == H5T_CSET_UTF8) TEST_ERROR /* Close open IDs */ - if(H5Pclose(lcpl_id) < 0) TEST_ERROR; - if(H5Fclose(file_id)<0) TEST_ERROR; + if(H5Pclose(fcpl_id) < 0) TEST_ERROR + if(H5Pclose(lcpl_id) < 0) TEST_ERROR + if(H5Fclose(file_id) < 0) TEST_ERROR PASSED(); return 0; error: H5E_BEGIN_TRY { + H5Pclose(fcpl_id); H5Pclose(lcpl_id); H5Pclose(lcpl2_id); H5Gclose(group_id); @@ -1365,7 +1422,6 @@ error: } H5E_END_TRY; return 1; } /* end test_move_preserves() */ -#endif /* H5_GROUP_REVISION */ /*------------------------------------------------------------------------- @@ -1384,7 +1440,7 @@ error: *------------------------------------------------------------------------- */ static int -test_compat(hid_t fapl) +test_compat(hid_t fapl, hbool_t new_format) { hid_t file_id=-1; hid_t group1_id=-1; @@ -1393,76 +1449,79 @@ test_compat(hid_t fapl) char filename[1024]; char linkval[1024]; - TESTING("backwards compatibility"); + if(new_format) + TESTING("backwards compatibility (w/new group format)") + else + TESTING("backwards compatibility") /* Create file */ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create two groups in the file */ - if((group1_id = H5Gcreate(file_id, "group1", 1)) < 0) TEST_ERROR; - if((group2_id = H5Gcreate(file_id, "group2", 1)) < 0) TEST_ERROR; + if((group1_id = H5Gcreate(file_id, "group1", (size_t)1)) < 0) TEST_ERROR + if((group2_id = H5Gcreate(file_id, "group2", (size_t)1)) < 0) TEST_ERROR /* Create links using H5Glink and H5Glink2 */ - if(H5Glink(file_id, H5G_LINK_HARD, "group2", "group1/link_to_group2") < 0) TEST_ERROR; - if(H5Glink2(file_id, "group1", H5G_LINK_HARD, group2_id, "link_to_group1") < 0) TEST_ERROR; - if(H5Glink2(file_id, "link_to_group1", H5G_LINK_SOFT, H5G_SAME_LOC, "group2/soft_link_to_group1") < 0) TEST_ERROR; + if(H5Glink(file_id, H5G_LINK_HARD, "group2", "group1/link_to_group2") < 0) TEST_ERROR + if(H5Glink2(file_id, "group1", H5G_LINK_HARD, group2_id, "link_to_group1") < 0) TEST_ERROR + if(H5Glink2(file_id, "link_to_group1", H5G_LINK_SOFT, H5G_SAME_LOC, "group2/soft_link_to_group1") < 0) TEST_ERROR /* Test that H5Glink created hard links properly */ - if(H5Gget_objinfo(file_id, "/group2", TRUE, &sb_hard1)<0) TEST_ERROR; - if(H5Gget_objinfo(file_id, "/group1/link_to_group2", TRUE, &sb_hard2)<0) TEST_ERROR; + if(H5Gget_objinfo(file_id, "/group2", TRUE, &sb_hard1) < 0) TEST_ERROR + if(H5Gget_objinfo(file_id, "/group1/link_to_group2", TRUE, &sb_hard2) < 0) TEST_ERROR if (HDmemcmp(&sb_hard1.objno, sb_hard2.objno, sizeof(sb_hard1.objno))) { H5_FAILED(); puts(" Hard link test failed. Link seems not to point to the "); puts(" expected file location."); - TEST_ERROR; + TEST_ERROR } /* Test for the other hard link created */ - if(H5Gget_objinfo(file_id, "/group1", TRUE, &sb_hard1)<0) TEST_ERROR; - if(H5Gget_objinfo(file_id, "/group2/link_to_group1", TRUE, &sb_hard2)<0) TEST_ERROR; + if(H5Gget_objinfo(file_id, "/group1", TRUE, &sb_hard1) < 0) TEST_ERROR + if(H5Gget_objinfo(file_id, "/group2/link_to_group1", TRUE, &sb_hard2) < 0) TEST_ERROR if (HDmemcmp(&sb_hard1.objno, sb_hard2.objno, sizeof(sb_hard1.objno))) { H5_FAILED(); puts(" Hard link test failed. Link seems not to point to the "); puts(" expected file location."); - TEST_ERROR; + TEST_ERROR } /* Test the soft link */ - if(H5Gget_objinfo(file_id, "/group2/soft_link_to_group1", FALSE, &sb_soft1)<0) TEST_ERROR; - if(sb_soft1.type != H5G_LINK) TEST_ERROR; - if(sb_soft1.linklen != HDstrlen("link_to_group1") + 1) TEST_ERROR; + if(H5Gget_objinfo(file_id, "/group2/soft_link_to_group1", FALSE, &sb_soft1) < 0) TEST_ERROR + if(sb_soft1.type != H5G_LINK) TEST_ERROR + if(sb_soft1.linklen != HDstrlen("link_to_group1") + 1) TEST_ERROR - if(H5Gget_linkval(group2_id, "soft_link_to_group1", sb_soft1.linklen, linkval) < 0) TEST_ERROR; - if(HDstrcmp("link_to_group1", linkval)) TEST_ERROR; + if(H5Gget_linkval(group2_id, "soft_link_to_group1", sb_soft1.linklen, linkval) < 0) TEST_ERROR + if(HDstrcmp("link_to_group1", linkval)) TEST_ERROR /* Test H5Gmove and H5Gmove2 */ - if(H5Gmove(file_id, "group1", "moved_group1") < 0) TEST_ERROR; - if(H5Gmove2(file_id, "group2", group1_id, "moved_group2") < 0) TEST_ERROR; + if(H5Gmove(file_id, "group1", "moved_group1") < 0) TEST_ERROR + if(H5Gmove2(file_id, "group2", group1_id, "moved_group2") < 0) TEST_ERROR /* Ensure that both groups can be opened */ - if(H5Gclose(group2_id)<0) TEST_ERROR; - if(H5Gclose(group1_id)<0) TEST_ERROR; + if(H5Gclose(group2_id) < 0) TEST_ERROR + if(H5Gclose(group1_id) < 0) TEST_ERROR - if((group1_id = H5Gopen(file_id, "moved_group1")) < 0) TEST_ERROR; - if((group2_id = H5Gopen(file_id, "moved_group1/moved_group2")) < 0) TEST_ERROR; + if((group1_id = H5Gopen(file_id, "moved_group1")) < 0) TEST_ERROR + if((group2_id = H5Gopen(file_id, "moved_group1/moved_group2")) < 0) TEST_ERROR /* Close open IDs */ - if(H5Gclose(group2_id)<0) TEST_ERROR; - if(H5Gclose(group1_id)<0) TEST_ERROR; + if(H5Gclose(group2_id) < 0) TEST_ERROR + if(H5Gclose(group1_id) < 0) TEST_ERROR /* Test H5Gunlink */ - if(H5Gunlink(file_id, "moved_group1/moved_group2") < 0) TEST_ERROR; + if(H5Gunlink(file_id, "moved_group1/moved_group2") < 0) TEST_ERROR H5E_BEGIN_TRY { - if(H5Gopen(file_id, "moved_group1/moved_group2") >=0) TEST_ERROR; + if(H5Gopen(file_id, "moved_group1/moved_group2") >=0) TEST_ERROR } H5E_END_TRY; - if(H5Fclose(file_id)<0) TEST_ERROR; + if(H5Fclose(file_id) < 0) TEST_ERROR PASSED(); return 0; @@ -1494,7 +1553,7 @@ error: *------------------------------------------------------------------------- */ static int -external_link_root(hid_t fapl) +external_link_root(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -1506,29 +1565,32 @@ external_link_root(hid_t fapl) char *file; /* File from external link */ char *path; /* Path from external link */ - TESTING("external link to root"); + if(new_format) + TESTING("external link to root (w/new group format)") + else + TESTING("external link to root") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); h5_fixname(FILENAME[4], fapl, filename2, sizeof filename2); /* Create file to point to */ - if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Check that external links are registered with the library */ - if(H5Lis_registered(H5L_LINK_EXTERNAL) != TRUE) TEST_ERROR + if(H5Lis_registered(H5L_TYPE_EXTERNAL) != TRUE) TEST_ERROR /* Create file with link to first file */ - if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external link to object in first file */ - if(H5Lcreate_external(filename1, "/", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename1, "/", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Check information for external link */ - if (H5Gget_objinfo(fid, "ext_link", FALSE, &sb)<0) goto error; + if (H5Gget_objinfo(fid, "ext_link", FALSE, &sb) < 0) goto error; if (H5G_UDLINK!=sb.type) { H5_FAILED(); puts(" Unexpected object type - should have been an external link"); @@ -1550,12 +1612,12 @@ external_link_root(hid_t fapl) } /* Close and re-open file to ensure that data is written to disk */ - if(H5Fclose(fid) < 0) TEST_ERROR; - if((fid = H5Fopen(filename2, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR + if((fid = H5Fopen(filename2, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) TEST_ERROR /* Open object through external link */ - if((gid = H5Gopen(fid, "ext_link")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "ext_link")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -1568,7 +1630,7 @@ external_link_root(hid_t fapl) if(H5Gclose(gid2) < 0) TEST_ERROR /* Close external object (lets first file close) */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Create a new object using H5Gcreate through the external link * directly @@ -1576,15 +1638,15 @@ external_link_root(hid_t fapl) if((gid = H5Gcreate(fid, "ext_link/newer_group", (size_t)0)) < 0) TEST_ERROR /* Close file and group */ - if(H5Gclose(gid) < 0) TEST_ERROR; - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR + if(H5Fclose(fid) < 0) TEST_ERROR /* Open first file again with read-only access and check on objects created */ if((fid = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) TEST_ERROR /* Open objects created through external link */ - if((gid = H5Gopen(fid, "new_group")) < 0) TEST_ERROR; - if((gid2 = H5Gopen(fid, "newer_group")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "new_group")) < 0) TEST_ERROR + if((gid2 = H5Gopen(fid, "newer_group")) < 0) TEST_ERROR /* Check names */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -1597,7 +1659,7 @@ external_link_root(hid_t fapl) if(H5Gclose(gid2) < 0) TEST_ERROR /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Verify that new objects can't be created through a read-only external * link. @@ -1610,7 +1672,7 @@ external_link_root(hid_t fapl) if(gid >= 0) TEST_ERROR /* Close second file again */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -1643,7 +1705,7 @@ external_link_root(hid_t fapl) *------------------------------------------------------------------------- */ static int -external_link_path(hid_t fapl) +external_link_path(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -1652,14 +1714,17 @@ external_link_path(hid_t fapl) char filename1[NAME_BUF_SIZE]; char filename2[NAME_BUF_SIZE]; - TESTING("external link to object on path"); + if(new_format) + TESTING("external link to object on path (w/new group format)") + else + TESTING("external link to object on path") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); h5_fixname(FILENAME[4], fapl, filename2, sizeof filename2); /* Create file to point to */ - if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create object down a path */ if((gid = H5Gcreate(fid, "A", (size_t)0)) < 0) TEST_ERROR @@ -1672,17 +1737,17 @@ external_link_path(hid_t fapl) if(H5Gclose(gid) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Create file with link to first file */ - if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external link to object in first file */ - if(H5Lcreate_external(filename1, "/A/B/C", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename1, "/A/B/C", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Open object through external link */ - if((gid = H5Gopen(fid, "ext_link")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "ext_link")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -1695,27 +1760,27 @@ external_link_path(hid_t fapl) if(H5Gclose(gid2) < 0) TEST_ERROR /* Close external object (lets first file close) */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Close second file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Open first file again and check on object created */ if((fid = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) TEST_ERROR /* Open object created through external link */ - if((gid = H5Gopen(fid, "/A/B/C/new_group")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "/A/B/C/new_group")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR if(HDstrcmp(objname, "/A/B/C/new_group")) TEST_ERROR /* Close opened object */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); @@ -1749,7 +1814,7 @@ external_link_path(hid_t fapl) *------------------------------------------------------------------------- */ static int -external_link_mult(hid_t fapl) +external_link_mult(hid_t fapl, hbool_t new_format) { hid_t fid = (-1), fid2 = (-1); /* File IDs */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -1760,7 +1825,10 @@ external_link_mult(hid_t fapl) filename3[NAME_BUF_SIZE], filename4[NAME_BUF_SIZE]; /* Names of files to externally link across */ - TESTING("external links across multiple files"); + if(new_format) + TESTING("external links across multiple files (w/new group format)") + else + TESTING("external links across multiple files") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); @@ -1769,7 +1837,7 @@ external_link_mult(hid_t fapl) h5_fixname(FILENAME[6], fapl, filename4, sizeof filename4); /* Create first file to point to */ - if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create object down a path */ if((gid = H5Gcreate(fid, "A", (size_t)0)) < 0) TEST_ERROR @@ -1782,10 +1850,10 @@ external_link_mult(hid_t fapl) if(H5Gclose(gid) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Create second file to point to */ - if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external link down a path */ if((gid = H5Gcreate(fid, "D", (size_t)0)) < 0) TEST_ERROR @@ -1794,15 +1862,15 @@ external_link_mult(hid_t fapl) if((gid = H5Gcreate(fid, "D/E", (size_t)0)) < 0) TEST_ERROR /* Create external link to object in first file */ - if(H5Lcreate_external(filename1, "/A/B/C", gid, "F", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename1, "/A/B/C", gid, "F", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Create third file to point to */ - if((fid=H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external link down a path */ if((gid = H5Gcreate(fid, "G", (size_t)0)) < 0) TEST_ERROR @@ -1811,22 +1879,22 @@ external_link_mult(hid_t fapl) if((gid = H5Gcreate(fid, "G/H", (size_t)0)) < 0) TEST_ERROR /* Create external link to object in second file */ - if(H5Lcreate_external(filename2, "/D/E/F", gid, "I", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename2, "/D/E/F", gid, "I", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Create file with link to third file */ - if((fid=H5Fcreate(filename4, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename4, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external link to object in first file */ - if(H5Lcreate_external(filename3, "/G/H/I", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename3, "/G/H/I", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Open object through external link */ - if((gid = H5Gopen(fid, "ext_link")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "ext_link")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -1839,17 +1907,17 @@ external_link_mult(hid_t fapl) if(H5Gclose(gid2) < 0) TEST_ERROR /* Close external object (lets first file close) */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Close second file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Open first file again and check on object created */ if((fid = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) TEST_ERROR /* Open object created through external link */ - if((gid = H5Gopen(fid, "/A/B/C/new_group")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "/A/B/C/new_group")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -1859,26 +1927,26 @@ external_link_mult(hid_t fapl) if(H5Gclose(gid) < 0) TEST_ERROR /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR + if(H5Fclose(fid) < 0) TEST_ERROR /* Open an object through external links */ - if((fid = H5Fopen(filename4, H5F_ACC_RDONLY, H5P_DEFAULT)) <0) TEST_ERROR + if((fid = H5Fopen(filename4, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) TEST_ERROR if((gid = H5Gopen(fid, "ext_link")) < 0) TEST_ERROR /* The intermediate files should not stay open. Replace one of them with a new file. */ - if((fid2=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; - if(H5Fclose(fid2)<0) TEST_ERROR + if((fid2=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR + if(H5Fclose(fid2) < 0) TEST_ERROR /* Open the other with write access and delete the external link in it */ - if((fid2=H5Fopen(filename3, H5F_ACC_RDWR, fapl))<0) TEST_ERROR + if((fid2=H5Fopen(filename3, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR if(H5Lunlink(fid2, "G/H/I", H5P_DEFAULT) < 0) TEST_ERROR - if(H5Fclose(fid2)<0) TEST_ERROR + if(H5Fclose(fid2) < 0) TEST_ERROR /* Cleanup */ if(H5Gclose(gid) < 0) TEST_ERROR - if(H5Fclose(fid)<0) TEST_ERROR + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -1909,9 +1977,8 @@ external_link_mult(hid_t fapl) * *------------------------------------------------------------------------- */ -#ifdef H5_GROUP_REVISION static int -external_link_self(hid_t fapl) +external_link_self(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -1922,7 +1989,10 @@ external_link_self(hid_t fapl) char filename2[NAME_BUF_SIZE]; char filename3[NAME_BUF_SIZE]; - TESTING("external link to self"); + if(new_format) + TESTING("external link to self (w/new group format)") + else + TESTING("external link to self") /* Set up filename */ h5_fixname(FILENAME[1], fapl, filename1, sizeof filename1); @@ -1930,10 +2000,10 @@ external_link_self(hid_t fapl) h5_fixname(FILENAME[3], fapl, filename3, sizeof filename1); /* Create file */ - if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create an lcpl with intermediate group creation set */ - if((lcpl_id=H5Pcreate(H5P_LINK_CREATE))<0) TEST_ERROR + if((lcpl_id=H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR if(H5Pset_create_intermediate_group(lcpl_id, TRUE) < 0) TEST_ERROR /* Create a series of groups within the file: /A/B and /X/Y/Z */ @@ -1944,13 +2014,13 @@ external_link_self(hid_t fapl) if(H5Llink(fid, "X/Y", gid, lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR - if(H5Pclose (lcpl_id) <0) TEST_ERROR + if(H5Pclose (lcpl_id) < 0) TEST_ERROR /* Create external link to own root group*/ - if(H5Lcreate_external(filename1, "/X", fid, "A/B/C", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename1, "/X", fid, "A/B/C", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Open object through external link */ - if((gid = H5Gopen(fid, "A/B/C/")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "A/B/C/")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -1963,20 +2033,20 @@ external_link_self(hid_t fapl) if(H5Gclose(gid2) < 0) TEST_ERROR /* Close object opened through external link */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Check on object created */ - if((gid = H5Gopen(fid, "X/new_group")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "X/new_group")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR if(HDstrcmp(objname, "/X/new_group")) TEST_ERROR /* Close opened object */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Complicate things. Use this file as an intermediate file in a chain @@ -1984,7 +2054,7 @@ external_link_self(hid_t fapl) */ /* Create file2 with an external link to file1 */ - if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR + if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR if(H5Lcreate_external(filename1, "/A", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR @@ -1992,8 +2062,8 @@ external_link_self(hid_t fapl) if(H5Fclose(fid) < 0) TEST_ERROR /* Create file3 as a target */ - if((fid=H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR - if((gid=H5Gcreate(fid, "end", 0)) < 0) TEST_ERROR + if((fid=H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR + if((gid=H5Gcreate(fid, "end", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR if(H5Fclose(fid) < 0) TEST_ERROR @@ -2012,7 +2082,7 @@ external_link_self(hid_t fapl) if((gid=H5Gopen(fid, "ext_link/B/C/Y/Z/end")) < 0) TEST_ERROR /* Create object through external link */ - if((gid2 = H5Gcreate(gid, "newer_group", 0)) < 0) TEST_ERROR + if((gid2 = H5Gcreate(gid, "newer_group", (size_t)0)) < 0) TEST_ERROR /* Cleanup */ if(H5Gclose(gid2) < 0) TEST_ERROR @@ -2040,7 +2110,6 @@ external_link_self(hid_t fapl) } H5E_END_TRY; return -1; } /* end external_link_self() */ -#endif /* H5_GROUP_REVISION */ /*------------------------------------------------------------------------- @@ -2068,7 +2137,7 @@ external_link_self(hid_t fapl) *------------------------------------------------------------------------- */ static int -external_link_pingpong(hid_t fapl) +external_link_pingpong(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -2077,44 +2146,47 @@ external_link_pingpong(hid_t fapl) char filename1[NAME_BUF_SIZE], filename2[NAME_BUF_SIZE]; /* Names of files to externally link across */ - TESTING("external links back and forth"); + if(new_format) + TESTING("external links back and forth (w/new group format)") + else + TESTING("external links back and forth") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); h5_fixname(FILENAME[4], fapl, filename2, sizeof filename2); /* Create first file */ - if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external links for chain */ - if(H5Lcreate_external(filename2, "/link2", fid, "link1", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/link4", fid, "link3", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/link6", fid, "link5", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename2, "/link2", fid, "link1", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/link4", fid, "link3", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/link6", fid, "link5", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create final object */ if((gid = H5Gcreate(fid, "final", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Create second file */ - if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external links for chain */ - if(H5Lcreate_external(filename1, "/link3", fid, "link2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename1, "/link5", fid, "link4", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename1, "/final", fid, "link6", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename1, "/link3", fid, "link2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename1, "/link5", fid, "link4", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename1, "/final", fid, "link6", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Open first file */ - if((fid=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0) TEST_ERROR; + if((fid=H5Fopen(filename1, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR /* Open object through external link */ - if((gid = H5Gopen(fid, "link1")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "link1")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -2127,27 +2199,27 @@ external_link_pingpong(hid_t fapl) if(H5Gclose(gid2) < 0) TEST_ERROR /* Close external object (lets first file close) */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Open first file again and check on object created */ if((fid = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) TEST_ERROR /* Open object created through external link */ - if((gid = H5Gopen(fid, "/final/new_group")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "/final/new_group")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR if(HDstrcmp(objname, "/final/new_group")) TEST_ERROR /* Close opened object */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); @@ -2167,7 +2239,7 @@ external_link_pingpong(hid_t fapl) * Function: external_link_toomany * * Purpose: Build a file with too many external links to objects (i.e. - * more than H5G_NLINKS. Use a "back & forth" style of + * more than H5L_NLINKS_DEF. Use a "back & forth" style of * linking (like the "ping pong" test above) to minimize the * number of files involved: * @@ -2201,7 +2273,7 @@ external_link_pingpong(hid_t fapl) *------------------------------------------------------------------------- */ static int -external_link_toomany(hid_t fapl) +external_link_toomany(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -2210,7 +2282,10 @@ external_link_toomany(hid_t fapl) char filename1[NAME_BUF_SIZE], filename2[NAME_BUF_SIZE]; /* Names of files to externally link across */ - TESTING("too many external links"); + if(new_format) + TESTING("too many external links (w/new group format)") + else + TESTING("too many external links") /* Make certain test is valid */ /* XXX: should probably make a "generic" test that creates the proper @@ -2223,45 +2298,45 @@ external_link_toomany(hid_t fapl) h5_fixname(FILENAME[4], fapl, filename2, sizeof filename2); /* Create first file */ - if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external links for chain */ - if(H5Lcreate_external(filename2, "/link2", fid, "link1", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/link4", fid, "link3", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/link6", fid, "link5", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/link8", fid, "link7", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/link10", fid, "link9", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/link12", fid, "link11", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/link14", fid, "link13", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/link16", fid, "link15", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/final", fid, "link17", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename2, "/link2", fid, "link1", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/link4", fid, "link3", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/link6", fid, "link5", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/link8", fid, "link7", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/link10", fid, "link9", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/link12", fid, "link11", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/link14", fid, "link13", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/link16", fid, "link15", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/final", fid, "link17", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Create second file */ - if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external links for chain */ - if(H5Lcreate_external(filename1, "/link3", fid, "link2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename1, "/link5", fid, "link4", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename1, "/link7", fid, "link6", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename1, "/link9", fid, "link8", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename1, "/link11", fid, "link10", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename1, "/link13", fid, "link12", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename1, "/link15", fid, "link14", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename1, "/link17", fid, "link16", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename1, "/link3", fid, "link2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename1, "/link5", fid, "link4", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename1, "/link7", fid, "link6", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename1, "/link9", fid, "link8", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename1, "/link11", fid, "link10", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename1, "/link13", fid, "link12", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename1, "/link15", fid, "link14", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename1, "/link17", fid, "link16", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create final object */ if((gid = H5Gcreate(fid, "final", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Open first file */ - if((fid=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0) TEST_ERROR; + if((fid=H5Fopen(filename1, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR /* Open object through external link */ H5E_BEGIN_TRY { @@ -2274,7 +2349,7 @@ external_link_toomany(hid_t fapl) } /* Open object through external link */ - if((gid = H5Gopen(fid, "link3")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "link3")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -2287,10 +2362,10 @@ external_link_toomany(hid_t fapl) if(H5Gclose(gid2) < 0) TEST_ERROR /* Close external object */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); @@ -2324,38 +2399,41 @@ external_link_toomany(hid_t fapl) *------------------------------------------------------------------------- */ static int -external_link_dangling(hid_t fapl) +external_link_dangling(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1); /* Group IDs */ char filename1[NAME_BUF_SIZE], filename2[NAME_BUF_SIZE]; /* Names of files to externally link across */ - TESTING("dangling external links"); + if(new_format) + TESTING("dangling external links (w/new group format)") + else + TESTING("dangling external links") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); h5_fixname(FILENAME[4], fapl, filename2, sizeof filename2); /* Create first file */ - if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create dangling external links */ - if(H5Lcreate_external("missing", "/missing", fid, "no_file", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external(filename2, "/missing", fid, "no_object", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external("missing", "/missing", fid, "no_file", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external(filename2, "/missing", fid, "no_object", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Create second file (for dangling object test) */ - if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Open first file */ - if((fid=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0) TEST_ERROR; + if((fid=H5Fopen(filename1, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR /* Open object through dangling file external link */ H5E_BEGIN_TRY { @@ -2378,7 +2456,7 @@ external_link_dangling(hid_t fapl) } /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); @@ -2409,29 +2487,32 @@ external_link_dangling(hid_t fapl) *------------------------------------------------------------------------- */ static int -external_link_recursive(hid_t fapl) +external_link_recursive(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1); /* Group IDs */ char filename1[NAME_BUF_SIZE]; /* Names of files to externally link across */ - TESTING("recursive external links"); + if(new_format) + TESTING("recursive external links (w/new group format)") + else + TESTING("recursive external links") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); /* Create first file */ - if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create recursive external links */ - if(H5Lcreate_external(filename1, "/recursive", fid, "recursive", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_external(filename1, "/recursive", fid, "recursive", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Open file */ - if((fid=H5Fopen(filename1, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR; + if((fid=H5Fopen(filename1, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR /* Open object through dangling file external link */ H5E_BEGIN_TRY { @@ -2444,7 +2525,7 @@ external_link_recursive(hid_t fapl) } /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); @@ -2476,7 +2557,7 @@ external_link_recursive(hid_t fapl) *------------------------------------------------------------------------- */ static int -external_link_query(hid_t fapl) +external_link_query(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1); /* Group IDs */ @@ -2488,15 +2569,17 @@ external_link_query(hid_t fapl) filename2[NAME_BUF_SIZE], /* Names of files to externally link across */ query_buf[NAME_BUF_SIZE]; /* Buffer to hold query result */ - - TESTING("query aspects of external link"); + if(new_format) + TESTING("query aspects of external link (w/new group format)") + else + TESTING("query aspects of external link") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); h5_fixname(FILENAME[4], fapl, filename2, sizeof filename2); /* Create first file, with external link to object in second file */ - if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR + if((fid=H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create external link */ if(H5Lcreate_external(filename2, "/dst", fid, "src", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR @@ -2504,50 +2587,50 @@ external_link_query(hid_t fapl) /* Get size of buffer for external link */ if(H5Lget_linkinfo(fid, "src", &li, H5P_DEFAULT) < 0) TEST_ERROR if(li.u.link_size != (HDstrlen(filename2) + HDstrlen("/dst") + 2)) TEST_ERROR - if (H5L_LINK_EXTERNAL != li.linkclass) { + if (H5L_TYPE_EXTERNAL != li.type) { H5_FAILED(); puts(" Unexpected link class - should have been an external link"); goto error; } /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Create second file to point to */ - if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR + if((fid=H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create object to link to */ if((gid = H5Gcreate(fid, "dst", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR + if(H5Fclose(fid) < 0) TEST_ERROR /* Open first file */ - if((fid=H5Fopen(filename1, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR + if((fid=H5Fopen(filename1, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR /* Get size of buffer for external link */ if(H5Lget_linkinfo(fid, "src", &li, H5P_DEFAULT) < 0) TEST_ERROR if(li.u.link_size != (HDstrlen(filename2) + HDstrlen("/dst") + 2)) TEST_ERROR - if (H5L_LINK_EXTERNAL != li.linkclass) { + if (H5L_TYPE_EXTERNAL != li.type) { H5_FAILED(); puts(" Unexpected link class - should have been an external link"); goto error; } /* Get information for external link. It should be two strings right after each other */ - if(H5Lget_linkval(fid, "src", NAME_BUF_SIZE, query_buf, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lget_linkval(fid, "src", (size_t)NAME_BUF_SIZE, query_buf, H5P_DEFAULT) < 0) TEST_ERROR /* Extract the file and object names from the buffer */ if(H5Lunpack_elink_val(query_buf, &file_name, &object_name) < 0) TEST_ERROR /* Compare the file and object names */ - if(strcmp(file_name, filename2)) TEST_ERROR; + if(strcmp(file_name, filename2)) TEST_ERROR if(strcmp(object_name, "/dst")) TEST_ERROR /* Query information about object that external link points to */ - if (H5Gget_objinfo(fid, "src", TRUE, &sb)<0) goto error; + if (H5Gget_objinfo(fid, "src", TRUE, &sb) < 0) goto error; if (H5G_GROUP != sb.type) { H5_FAILED(); puts(" Unexpected object type - should have been a group"); @@ -2555,7 +2638,7 @@ external_link_query(hid_t fapl) } /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Make sure that passing in NULLs to H5Lunpack_elink_val works */ if(H5Lunpack_elink_val(query_buf, NULL, NULL) < 0) TEST_ERROR @@ -2591,14 +2674,17 @@ external_link_query(hid_t fapl) *------------------------------------------------------------------------- */ static int -external_link_unlink_compact(hid_t fapl) +external_link_unlink_compact(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ char filename1[NAME_BUF_SIZE], filename2[NAME_BUF_SIZE]; /* Names of files to externally link across */ - TESTING("unlinking external link in compact group"); + if(new_format) + TESTING("unlinking external link in compact group (w/new group format)") + else + TESTING("unlinking external link in compact group") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); @@ -2673,9 +2759,8 @@ error: * *------------------------------------------------------------------------- */ -#ifdef H5_GROUP_REVISION static int -external_link_unlink_dense(hid_t fapl) +external_link_unlink_dense(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gcpl = (-1); /* Group creation property list ID */ @@ -2688,7 +2773,10 @@ external_link_unlink_dense(hid_t fapl) unsigned min_dense; /* Minimum # of links to store in group "densely" */ unsigned u; /* Local index variable */ - TESTING("unlinking external link in dense group"); + if(new_format) + TESTING("unlinking external link in dense group (w/new group format)") + else + TESTING("unlinking external link in dense group") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); @@ -2712,10 +2800,10 @@ external_link_unlink_dense(hid_t fapl) if(H5Lcreate_external(filename2, "/dst", gid, "src", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Check on root group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR; - if(nmsgs != 1) TEST_ERROR; - if(H5G_has_stab_test(gid) == TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR + if(nmsgs != 1) TEST_ERROR + if(H5G_has_stab_test(gid) == TRUE) TEST_ERROR /* Create enough objects in the root group to change it into a "dense" group */ for(u = 0; u < max_compact; u++) { @@ -2725,9 +2813,9 @@ external_link_unlink_dense(hid_t fapl) } /* end for */ /* Check on root group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR; - if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR + if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR /* Close group creation property list */ if(H5Pclose(gcpl) < 0) TEST_ERROR @@ -2767,10 +2855,11 @@ external_link_unlink_dense(hid_t fapl) } /* end for */ /* Check on root group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR; - if(nmsgs != (min_dense - 1)) TEST_ERROR; - if(H5G_has_stab_test(gid) == TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR + if(nmsgs != (min_dense - 1)) TEST_ERROR + if(H5G_is_new_dense_test(gid) == TRUE) TEST_ERROR + if(H5G_has_stab_test(gid) == TRUE) TEST_ERROR /* Close root group */ if(H5Gclose(gid) < 0) TEST_ERROR @@ -2801,7 +2890,6 @@ error: } H5E_END_TRY; return -1; } /* end external_link_unlink_dense() */ -#endif /* H5_GROUP_REVISION */ /*------------------------------------------------------------------------- @@ -2818,7 +2906,7 @@ error: *------------------------------------------------------------------------- */ static int -external_link_move(hid_t fapl) +external_link_move(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -2827,7 +2915,10 @@ external_link_move(hid_t fapl) char filename1[NAME_BUF_SIZE], filename2[NAME_BUF_SIZE]; /* Names of files to externally link across */ - TESTING("move external link"); + if(new_format) + TESTING("move external link (w/new group format)") + else + TESTING("move external link") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); @@ -2993,7 +3084,6 @@ error: } /* end external_link_move() */ -#ifdef H5_GROUP_REVISION /*------------------------------------------------------------------------- * Function: external_link_ride * @@ -3009,7 +3099,7 @@ error: *------------------------------------------------------------------------- */ static int -external_link_ride(hid_t fapl) +external_link_ride(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gcpl = (-1); /* Group creation property list ID */ @@ -3023,7 +3113,10 @@ external_link_ride(hid_t fapl) unsigned min_dense; /* Minimum # of links to store in group "densely" */ unsigned u; /* Local index variable */ - TESTING("external link along for the ride"); + if(new_format) + TESTING("external link along for the ride (w/new group format)") + else + TESTING("external link along for the ride") /* Set up filenames */ h5_fixname(FILENAME[3], fapl, filename1, sizeof filename1); @@ -3050,18 +3143,23 @@ external_link_ride(hid_t fapl) } /* end for */ /* Check on root group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR; - if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR + if(new_format) { + if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR + } /* end if */ + else { + if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR + } /* end else */ /* Create external link */ /* (This also covers the case of adding an external link to a dense group) */ if(H5Lcreate_external(filename2, "/dst", gid, "src", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Check on root group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR; - if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR + if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR /* Close group creation property list */ if(H5Pclose(gcpl) < 0) TEST_ERROR @@ -3113,10 +3211,11 @@ external_link_ride(hid_t fapl) } /* end for */ /* Check on root group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR; - if(nmsgs != (min_dense - 1)) TEST_ERROR; - if(H5G_has_stab_test(gid) == TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR + if(nmsgs != (min_dense - 1)) TEST_ERROR + if(H5G_has_stab_test(gid) == TRUE) TEST_ERROR + if(H5G_is_new_dense_test(gid) == TRUE) TEST_ERROR /* Close root group */ if(H5Gclose(gid) < 0) TEST_ERROR @@ -3170,7 +3269,6 @@ error: } H5E_END_TRY; return -1; } /* end external_link_ride() */ -#endif /* H5_GROUP_REVISION */ /*------------------------------------------------------------------------- @@ -3188,7 +3286,7 @@ error: *------------------------------------------------------------------------- */ static int -external_link_closing(hid_t fapl) +external_link_closing(hid_t fapl, hbool_t new_format) { hid_t fid1 = (-1), fid2 = (-1), fid3 = (-1), fid4=(-1); hid_t gid=(-1), tid=(-1), tid2=(-1), sid=(-1), did=(-1); @@ -3203,7 +3301,10 @@ external_link_closing(hid_t fapl) H5G_stat_t sb; hobj_ref_t obj_ref; - TESTING("that external files are closed during traversal"); + if(new_format) + TESTING("that external files are closed during traversal (w/new group format)") + else + TESTING("that external files are closed during traversal") /* In this test, external links will go from file1 to file2 and from * file2 to file3. @@ -3243,7 +3344,7 @@ external_link_closing(hid_t fapl) if(H5Fclose(fid2) < 0) TEST_ERROR /* Test creating each kind of object */ - if((gid = H5Gcreate(fid1, "elink/elink/elink/group1", 0)) < 0) TEST_ERROR + if((gid = H5Gcreate(fid1, "elink/elink/elink/group1", (size_t)0)) < 0) TEST_ERROR if(H5Tcommit(fid1, "elink/elink/elink/type1", tid) < 0) TEST_ERROR if((did = H5Dcreate(fid1, "elink/elink/elink/dataset1", tid2, sid, H5P_DEFAULT)) < 0) TEST_ERROR /* Close objects */ @@ -3303,7 +3404,7 @@ external_link_closing(hid_t fapl) if(H5Dclose(did) < 0) TEST_ERROR /* Test H5Fmount */ - if((gid = H5Gcreate(fid1, "elink/elink/elink/mnt", 0)) < 0) TEST_ERROR + if((gid = H5Gcreate(fid1, "elink/elink/elink/mnt", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR H5E_BEGIN_TRY { if(H5Fmount(fid1, "elink/elink/elink/mnt", fid1, H5P_DEFAULT) >= 0) TEST_ERROR @@ -3330,19 +3431,18 @@ external_link_closing(hid_t fapl) if(H5Fclose(fid2) < 0) TEST_ERROR /* Do an external link traversal that recursively calls another external link. */ - if((gid = H5Gcreate(fid1, "elink/elink2/group2", 0)) < 0) TEST_ERROR + if((gid = H5Gcreate(fid1, "elink/elink2/group2", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR /* Create two more groups so that the last three elements in the path are * all within the same external file */ - if((gid = H5Gcreate(fid1, "elink/elink2/group2/group3", 0)) < 0) TEST_ERROR + if((gid = H5Gcreate(fid1, "elink/elink2/group2/group3", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR - if((gid = H5Gcreate(fid1, "elink/elink2/group2/group3/group4", 0)) < 0) TEST_ERROR + if((gid = H5Gcreate(fid1, "elink/elink2/group2/group3/group4", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR if(H5Gget_objinfo(fid1, "elink/elink2/group2/group3/group4", TRUE, &sb) < 0) TEST_ERROR -#ifdef H5_GROUP_REVISION /* Add a few regular groups and a soft link in file2 using intermediate group creation */ if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR if(H5Pset_create_intermediate_group(lcpl_id, TRUE) < 0) TEST_ERROR @@ -3353,17 +3453,16 @@ external_link_closing(hid_t fapl) * slink points to (file2)/elink2, which points to (file3)/elink, which * points to file 4. */ - if((gid = H5Gcreate(fid1, "elink/file2group1/file2group2/slink/group3", 0)) < 0) TEST_ERROR + if((gid = H5Gcreate(fid1, "elink/file2group1/file2group2/slink/group3", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR if(H5Lget_linkinfo(fid1, "elink/file2group1/file2group2/slink/group3", &li, H5P_DEFAULT) < 0) TEST_ERROR /* Some simpler tests */ - if((gid = H5Gcreate(fid1, "elink/file2group3", 0)) < 0) TEST_ERROR + if((gid = H5Gcreate(fid1, "elink/file2group3", (size_t)0)) < 0) TEST_ERROR if(H5Gclose(gid) < 0) TEST_ERROR if(H5Lget_linkinfo(fid1, "elink/file2group3", &li, H5P_DEFAULT) < 0) TEST_ERROR if(H5Lget_linkinfo(fid1, "elink/elink", &li, H5P_DEFAULT) < 0) TEST_ERROR -#endif /* H5_GROUP_REVISION */ /* Close file1, the only file that should still be open */ if(H5Fclose(fid1) < 0) TEST_ERROR @@ -3417,7 +3516,7 @@ error: *------------------------------------------------------------------------- */ static int -external_link_endian(hid_t fapl) +external_link_endian(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -3426,7 +3525,10 @@ external_link_endian(hid_t fapl) char pathbuf[NAME_BUF_SIZE]; /* Path to the files */ char namebuf[NAME_BUF_SIZE]; - TESTING("endianness of external links"); + if(new_format) + TESTING("endianness of external links (w/new group format)") + else + TESTING("endianness of external links") /* * Create the name of the file to open (in case we are using the --srcdir @@ -3441,40 +3543,40 @@ external_link_endian(hid_t fapl) HDstrcpy(pathbuf, ""); /* Create a link access property list with the path to the srcdir */ - if((lapl_id = H5Pcreate(H5P_LINK_ACCESS)) < 0) TEST_ERROR; - if(H5Pset_elink_prefix(lapl_id, pathbuf) < 0) TEST_ERROR; + if((lapl_id = H5Pcreate(H5P_LINK_ACCESS)) < 0) TEST_ERROR + if(H5Pset_elink_prefix(lapl_id, pathbuf) < 0) TEST_ERROR - if(HDstrlen(pathbuf) + HDstrlen(LE_FILENAME) >= sizeof(namebuf)) TEST_ERROR; + if(HDstrlen(pathbuf) + HDstrlen(LE_FILENAME) >= sizeof(namebuf)) TEST_ERROR HDstrcpy(namebuf, pathbuf); HDstrcat(namebuf, LE_FILENAME); /* Test LE file; try to open a group through the external link */ - if((fid = H5Fopen(namebuf, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR; - if((gid = H5Oopen(fid, "ext_link", lapl_id)) < 0) TEST_ERROR; + if((fid = H5Fopen(namebuf, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR + if((gid = H5Oopen(fid, "ext_link", lapl_id)) < 0) TEST_ERROR /* Open a group in the external file using that group ID */ - if((gid2 = H5Gopen(gid, "subgroup")) < 0) TEST_ERROR; + if((gid2 = H5Gopen(gid, "subgroup")) < 0) TEST_ERROR /* Close the IDs */ - if(H5Gclose(gid2) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; - if(H5Fclose(fid) < 0) TEST_ERROR; + if(H5Gclose(gid2) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR + if(H5Fclose(fid) < 0) TEST_ERROR - if(HDstrlen(pathbuf) + HDstrlen(BE_FILENAME) >= sizeof(namebuf)) TEST_ERROR; + if(HDstrlen(pathbuf) + HDstrlen(BE_FILENAME) >= sizeof(namebuf)) TEST_ERROR HDstrcpy(namebuf, pathbuf); HDstrcat(namebuf, BE_FILENAME); /* Test BE file; try to open a group through the external link */ - if((fid = H5Fopen(namebuf, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR; - if((gid = H5Oopen(fid, "ext_link", lapl_id)) < 0) TEST_ERROR; + if((fid = H5Fopen(namebuf, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR + if((gid = H5Oopen(fid, "ext_link", lapl_id)) < 0) TEST_ERROR /* Open a group in the external file using that group ID */ - if((gid2 = H5Gopen(gid, "subgroup")) < 0) TEST_ERROR; + if((gid2 = H5Gopen(gid, "subgroup")) < 0) TEST_ERROR /* Close the IDs */ - if(H5Gclose(gid2) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; - if(H5Fclose(fid) < 0) TEST_ERROR; + if(H5Gclose(gid2) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -3504,7 +3606,8 @@ error: */ /* Callback functions for UD hard links. */ /* UD_hard_create increments the object's reference count */ -static herr_t UD_hard_create(const char UNUSED * link_name, hid_t loc_group, void * udata, size_t udata_size, hid_t UNUSED lcpl_id) +static herr_t +UD_hard_create(const char UNUSED * link_name, hid_t loc_group, void * udata, size_t udata_size, hid_t UNUSED lcpl_id) { haddr_t addr; hid_t target_obj = -1; @@ -3540,15 +3643,15 @@ done: switch(H5Iget_type(target_obj)) { case H5I_GROUP: - if(H5Gclose(target_obj) <0) + if(H5Gclose(target_obj) < 0) ret_value = -1; break; case H5I_DATASET: - if(H5Dclose(target_obj) <0) + if(H5Dclose(target_obj) < 0) ret_value = -1; break; case H5I_DATATYPE: - if(H5Tclose(target_obj) <0) + if(H5Tclose(target_obj) < 0) ret_value = -1; break; default: @@ -3560,7 +3663,8 @@ done: } /* UD_hard_delete decrements the object's reference count */ -static herr_t UD_hard_delete(const char UNUSED * link_name, hid_t loc_group, void * udata, size_t udata_size) +static herr_t +UD_hard_delete(const char UNUSED * link_name, hid_t loc_group, void * udata, size_t udata_size) { haddr_t addr; hid_t target_obj = -1; @@ -3596,15 +3700,15 @@ done: switch(H5Iget_type(target_obj)) { case H5I_GROUP: - if(H5Gclose(target_obj) <0) + if(H5Gclose(target_obj) < 0) ret_value = -1; break; case H5I_DATASET: - if(H5Dclose(target_obj) <0) + if(H5Dclose(target_obj) < 0) ret_value = -1; break; case H5I_DATATYPE: - if(H5Tclose(target_obj) <0) + if(H5Tclose(target_obj) < 0) ret_value = -1; break; default: @@ -3615,7 +3719,8 @@ done: return ret_value; } -static hid_t UD_hard_traverse(const char UNUSED *link_name, hid_t cur_group, void * udata, size_t udata_size, hid_t UNUSED lapl_id) +static hid_t +UD_hard_traverse(const char UNUSED *link_name, hid_t cur_group, void * udata, size_t udata_size, hid_t UNUSED lapl_id) { haddr_t addr; hid_t ret_value = -1; @@ -3630,8 +3735,8 @@ static hid_t UD_hard_traverse(const char UNUSED *link_name, hid_t cur_group, voi return ret_value; } -const H5L_link_class_t UD_hard_class[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_hard_class[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_HARD_TYPE, /* Link type id number */ "UD_hard_link", /* Link class name for debugging */ UD_hard_create, /* Creation callback */ @@ -3653,49 +3758,49 @@ ud_hard_links(hid_t fapl) h5_stat_size_t empty_size; /* Size of an empty file */ char filename[NAME_BUF_SIZE]; - TESTING("user-defined hard link"); + TESTING("user-defined hard link (w/new group format)") /* Set up filename and create file*/ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Get the size of the empty file for reference */ - if(H5Fclose(fid) < 0) TEST_ERROR; - if((empty_size=h5_get_file_size(filename))==0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR + if((empty_size = h5_get_file_size(filename))==0) TEST_ERROR - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Check that external links are registered and UD hard links are not */ - if(H5Lis_registered(H5L_LINK_EXTERNAL) != TRUE) TEST_ERROR - if(H5Lis_registered(UD_HARD_TYPE) != 0) TEST_ERROR + if(H5Lis_registered(H5L_TYPE_EXTERNAL) != TRUE) TEST_ERROR + if(H5Lis_registered(UD_HARD_TYPE) != FALSE) TEST_ERROR /* Register "user-defined hard links" with the library */ - if(H5Lregister(UD_hard_class) < 0) TEST_ERROR; + if(H5Lregister(UD_hard_class) < 0) TEST_ERROR /* Check that UD hard links are now registered */ - if(H5Lis_registered(H5L_LINK_EXTERNAL) != TRUE) TEST_ERROR + if(H5Lis_registered(H5L_TYPE_EXTERNAL) != TRUE) TEST_ERROR if(H5Lis_registered(UD_HARD_TYPE) != TRUE) TEST_ERROR /* Create a group for the UD hard link to point to */ - if((gid = H5Gcreate(fid, "group", 0)) <0) TEST_ERROR; + if((gid = H5Gcreate(fid, "group", (size_t)0)) < 0) TEST_ERROR /* Get address for the group to give to the hard link */ - if (H5Lget_linkinfo(fid, "group", &li, H5P_DEFAULT)<0) TEST_ERROR; + if(H5Lget_linkinfo(fid, "group", &li, H5P_DEFAULT) < 0) TEST_ERROR - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Create a user-defined "hard link" to the group using the address we got * from H5Lget_linkinfo */ - if(H5Lcreate_ud(fid, "ud_link", UD_HARD_TYPE, &(li.u.address), sizeof(haddr_t), H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_ud(fid, "ud_link", UD_HARD_TYPE, &(li.u.address), sizeof(haddr_t), H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Close and re-open file to ensure that data is written to disk */ - if(H5Fclose(fid) < 0) TEST_ERROR; - if((fid = H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR + if((fid = H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) TEST_ERROR /* Open group through UD link */ - if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -3706,23 +3811,23 @@ ud_hard_links(hid_t fapl) /* Close groups*/ if(H5Gclose(gid2) < 0) TEST_ERROR - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Re-open group without using ud link to check that it was created properly */ - if((gid = H5Gopen(fid, "group/new_group")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "group/new_group")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR if(HDstrcmp(objname, "/group/new_group")) TEST_ERROR /* Close opened object */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR - /* Check that H5Gget_objinfo works on the hard link */ + /* Check that H5Lget_objinfo works on the hard link */ if(H5Lget_linkinfo(fid, "ud_link", &li, H5P_DEFAULT) < 0) TEST_ERROR /* UD hard links have no query function, thus return a "link length" of 0 */ if(li.u.link_size != 0) TEST_ERROR - if (UD_HARD_TYPE != li.linkclass) { + if(UD_HARD_TYPE != li.type) { H5_FAILED(); puts(" Unexpected link class - should have been a UD hard link"); goto error; @@ -3730,24 +3835,24 @@ ud_hard_links(hid_t fapl) /* Unlink the group pointed to by the UD link. It shouldn't be * deleted because of the UD link. */ - if(H5Gunlink(fid, "/group") < 0) TEST_ERROR; + if(H5Gunlink(fid, "/group") < 0) TEST_ERROR /* Ensure we can open the group through the UD link */ - if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR /* Unlink the group contained within it. */ - if(H5Gunlink(gid, "new_group") < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gunlink(gid, "new_group") < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Now delete the UD link. This should cause the group to be * deleted, too. */ - if(H5Gunlink(fid, "ud_link")<0) TEST_ERROR; + if(H5Gunlink(fid, "ud_link") < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* The file should be empty again. */ - if(empty_size!=h5_get_file_size(filename)) TEST_ERROR; + if(empty_size != h5_get_file_size(filename)) TEST_ERROR if(H5Lunregister(UD_HARD_TYPE) < 0) TEST_ERROR @@ -3756,16 +3861,16 @@ ud_hard_links(hid_t fapl) error: H5E_BEGIN_TRY { - H5Gclose (gid2); - H5Gclose (gid); - H5Fclose (fid); + H5Gclose(gid2); + H5Gclose(gid); + H5Fclose(fid); } H5E_END_TRY; return -1; } /* end ud_hard_links() */ /*------------------------------------------------------------------------- - * Function: ext_link_endian + * Function: UD_rereg_traverse * * Purpose: Check that user defined link types can be unregistered and * reregistered properly. @@ -3781,11 +3886,12 @@ ud_hard_links(hid_t fapl) /* A traversal function that ignores any udata and simply opens an object * in the current group named REREG_TARGET_NAME */ -static hid_t UD_rereg_traverse(const char UNUSED * link_name, hid_t cur_group, void UNUSED * udata, size_t UNUSED udata_size, hid_t lapl_id) +static hid_t +UD_rereg_traverse(const char UNUSED * link_name, hid_t cur_group, void UNUSED * udata, size_t UNUSED udata_size, hid_t lapl_id) { hid_t ret_value; - if((ret_value = H5Oopen(cur_group, REREG_TARGET_NAME, lapl_id)) < 0) TEST_ERROR; + if((ret_value = H5Oopen(cur_group, REREG_TARGET_NAME, lapl_id)) < 0) TEST_ERROR return ret_value; @@ -3795,8 +3901,8 @@ error: /* This link class has the same ID number as the UD hard links but * has a very different traversal function */ -const H5L_link_class_t UD_rereg_class[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_rereg_class[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_HARD_TYPE, /* Link type id number */ "UD_reregistered_type", /* Link class name for debugging */ NULL, /* Creation callback */ @@ -3818,61 +3924,61 @@ ud_link_reregister(hid_t fapl) char filename[NAME_BUF_SIZE]; h5_stat_size_t empty_size; /* Size of an empty file */ - TESTING("registering a new class for existing UD links"); + TESTING("registering a new class for existing UD links (w/new group format)") /* Set up filename and create file*/ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Get the size of the empty file for reference */ - if(H5Fclose(fid) < 0) TEST_ERROR; - if((empty_size=h5_get_file_size(filename))==0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR + if((empty_size=h5_get_file_size(filename))==0) TEST_ERROR - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Check that UD hard links are not registered */ - if(H5Lis_registered(UD_HARD_TYPE) != 0) TEST_ERROR + if(H5Lis_registered(UD_HARD_TYPE) != FALSE) TEST_ERROR /* Register "user-defined hard links" with the library */ - if(H5Lregister(UD_hard_class) < 0) TEST_ERROR; + if(H5Lregister(UD_hard_class) < 0) TEST_ERROR /* Check that UD hard links are registered */ if(H5Lis_registered(UD_HARD_TYPE) != TRUE) TEST_ERROR /* Point a UD defined hard link to a group in the same way as the previous test */ - if((gid = H5Gcreate(fid, "group", 0)) <0) TEST_ERROR; - if (H5Lget_linkinfo(fid, "group", &li, H5P_DEFAULT)<0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Gcreate(fid, "group", (size_t)0)) < 0) TEST_ERROR + if (H5Lget_linkinfo(fid, "group", &li, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR if(H5Lcreate_ud(fid, "ud_link", UD_HARD_TYPE, &(li.u.address), sizeof(li.u.address), H5P_DEFAULT, H5P_DEFAULT) < 0) - TEST_ERROR; + TEST_ERROR /* Create a group named REREG_TARGET_NAME in the same group as the ud link */ - if((gid = H5Gcreate(fid, REREG_TARGET_NAME, 0)) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Gcreate(fid, REREG_TARGET_NAME, (size_t)0)) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Now unregister UD hard links */ - if(H5Lunregister(UD_HARD_TYPE) < 0) TEST_ERROR; + if(H5Lunregister(UD_HARD_TYPE) < 0) TEST_ERROR /* Check that UD hard links are no longer registered */ - if(H5Lis_registered(UD_HARD_TYPE) != 0) TEST_ERROR + if(H5Lis_registered(UD_HARD_TYPE) != FALSE) TEST_ERROR /* Verify that we can't traverse the ud link anymore */ H5E_BEGIN_TRY { - if((gid = H5Gopen(fid, "ud_link")) >= 0) TEST_ERROR; + if((gid = H5Gopen(fid, "ud_link")) >= 0) TEST_ERROR } H5E_END_TRY /* Verify that we can't create any new links of this type */ H5E_BEGIN_TRY { if(H5Lcreate_ud(fid, "ud_link2", UD_HARD_TYPE, &(li.u.address), sizeof(li.u.address), H5P_DEFAULT, H5P_DEFAULT) >= 0) - TEST_ERROR; + TEST_ERROR } H5E_END_TRY /* Register a new kind of link with the same ID number */ - if(H5Lregister(UD_rereg_class) < 0) TEST_ERROR; + if(H5Lregister(UD_rereg_class) < 0) TEST_ERROR /* Check that UD hard links are registered again */ if(H5Lis_registered(UD_HARD_TYPE) != TRUE) TEST_ERROR @@ -3880,7 +3986,7 @@ ud_link_reregister(hid_t fapl) /* Open a group through the ud link (now a different class of link). * It should be a different group * than the UD hard link pointed to */ - if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -3891,58 +3997,58 @@ ud_link_reregister(hid_t fapl) /* Close groups*/ if(H5Gclose(gid2) < 0) TEST_ERROR - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Re-open group without using ud link to check that it was created properly */ - if((gid = H5Gopen(fid, "rereg_target/new_group")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "rereg_target/new_group")) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR if(HDstrcmp(objname, "/rereg_target/new_group")) TEST_ERROR /* Close opened object */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Unlink the group pointed to by the UD hard link. It shouldn't be * deleted because the UD link incremented its reference count. */ - if(H5Gunlink(fid, "/group") < 0) TEST_ERROR; + if(H5Gunlink(fid, "/group") < 0) TEST_ERROR /* What a mess! Re-register user-defined links to clean up the * reference counts. We shouldn't actually need to unregister the * other link type */ - if(H5Lregister(UD_hard_class) < 0) TEST_ERROR; + if(H5Lregister(UD_hard_class) < 0) TEST_ERROR if(H5Lis_registered(UD_HARD_TYPE) != TRUE) TEST_ERROR /* Ensure we can open the group through the UD link (now that UD hard * links have been registered) */ - if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Delete the UD hard link. This should cause the group to be * deleted, too. */ - if(H5Gunlink(fid, "ud_link")<0) TEST_ERROR; + if(H5Gunlink(fid, "ud_link") < 0) TEST_ERROR /* Unlink the other two groups so that we can make sure the file is empty */ - if(H5Gunlink(fid, "/rereg_target/new_group")<0) TEST_ERROR; - if(H5Gunlink(fid, REREG_TARGET_NAME)<0) TEST_ERROR; + if(H5Gunlink(fid, "/rereg_target/new_group") < 0) TEST_ERROR + if(H5Gunlink(fid, REREG_TARGET_NAME) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* The file should be empty again. */ - if(empty_size!=h5_get_file_size(filename)) TEST_ERROR; + if(empty_size!=h5_get_file_size(filename)) TEST_ERROR if(H5Lunregister(UD_HARD_TYPE) < 0) TEST_ERROR - if(H5Lis_registered(UD_HARD_TYPE) != 0) TEST_ERROR + if(H5Lis_registered(UD_HARD_TYPE) != FALSE) TEST_ERROR PASSED(); return 0; error: H5E_BEGIN_TRY { - H5Gclose (gid2); - H5Gclose (gid); - H5Fclose (fid); + H5Gclose(gid2); + H5Gclose(gid); + H5Fclose(fid); } H5E_END_TRY; return -1; } /* end ud_link_reregister() */ @@ -3967,14 +4073,14 @@ ud_link_reregister(hid_t fapl) static herr_t UD_cb_create(const char * link_name, hid_t loc_group, void * udata, size_t udata_size, hid_t lcpl_id) { - if(!link_name) TEST_ERROR; - if(loc_group < 0) TEST_ERROR; - if(udata_size > 0 && !udata) TEST_ERROR; - if(lcpl_id < 0) TEST_ERROR; + if(!link_name) TEST_ERROR + if(loc_group < 0) TEST_ERROR + if(udata_size > 0 && !udata) TEST_ERROR + if(lcpl_id < 0) TEST_ERROR - if(strcmp(link_name, UD_CB_LINK_NAME) && strcmp(link_name, NEW_UD_CB_LINK_NAME)) TEST_ERROR; - if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR; - if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR; + if(strcmp(link_name, UD_CB_LINK_NAME) && strcmp(link_name, NEW_UD_CB_LINK_NAME)) TEST_ERROR + if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR + if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR return 0; @@ -3988,16 +4094,16 @@ UD_cb_traverse(const char * link_name, hid_t cur_group, void * udata, size_t uda const char *target = (char *) udata; hid_t ret_value; - if(!link_name) TEST_ERROR; - if(cur_group < 0) TEST_ERROR; - if(udata_size > 0 && !udata) TEST_ERROR; + if(!link_name) TEST_ERROR + if(cur_group < 0) TEST_ERROR + if(udata_size > 0 && !udata) TEST_ERROR - if(strcmp(link_name, UD_CB_LINK_NAME) && strcmp(link_name, NEW_UD_CB_LINK_NAME)) TEST_ERROR; - if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR; - if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR; + if(strcmp(link_name, UD_CB_LINK_NAME) && strcmp(link_name, NEW_UD_CB_LINK_NAME)) TEST_ERROR + if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR + if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR if((ret_value = H5Oopen(cur_group, target, lapl_id)) < 0) - TEST_ERROR; + TEST_ERROR return ret_value; @@ -4009,13 +4115,13 @@ error: static herr_t UD_cb_move(const char * new_name, hid_t new_loc, void * udata, size_t udata_size) { - if(!new_name) TEST_ERROR; - if(new_loc < 0) TEST_ERROR; - if(udata_size > 0 && !udata) TEST_ERROR; + if(!new_name) TEST_ERROR + if(new_loc < 0) TEST_ERROR + if(udata_size > 0 && !udata) TEST_ERROR - if(strcmp(new_name, NEW_UD_CB_LINK_NAME)) TEST_ERROR; - if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR; - if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR; + if(strcmp(new_name, NEW_UD_CB_LINK_NAME)) TEST_ERROR + if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR + if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR return 0; @@ -4027,33 +4133,34 @@ error: static herr_t UD_cb_delete(const char * link_name, hid_t loc_group, void * udata, size_t udata_size) { - if(!link_name) TEST_ERROR; - if(loc_group < 0) TEST_ERROR; - if(udata_size > 0 && !udata) TEST_ERROR; + if(!link_name) TEST_ERROR + if(loc_group < 0) TEST_ERROR + if(udata_size > 0 && !udata) TEST_ERROR - if(strcmp(link_name, UD_CB_LINK_NAME) && strcmp(link_name, NEW_UD_CB_LINK_NAME)) TEST_ERROR; - if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR; - if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR; + if(strcmp(link_name, UD_CB_LINK_NAME) && strcmp(link_name, NEW_UD_CB_LINK_NAME)) TEST_ERROR + if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR + if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR return 0; error: return -1; } + /* Callback for when the link is queried */ static ssize_t UD_cb_query(const char * link_name, void * udata, size_t udata_size, void* buf, size_t buf_size) { - if(!link_name) TEST_ERROR; - if(udata_size > 0 && !udata) TEST_ERROR; + if(!link_name) TEST_ERROR + if(udata_size > 0 && !udata) TEST_ERROR - if(strcmp(link_name, UD_CB_LINK_NAME)) TEST_ERROR; - if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR; - if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR; + if(strcmp(link_name, UD_CB_LINK_NAME)) TEST_ERROR + if(strcmp(udata, UD_CB_TARGET)) TEST_ERROR + if(udata_size != UD_CB_TARGET_LEN) TEST_ERROR if(buf) { - if(buf_size < 16) TEST_ERROR; + if(buf_size < 16) TEST_ERROR strcpy(buf, "query succeeded"); } @@ -4064,8 +4171,8 @@ error: return -1; } -const H5L_link_class_t UD_cb_class[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_cb_class[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_CB_TYPE, /* Link type id number */ NULL, /* NULL name (to make sure this doesn't break anything */ UD_cb_create, /* Creation callback */ @@ -4077,7 +4184,7 @@ const H5L_link_class_t UD_cb_class[1] = {{ }}; static int -ud_callbacks(hid_t fapl) +ud_callbacks(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1); /* Group ID */ @@ -4088,65 +4195,68 @@ ud_callbacks(hid_t fapl) char filename[NAME_BUF_SIZE]; char query_buf[NAME_BUF_SIZE]; - TESTING("user-defined link callbacks"); + if(new_format) + TESTING("user-defined link callbacks (w/new group format)") + else + TESTING("user-defined link callbacks") /* Set up filename and create file*/ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Check that registered link classes are, and unregistered ones aren't */ - if(H5Lis_registered(H5L_LINK_EXTERNAL) != TRUE) TEST_ERROR - if(H5Lis_registered(UD_HARD_TYPE) != 0) TEST_ERROR - if(H5Lis_registered(UD_CB_TYPE) != 0) TEST_ERROR + if(H5Lis_registered(H5L_TYPE_EXTERNAL) != TRUE) TEST_ERROR + if(H5Lis_registered(UD_HARD_TYPE) != FALSE) TEST_ERROR + if(H5Lis_registered(UD_CB_TYPE) != FALSE) TEST_ERROR /* Hit two birds with one stone: register UD hard links from previous * test to check that having two UD links registered at once presents * no problems. */ - if(H5Lregister(UD_hard_class) < 0) TEST_ERROR; + if(H5Lregister(UD_hard_class) < 0) TEST_ERROR /* Register user-defined link class. This is the one we'll actually * be using. */ - if(H5Lregister(UD_cb_class) < 0) TEST_ERROR; + if(H5Lregister(UD_cb_class) < 0) TEST_ERROR /* Check that registered link classes are, and unregistered ones aren't */ - if(H5Lis_registered(H5L_LINK_EXTERNAL) != TRUE) TEST_ERROR + if(H5Lis_registered(H5L_TYPE_EXTERNAL) != TRUE) TEST_ERROR if(H5Lis_registered(UD_HARD_TYPE) != TRUE) TEST_ERROR if(H5Lis_registered(UD_CB_TYPE) != TRUE) TEST_ERROR /* Create a group for the UD link to point to */ - if((gid = H5Gcreate(fid, UD_CB_TARGET, 0)) <0) TEST_ERROR; + if((gid = H5Gcreate(fid, UD_CB_TARGET, (size_t)0)) < 0) TEST_ERROR /* Create a user-defined link to the group. These UD links behave like soft links. */ - if(H5Lcreate_ud(fid, UD_CB_LINK_NAME, UD_CB_TYPE, ud_target_name, UD_CB_TARGET_LEN, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Lcreate_ud(fid, UD_CB_LINK_NAME, UD_CB_TYPE, ud_target_name, (size_t)UD_CB_TARGET_LEN, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Try opening group through UD link */ - if((gid = H5Gopen(fid, UD_CB_LINK_NAME)) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, UD_CB_LINK_NAME)) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Query the link to test its query callback */ - if (H5Lget_linkinfo(fid, UD_CB_LINK_NAME, &li, H5P_DEFAULT)<0) TEST_ERROR; - if(li.u.link_size != 16) TEST_ERROR; - if (UD_CB_TYPE != li.linkclass) { + if (H5Lget_linkinfo(fid, UD_CB_LINK_NAME, &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.u.link_size != 16) TEST_ERROR + if (UD_CB_TYPE != li.type) { H5_FAILED(); puts(" Unexpected link class - should have been a UD hard link"); goto error; } /* Fill the query buffer */ - if(H5Gget_linkval(fid, UD_CB_LINK_NAME, NAME_BUF_SIZE, query_buf) < 0) TEST_ERROR; - if(strcmp(query_buf, "query succeeded") != 0) TEST_ERROR; + if(H5Gget_linkval(fid, UD_CB_LINK_NAME, (size_t)NAME_BUF_SIZE, query_buf) < 0) TEST_ERROR + if(HDstrcmp(query_buf, "query succeeded") != 0) TEST_ERROR /* Move the link */ - if(H5Gmove(fid, UD_CB_LINK_NAME, NEW_UD_CB_LINK_NAME) < 0) TEST_ERROR; + if(H5Gmove(fid, UD_CB_LINK_NAME, NEW_UD_CB_LINK_NAME) < 0) TEST_ERROR /* Re-open group to ensure that move worked */ - if((gid = H5Gopen(fid, NEW_UD_CB_LINK_NAME)) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, NEW_UD_CB_LINK_NAME)) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Remove UD link */ - if(H5Gunlink(fid, NEW_UD_CB_LINK_NAME) < 0) TEST_ERROR; + if(H5Gunlink(fid, NEW_UD_CB_LINK_NAME) < 0) TEST_ERROR /* Test that the callbacks don't work if the link class is not registered */ @@ -4154,39 +4264,38 @@ ud_callbacks(hid_t fapl) /* Create a new link. Just for fun, give it a non-default character * encoding (to test that LAPLs work) */ if((lcpl = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR -#ifdef H5_GROUP_REVISION if(H5Pset_char_encoding(lcpl, H5T_CSET_UTF8) < 0) TEST_ERROR -#endif /* H5_GROUP_REVISION */ - if(H5Lcreate_ud(fid, UD_CB_LINK_NAME, UD_CB_TYPE, ud_target_name, UD_CB_TARGET_LEN, lcpl, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Pclose(lcpl)<0) TEST_ERROR + if(H5Lcreate_ud(fid, UD_CB_LINK_NAME, UD_CB_TYPE, ud_target_name, (size_t)UD_CB_TARGET_LEN, lcpl, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Pclose(lcpl) < 0) TEST_ERROR /* Check its character encoding */ -#ifdef H5_GROUP_REVISION - if(H5Lget_linkinfo(fid, UD_CB_LINK_NAME, &li, H5P_DEFAULT) < 0) TEST_ERROR; - if(li.cset != H5T_CSET_UTF8) TEST_ERROR; -#endif /* H5_GROUP_REVISION */ + if(H5Lget_linkinfo(fid, UD_CB_LINK_NAME, &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.cset != H5T_CSET_UTF8) TEST_ERROR /* Unregister the link class so the library forgets what its callbacks do */ - if(H5Lunregister(UD_CB_TYPE) < 0) TEST_ERROR; + if(H5Lunregister(UD_CB_TYPE) < 0) TEST_ERROR /* Now test that each of the callbacks fails */ H5E_BEGIN_TRY { - if(H5Lcreate_ud(fid, NEW_UD_CB_LINK_NAME, UD_CB_TYPE, ud_target_name, UD_CB_TARGET_LEN, H5P_DEFAULT, H5P_DEFAULT) >= 0) TEST_ERROR; - if(H5Gmove(fid, UD_CB_LINK_NAME, NEW_UD_CB_LINK_NAME) >= 0) TEST_ERROR; - if(H5Gunlink(fid, UD_CB_LINK_NAME) >= 0) TEST_ERROR; - if((gid = H5Gopen(gid, UD_CB_LINK_NAME)) >= 0) TEST_ERROR; - if(H5Gunlink(fid, UD_CB_LINK_NAME) >= 0) TEST_ERROR; + if(H5Lcreate_ud(fid, NEW_UD_CB_LINK_NAME, UD_CB_TYPE, ud_target_name, (size_t)UD_CB_TARGET_LEN, H5P_DEFAULT, H5P_DEFAULT) >= 0) TEST_ERROR + if(H5Gmove(fid, UD_CB_LINK_NAME, NEW_UD_CB_LINK_NAME) >= 0) TEST_ERROR + if(H5Gunlink(fid, UD_CB_LINK_NAME) >= 0) TEST_ERROR + if((gid = H5Gopen(gid, UD_CB_LINK_NAME)) >= 0) TEST_ERROR + if(H5Gunlink(fid, UD_CB_LINK_NAME) >= 0) TEST_ERROR } H5E_END_TRY /* The query callback should NOT fail, but should be unable to give a linklen */ - if(H5Lget_linkinfo(fid, UD_CB_LINK_NAME, &li, H5P_DEFAULT) <0) TEST_ERROR; - if(li.u.link_size != 0) TEST_ERROR; - if(li.linkclass != UD_CB_TYPE) TEST_ERROR; - if(H5Gget_objinfo(fid, UD_CB_LINK_NAME, FALSE, &sb) <0) TEST_ERROR; - if(sb.type != H5G_UDLINK) TEST_ERROR; + if(H5Lget_linkinfo(fid, UD_CB_LINK_NAME, &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.u.link_size != 0) TEST_ERROR + if(li.type != UD_CB_TYPE) TEST_ERROR + if(H5Gget_objinfo(fid, UD_CB_LINK_NAME, FALSE, &sb) < 0) TEST_ERROR + if(sb.type != H5G_UDLINK) TEST_ERROR + + /* Unregister the UD hard links */ + if(H5Lunregister(UD_HARD_TYPE) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -4221,21 +4330,21 @@ UD_plist_traverse(const char UNUSED * link_name, hid_t cur_group, void UNUSED * char target[NAME_BUF_SIZE]; hid_t ret_value; - if(udata_size != 0) TEST_ERROR; + if(udata_size != 0) TEST_ERROR /* Get the name of the target from the property list. */ - if(H5Pget(lapl_id, DEST_PROP_NAME, target) < 0) TEST_ERROR; + if(H5Pget(lapl_id, DEST_PROP_NAME, target) < 0) TEST_ERROR if((ret_value = H5Oopen(cur_group, target, lapl_id)) < 0) - TEST_ERROR; + TEST_ERROR return ret_value; error: return -1; } -const H5L_link_class_t UD_plist_class[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_plist_class[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_PLIST_TYPE, /* Link type id number */ "UD_plist_link", /* Link class name for debugging */ NULL, /* Creation callback */ @@ -4247,7 +4356,7 @@ const H5L_link_class_t UD_plist_class[1] = {{ }}; static int -lapl_udata(hid_t fapl) +lapl_udata(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -4256,70 +4365,77 @@ lapl_udata(hid_t fapl) char group_b_name[NAME_BUF_SIZE]; char filename[NAME_BUF_SIZE]; - TESTING("user data passed through lapl"); + if(new_format) + TESTING("user data passed through lapl (w/new group format)") + else + TESTING("user data passed through lapl") /* Set up filename and create file*/ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Register UD link types from previous tests to check that having * multiple types registered at once presents no problems. */ - if(H5Lregister(UD_cb_class) < 0) TEST_ERROR; + if(H5Lregister(UD_cb_class) < 0) TEST_ERROR /* Register the link class. We'll actually be using for this test. */ - if(H5Lregister(UD_plist_class) < 0) TEST_ERROR; + if(H5Lregister(UD_plist_class) < 0) TEST_ERROR /* Another link class from a previous test */ - if(H5Lregister(UD_hard_class) < 0) TEST_ERROR; + if(H5Lregister(UD_hard_class) < 0) TEST_ERROR /* Unregister the first link type registered to make sure this doesn't * break anything. */ - if(H5Lunregister(UD_CB_TYPE) < 0) TEST_ERROR; + if(H5Lunregister(UD_CB_TYPE) < 0) TEST_ERROR /* Create two groups for the UD link to point to */ - if((gid = H5Gcreate(fid, "group_a", 0)) <0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; - if((gid = H5Gcreate(fid, "group_b", 0)) <0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Gcreate(fid, "group_a", (size_t)0)) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR + if((gid = H5Gcreate(fid, "group_b", (size_t)0)) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Create a user-defined link to the group. These UD links have no udata. */ - if(H5Lcreate_ud(fid, "ud_link", UD_PLIST_TYPE, NULL, 0, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_ud(fid, "ud_link", UD_PLIST_TYPE, NULL, (size_t)0, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Create a non-default lapl with a new property pointing to group a*/ - if((plist_id = H5Pcreate(H5P_LINK_ACCESS)) < 0) TEST_ERROR; - strcpy(group_a_name, "group_a"); - if(H5Pinsert(plist_id, DEST_PROP_NAME, NAME_BUF_SIZE, group_a_name, NULL, NULL, NULL, NULL, NULL, NULL) < 0) TEST_ERROR; + if((plist_id = H5Pcreate(H5P_LINK_ACCESS)) < 0) TEST_ERROR + HDstrcpy(group_a_name, "group_a"); +#ifdef H5_WANT_H5_V1_6_COMPAT + if(H5Pinsert(plist_id, DEST_PROP_NAME, (size_t)NAME_BUF_SIZE, group_a_name, NULL, NULL, NULL, NULL, NULL) < 0) TEST_ERROR +#else /* H5_WANT_H5_V1_6_COMPAT */ + if(H5Pinsert(plist_id, DEST_PROP_NAME, (size_t)NAME_BUF_SIZE, group_a_name, NULL, NULL, NULL, NULL, NULL, NULL) < 0) TEST_ERROR +#endif /* H5_WANT_H5_V1_6_COMPAT */ /* Try opening group through UD link */ - if((gid = H5Oopen(fid, "ud_link", plist_id)) < 0) TEST_ERROR; - if((gid2 = H5Gcreate(gid, "subgroup_a", 0)) < 0) TEST_ERROR; - if(H5Gclose(gid2) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Oopen(fid, "ud_link", plist_id)) < 0) TEST_ERROR + if((gid2 = H5Gcreate(gid, "subgroup_a", (size_t)0)) < 0) TEST_ERROR + if(H5Gclose(gid2) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Verify that we can open the new group without using the ud link */ - if((gid2 = H5Gopen(fid, "/group_a/subgroup_a")) < 0) TEST_ERROR; - if(H5Gclose(gid2) < 0) TEST_ERROR; + if((gid2 = H5Gopen(fid, "/group_a/subgroup_a")) < 0) TEST_ERROR + if(H5Gclose(gid2) < 0) TEST_ERROR /* Now use the same ud link to access group_b */ strcpy(group_b_name, "group_b"); - if(H5Pset(plist_id, DEST_PROP_NAME, group_b_name)<0) TEST_ERROR; + if(H5Pset(plist_id, DEST_PROP_NAME, group_b_name) < 0) TEST_ERROR /* Create a subgroup */ - if((gid = H5Oopen(fid, "ud_link", plist_id)) < 0) TEST_ERROR; - if((gid2 = H5Gcreate(gid, "subgroup_b", 0)) < 0) TEST_ERROR; - if(H5Gclose(gid2) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Oopen(fid, "ud_link", plist_id)) < 0) TEST_ERROR + if((gid2 = H5Gcreate(gid, "subgroup_b", (size_t)0)) < 0) TEST_ERROR + if(H5Gclose(gid2) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Verify that we can open the new group without using the ud link */ - if((gid2 = H5Gopen(fid, "/group_b/subgroup_b")) < 0) TEST_ERROR; - if(H5Gclose(gid2) < 0) TEST_ERROR; + if((gid2 = H5Gopen(fid, "/group_b/subgroup_b")) < 0) TEST_ERROR + if(H5Gclose(gid2) < 0) TEST_ERROR /* Close property list */ - if(H5Pclose(plist_id) < 0) TEST_ERROR; + if(H5Pclose(plist_id) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -4455,8 +4571,8 @@ UD_cbsucc_query(const char UNUSED * link_name, void UNUSED * udata, size_t UNUSE } /* This class is full of failing callbacks */ -const H5L_link_class_t UD_cbfail_class1[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_cbfail_class1[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_CBFAIL_TYPE, /* Link type id number */ "UD_cbfail_link1", /* Link class name for debugging */ UD_cbsucc_create, /* Creation callback */ @@ -4468,8 +4584,8 @@ const H5L_link_class_t UD_cbfail_class1[1] = {{ }}; /* This class is has two failing callbacks, move and query */ -const H5L_link_class_t UD_cbfail_class2[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_cbfail_class2[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_CBFAIL_TYPE, /* Link type id number */ "UD_cbfail_link2", /* Link class name for debugging */ UD_cbsucc_create, /* Creation callback */ @@ -4481,8 +4597,8 @@ const H5L_link_class_t UD_cbfail_class2[1] = {{ }}; /* All of these callbacks will succeed */ -const H5L_link_class_t UD_cbfail_class3[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_cbfail_class3[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_CBFAIL_TYPE, /* Link type id number */ "UD_cbfail_link3", /* Link class name for debugging */ UD_cbsucc_create, /* Creation callback */ @@ -4494,8 +4610,8 @@ const H5L_link_class_t UD_cbfail_class3[1] = {{ }}; /* Link classes that are invalid for various reasons */ -const H5L_link_class_t UD_error1_class[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_error1_class[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_ERROR_TYPE, /* Link type id number */ "UD_error_link", /* Link class name for debugging */ NULL, /* Creation callback */ @@ -4505,8 +4621,8 @@ const H5L_link_class_t UD_error1_class[1] = {{ NULL, /* Deletion callback */ NULL /* Query callback */ }}; -const H5L_link_class_t UD_error2_class[1] = {{ - UD_BAD_VERS, /* Invalid H5L_link_class_t version */ +const H5L_class_t UD_error2_class[1] = {{ + UD_BAD_VERS, /* Invalid H5L_class_t version */ UD_ERROR_TYPE, /* Link type id number */ "UD_error_link", /* Link class name for debugging */ NULL, /* Creation callback */ @@ -4516,8 +4632,8 @@ const H5L_link_class_t UD_error2_class[1] = {{ NULL, /* Deletion callback */ NULL /* Query callback */ }}; -const H5L_link_class_t UD_error3_class[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_error3_class[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_BAD_TYPE1, /* Invalid Link type id number */ "UD_error_link", /* Link class name for debugging */ NULL, /* Creation callback */ @@ -4527,8 +4643,8 @@ const H5L_link_class_t UD_error3_class[1] = {{ NULL, /* Deletion callback */ NULL /* Query callback */ }}; -const H5L_link_class_t UD_error4_class[1] = {{ - H5L_LINK_CLASS_T_VERS, /* H5L_link_class_t version */ +const H5L_class_t UD_error4_class[1] = {{ + H5L_LINK_CLASS_T_VERS, /* H5L_class_t version */ UD_BAD_TYPE2, /* Invalid Link type id number */ "UD_error_link", /* Link class name for debugging */ NULL, /* Creation callback */ @@ -4540,7 +4656,7 @@ const H5L_link_class_t UD_error4_class[1] = {{ }}; static int -ud_link_errors(hid_t fapl) +ud_link_errors(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1); /* Group IDs */ @@ -4549,56 +4665,59 @@ ud_link_errors(hid_t fapl) char query_buf[NAME_BUF_SIZE]; H5L_linkinfo_t li; /* Link information */ - TESTING("user-defined link error conditions"); + if(new_format) + TESTING("user-defined link error conditions (w/new group format)") + else + TESTING("user-defined link error conditions") /* Set up filename and create file*/ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Try to register some invalid link classes */ H5E_BEGIN_TRY { - if(H5Lregister(UD_error1_class) >= 0) TEST_ERROR; - if(H5Lregister(UD_error2_class) >= 0) TEST_ERROR; - if(H5Lregister(UD_error3_class) >= 0) TEST_ERROR; - if(H5Lregister(UD_error4_class) >= 0) TEST_ERROR; + if(H5Lregister(UD_error1_class) >= 0) TEST_ERROR + if(H5Lregister(UD_error2_class) >= 0) TEST_ERROR + if(H5Lregister(UD_error3_class) >= 0) TEST_ERROR + if(H5Lregister(UD_error4_class) >= 0) TEST_ERROR } H5E_END_TRY /* Register the UD plist class. */ - if(H5Lregister(UD_plist_class) < 0) TEST_ERROR; + if(H5Lregister(UD_plist_class) < 0) TEST_ERROR /* Now register the first class we'll be using. * It has the same ID as the plist class, and should replace it. */ - if(H5Lregister(UD_cbfail_class1) < 0) TEST_ERROR; + if(H5Lregister(UD_cbfail_class1) < 0) TEST_ERROR /* Create a group for the UD link to point to */ - if((gid = H5Gcreate(fid, "group", 0)) <0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Gcreate(fid, "group", (size_t)0)) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Create a user-defined link to the group. */ strcpy(group_name, "/group"); - if(H5Lcreate_ud(fid, "/ud_link", UD_CBFAIL_TYPE, &group_name, strlen(group_name) + 1, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_ud(fid, "/ud_link", UD_CBFAIL_TYPE, &group_name, HDstrlen(group_name) + 1, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Open the group through the ud link */ - if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "ud_link")) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR /* Now test that each of the callbacks will cause a failure if it returns -1 */ H5E_BEGIN_TRY { /* The create callback will fail if we pass in no udata */ - if(H5Lcreate_ud(fid, "fail", UD_CBFAIL_TYPE, NULL, 0, H5P_DEFAULT, H5P_DEFAULT) >= 0) TEST_ERROR; + if(H5Lcreate_ud(fid, "fail", UD_CBFAIL_TYPE, NULL, (size_t)0, H5P_DEFAULT, H5P_DEFAULT) >= 0) TEST_ERROR /* The move and copy callbacks will fail */ - if(H5Gmove(fid, "ud_link", "move_fail") >= 0) TEST_ERROR; - if(H5Lcopy(fid, "ud_link", fid, "copy_fail", H5P_DEFAULT, H5P_DEFAULT) >= 0) TEST_ERROR; + if(H5Gmove(fid, "ud_link", "move_fail") >= 0) TEST_ERROR + if(H5Lcopy(fid, "ud_link", fid, "copy_fail", H5P_DEFAULT, H5P_DEFAULT) >= 0) TEST_ERROR /* The traversal callback will fail if we remove its target */ - if(H5Gunlink(fid, "group") < 0) TEST_ERROR; - if((gid = H5Gopen(gid, "ud_link")) >= 0) TEST_ERROR; + if(H5Gunlink(fid, "group") < 0) TEST_ERROR + if((gid = H5Gopen(gid, "ud_link")) >= 0) TEST_ERROR /* The deletion callback will always fail */ - if(H5Gunlink(fid, "ud_link") >= 0) TEST_ERROR; + if(H5Gunlink(fid, "ud_link") >= 0) TEST_ERROR /* The query callback will fail */ - if(H5Lget_linkinfo(fid, "ud_link", &li, H5P_DEFAULT) >=0) TEST_ERROR; + if(H5Lget_linkinfo(fid, "ud_link", &li, H5P_DEFAULT) >=0) TEST_ERROR } H5E_END_TRY /* Now use a class with different callback functions */ - if(H5Lregister(UD_cbfail_class2) < 0) TEST_ERROR; + if(H5Lregister(UD_cbfail_class2) < 0) TEST_ERROR /* Moving should still fail, but copying will succeed */ H5E_BEGIN_TRY { @@ -4607,31 +4726,31 @@ ud_link_errors(hid_t fapl) if(H5Lcopy(fid, "ud_link", fid, "copy_succ", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* The query callback will succeed when we only want to get the size of the buffer... */ - if(H5Lget_linkinfo(fid, "ud_link", &li, H5P_DEFAULT) <0) TEST_ERROR; - if(li.u.link_size != 0) TEST_ERROR; + if(H5Lget_linkinfo(fid, "ud_link", &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.u.link_size != 0) TEST_ERROR /* ...but fail when we try to write data to the buffer itself*/ H5E_BEGIN_TRY { - if(H5Lget_linkval(fid, "ud_link", NAME_BUF_SIZE, query_buf, H5P_DEFAULT) >=0) TEST_ERROR; + if(H5Lget_linkval(fid, "ud_link", (size_t)NAME_BUF_SIZE, query_buf, H5P_DEFAULT) >=0) TEST_ERROR } H5E_END_TRY /* Register a new class */ - if(H5Lregister(UD_cbfail_class3) < 0) TEST_ERROR; + if(H5Lregister(UD_cbfail_class3) < 0) TEST_ERROR /* Now querying should succeed */ - if(H5Lget_linkinfo(fid, "ud_link", &li, H5P_DEFAULT) <0) TEST_ERROR; - if(li.u.link_size != 8) TEST_ERROR; - if(H5Lget_linkval(fid, "ud_link", NAME_BUF_SIZE, query_buf, H5P_DEFAULT) <0) TEST_ERROR; - if(HDstrcmp(query_buf, "succeed") != 0) TEST_ERROR; + if(H5Lget_linkinfo(fid, "ud_link", &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.u.link_size != 8) TEST_ERROR + if(H5Lget_linkval(fid, "ud_link", (size_t)NAME_BUF_SIZE, query_buf, H5P_DEFAULT) < 0) TEST_ERROR + if(HDstrcmp(query_buf, "succeed") != 0) TEST_ERROR /* Moving and copying should both succeed */ if(H5Gmove(fid, "copy_succ", "move_succ") < 0) TEST_ERROR if(H5Lcopy(fid, "ud_link", fid, "copy_succ2", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Delete link (this callback should work now) */ - if(H5Gunlink(fid, "ud_link") <0) TEST_ERROR; + if(H5Gunlink(fid, "ud_link") < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -4645,7 +4764,6 @@ ud_link_errors(hid_t fapl) } - /*------------------------------------------------------------------------- * Function: lapl_nlinks * @@ -4664,7 +4782,7 @@ ud_link_errors(hid_t fapl) *------------------------------------------------------------------------- */ static int -lapl_nlinks(hid_t fapl) +lapl_nlinks(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1), gid2 = (-1); /* Group IDs */ @@ -4677,61 +4795,64 @@ lapl_nlinks(hid_t fapl) size_t nlinks; /* nlinks for H5Pset_nlinks */ hsize_t dims[2]; - TESTING("adjusting nlinks with LAPL"); + if(new_format) + TESTING("adjusting nlinks with LAPL (w/new group format)") + else + TESTING("adjusting nlinks with LAPL") /* Make certain test is valid */ /* XXX: should probably make a "generic" test that creates the proper * # of links based on this value - QAK */ - HDassert(H5G_NLINKS == 16); + HDassert(H5L_NLINKS_DEF == 16); /* Create file */ h5_fixname(FILENAME[1], fapl, filename, sizeof filename); - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create group with short name in file (used as target for links) */ - if((gid=H5Gcreate (fid, "final", (size_t)0))<0) TEST_ERROR; + if((gid=H5Gcreate (fid, "final", (size_t)0)) < 0) TEST_ERROR /* Create chain of soft links to existing object (limited) */ - if(H5Glink2(fid, "final", H5G_LINK_SOFT, fid, "soft1") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft1", H5G_LINK_SOFT, fid, "soft2") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft2", H5G_LINK_SOFT, fid, "soft3") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft3", H5G_LINK_SOFT, fid, "soft4") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft4", H5G_LINK_SOFT, fid, "soft5") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft5", H5G_LINK_SOFT, fid, "soft6") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft6", H5G_LINK_SOFT, fid, "soft7") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft7", H5G_LINK_SOFT, fid, "soft8") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft8", H5G_LINK_SOFT, fid, "soft9") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft9", H5G_LINK_SOFT, fid, "soft10") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft10", H5G_LINK_SOFT, fid, "soft11") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft11", H5G_LINK_SOFT, fid, "soft12") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft12", H5G_LINK_SOFT, fid, "soft13") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft13", H5G_LINK_SOFT, fid, "soft14") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft14", H5G_LINK_SOFT, fid, "soft15") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft15", H5G_LINK_SOFT, fid, "soft16") < 0) TEST_ERROR; - if(H5Glink2(fid, "soft16", H5G_LINK_SOFT, fid, "soft17") < 0) TEST_ERROR; + if(H5Glink2(fid, "final", H5G_LINK_SOFT, fid, "soft1") < 0) TEST_ERROR + if(H5Glink2(fid, "soft1", H5G_LINK_SOFT, fid, "soft2") < 0) TEST_ERROR + if(H5Glink2(fid, "soft2", H5G_LINK_SOFT, fid, "soft3") < 0) TEST_ERROR + if(H5Glink2(fid, "soft3", H5G_LINK_SOFT, fid, "soft4") < 0) TEST_ERROR + if(H5Glink2(fid, "soft4", H5G_LINK_SOFT, fid, "soft5") < 0) TEST_ERROR + if(H5Glink2(fid, "soft5", H5G_LINK_SOFT, fid, "soft6") < 0) TEST_ERROR + if(H5Glink2(fid, "soft6", H5G_LINK_SOFT, fid, "soft7") < 0) TEST_ERROR + if(H5Glink2(fid, "soft7", H5G_LINK_SOFT, fid, "soft8") < 0) TEST_ERROR + if(H5Glink2(fid, "soft8", H5G_LINK_SOFT, fid, "soft9") < 0) TEST_ERROR + if(H5Glink2(fid, "soft9", H5G_LINK_SOFT, fid, "soft10") < 0) TEST_ERROR + if(H5Glink2(fid, "soft10", H5G_LINK_SOFT, fid, "soft11") < 0) TEST_ERROR + if(H5Glink2(fid, "soft11", H5G_LINK_SOFT, fid, "soft12") < 0) TEST_ERROR + if(H5Glink2(fid, "soft12", H5G_LINK_SOFT, fid, "soft13") < 0) TEST_ERROR + if(H5Glink2(fid, "soft13", H5G_LINK_SOFT, fid, "soft14") < 0) TEST_ERROR + if(H5Glink2(fid, "soft14", H5G_LINK_SOFT, fid, "soft15") < 0) TEST_ERROR + if(H5Glink2(fid, "soft15", H5G_LINK_SOFT, fid, "soft16") < 0) TEST_ERROR + if(H5Glink2(fid, "soft16", H5G_LINK_SOFT, fid, "soft17") < 0) TEST_ERROR /* Close objects */ - if(H5Gclose(gid)<0) TEST_ERROR; - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR + if(H5Fclose(fid) < 0) TEST_ERROR /* Open file */ - if((fid=H5Fopen(filename, H5F_ACC_RDWR, fapl))<0) TEST_ERROR; + if((fid=H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR /* Create LAPL with higher-than-usual nlinks value */ /* Create a non-default lapl with udata set to point to the first group */ - if((plist = H5Pcreate(H5P_LINK_ACCESS)) < 0) TEST_ERROR; + if((plist = H5Pcreate(H5P_LINK_ACCESS)) < 0) TEST_ERROR nlinks = 20; - if(H5Pset_nlinks(plist, nlinks)<0) TEST_ERROR; + if(H5Pset_nlinks(plist, nlinks) < 0) TEST_ERROR /* Ensure that nlinks was set successfully */ nlinks = 0; - if(H5Pget_nlinks(plist, &nlinks)<0) TEST_ERROR + if(H5Pget_nlinks(plist, &nlinks) < 0) TEST_ERROR if(nlinks != 20) TEST_ERROR /* Open object through what is normally too many soft links using * new property list */ - if((gid = H5Oopen(fid, "soft17", plist)) < 0) TEST_ERROR; + if((gid = H5Oopen(fid, "soft17", plist)) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -4742,16 +4863,16 @@ lapl_nlinks(hid_t fapl) /* Close groups */ if(H5Gclose(gid2) < 0) TEST_ERROR - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Set nlinks to a smaller number */ nlinks = 4; - if(H5Pset_nlinks(plist, nlinks)<0) TEST_ERROR; + if(H5Pset_nlinks(plist, nlinks) < 0) TEST_ERROR /* Ensure that nlinks was set successfully */ nlinks = 0; - if(H5Pget_nlinks(plist, &nlinks)<0) TEST_ERROR; - if(nlinks != 4) TEST_ERROR; + if(H5Pget_nlinks(plist, &nlinks) < 0) TEST_ERROR + if(nlinks != 4) TEST_ERROR /* Try opening through what is now too many soft links */ H5E_BEGIN_TRY { @@ -4764,7 +4885,7 @@ lapl_nlinks(hid_t fapl) } /* Open object through lesser soft link */ - if((gid = H5Oopen(fid, "soft4", plist)) < 0) TEST_ERROR; + if((gid = H5Oopen(fid, "soft4", plist)) < 0) TEST_ERROR /* Check name */ if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR @@ -4773,9 +4894,9 @@ lapl_nlinks(hid_t fapl) /* Test other functions that should use a LAPL */ nlinks = 20; - if(H5Pset_nlinks(plist, nlinks)<0) TEST_ERROR; + if(H5Pset_nlinks(plist, nlinks) < 0) TEST_ERROR - /* Try copying and moving when both src and dst cotain many soft links + /* Try copying and moving when both src and dst contain many soft links * using a non-default LAPL */ if(H5Lcopy(fid, "soft17", fid, "soft17/newer_soft", H5P_DEFAULT, plist) < 0) TEST_ERROR @@ -4792,16 +4913,16 @@ lapl_nlinks(hid_t fapl) if(H5Lunlink(fid, "soft17/soft_link", plist) < 0) TEST_ERROR /* H5Lget_linkval and H5Lget_linkinfo */ - if(H5Lget_linkval(fid, "soft17", 0, NULL, plist) < 0) TEST_ERROR + if(H5Lget_linkval(fid, "soft17", (size_t)0, NULL, plist) < 0) TEST_ERROR if(H5Lget_linkinfo(fid, "soft17", NULL, plist) < 0) TEST_ERROR /* H5Lcreate_external and H5Lcreate_ud */ - if(H5Lcreate_external("filename", "path", fid, "soft17/extlink", H5P_DEFAULT, plist) <0) TEST_ERROR + if(H5Lcreate_external("filename", "path", fid, "soft17/extlink", H5P_DEFAULT, plist) < 0) TEST_ERROR if(H5Lregister(UD_rereg_class) < 0) TEST_ERROR - if(H5Lcreate_ud(fid, "soft17/udlink", UD_HARD_TYPE, NULL, 0, H5P_DEFAULT, plist) < 0) TEST_ERROR + if(H5Lcreate_ud(fid, "soft17/udlink", UD_HARD_TYPE, NULL, (size_t)0, H5P_DEFAULT, plist) < 0) TEST_ERROR /* Close plist */ - if(H5Pclose(plist) < 0) TEST_ERROR; + if(H5Pclose(plist) < 0) TEST_ERROR /* Create a datatype and dataset as targets inside the group */ @@ -4813,27 +4934,27 @@ lapl_nlinks(hid_t fapl) dims[1] = 2; if((sid = H5Screate_simple(2, dims, NULL)) < 0) TEST_ERROR if((did = H5Dcreate(gid, "dataset", H5T_NATIVE_INT, sid, H5P_DEFAULT)) < 0) TEST_ERROR - if(H5Dclose(did) < 0) TEST_ERROR; + if(H5Dclose(did) < 0) TEST_ERROR /* Close group */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Try to open the objects using too many symlinks with default *APLs */ H5E_BEGIN_TRY { if((gid = H5Gopen_expand(fid, "soft17", H5P_DEFAULT)) >=0) { H5_FAILED(); puts(" Should have failed for too many nested links."); - TEST_ERROR; + TEST_ERROR } if((tid = H5Topen_expand(fid, "soft17/datatype", H5P_DEFAULT)) >=0) { H5_FAILED(); puts(" Should have failed for too many nested links."); - TEST_ERROR; + TEST_ERROR } if((did = H5Dopen_expand(fid, "soft17/dataset", H5P_DEFAULT)) >=0) { H5_FAILED(); puts(" Should have failed for too many nested links."); - TEST_ERROR; + TEST_ERROR } } H5E_END_TRY @@ -4850,9 +4971,9 @@ lapl_nlinks(hid_t fapl) /* We should now be able to use these property lists to open each kind * of object. */ - if((gid = H5Gopen_expand(fid, "soft17", gapl)) <0) TEST_ERROR - if((tid = H5Topen_expand(fid, "soft17/datatype", tapl)) <0) TEST_ERROR - if((did = H5Dopen_expand(fid, "soft17/dataset", dapl)) <0) TEST_ERROR + if((gid = H5Gopen_expand(fid, "soft17", gapl)) < 0) TEST_ERROR + if((tid = H5Topen_expand(fid, "soft17/datatype", tapl)) < 0) TEST_ERROR + if((did = H5Dopen_expand(fid, "soft17/dataset", dapl)) < 0) TEST_ERROR /* Close objects */ if(H5Gclose(gid) < 0) TEST_ERROR @@ -4860,12 +4981,15 @@ lapl_nlinks(hid_t fapl) if(H5Dclose(did) < 0) TEST_ERROR /* Close plists */ - if(H5Pclose(gapl) < 0) TEST_ERROR; - if(H5Pclose(tapl) < 0) TEST_ERROR; - if(H5Pclose(dapl) < 0) TEST_ERROR; + if(H5Pclose(gapl) < 0) TEST_ERROR + if(H5Pclose(tapl) < 0) TEST_ERROR + if(H5Pclose(dapl) < 0) TEST_ERROR + + /* Unregister UD hard link class */ + if(H5Lunregister(UD_HARD_TYPE) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -4885,9 +5009,10 @@ lapl_nlinks(hid_t fapl) } H5E_END_TRY; return -1; } /* end lapl_nlinks() */ + /*------------------------------------------------------------------------- - * Function: objinfo_linkclass + * Function: linkinfo * * Purpose: Check that the link class is returned correctly when queried. * @@ -4900,7 +5025,7 @@ lapl_nlinks(hid_t fapl) *------------------------------------------------------------------------- */ static int -linkinfo(hid_t fapl) +linkinfo(hid_t fapl, hbool_t new_format) { hid_t fid = (-1); /* File ID */ hid_t gid = (-1); /* Group ID */ @@ -4909,52 +5034,55 @@ linkinfo(hid_t fapl) H5L_linkinfo_t li; /* Link information */ char filename[NAME_BUF_SIZE]; - TESTING("linkclass field in H5Gget_objinfo"); + if(new_format) + TESTING("link type field in H5Gget_objinfo (w/new group format)") + else + TESTING("link type field in H5Gget_objinfo") /* Set up filename and create file*/ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR; + if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Register a couple of user-defined link classes with the library */ - if(H5Lregister(UD_plist_class) < 0) TEST_ERROR; + if(H5Lregister(UD_plist_class) < 0) TEST_ERROR /* Create an object of each type */ - if((tid = H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR; - if(H5Tcommit(fid, "datatype", tid) < 0) TEST_ERROR; - if((gid = H5Gcreate(fid, "group", 0)) < 0) TEST_ERROR; - if(H5Glink(fid, H5G_LINK_SOFT, "group", "softlink") < 0) TEST_ERROR; + if((tid = H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR + if(H5Tcommit(fid, "datatype", tid) < 0) TEST_ERROR + if((gid = H5Gcreate(fid, "group", (size_t)0)) < 0) TEST_ERROR + if(H5Glink(fid, H5G_LINK_SOFT, "group", "softlink") < 0) TEST_ERROR - if((sid = H5Screate(H5S_SCALAR)) < 0) TEST_ERROR; - if((did = H5Dcreate(fid, "dataset", H5T_NATIVE_INT, sid, H5P_DEFAULT)) < 0) TEST_ERROR; + if((sid = H5Screate(H5S_SCALAR)) < 0) TEST_ERROR + if((did = H5Dcreate(fid, "dataset", H5T_NATIVE_INT, sid, H5P_DEFAULT)) < 0) TEST_ERROR - if(H5Lcreate_ud(fid, "ud_link", UD_PLIST_TYPE, NULL, 0, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - if(H5Lcreate_external("file_name", "obj_path", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lcreate_ud(fid, "ud_link", UD_PLIST_TYPE, NULL, (size_t)0, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + if(H5Lcreate_external("file_name", "obj_path", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR /* Close all objects */ - if(H5Tclose(tid) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; - if(H5Dclose(did) < 0) TEST_ERROR; - - /* Make sure that linkclass is correct when objects are queried */ - if(H5Lget_linkinfo(fid, "datatype", &li, H5P_DEFAULT) < 0) TEST_ERROR; - if(li.linkclass != H5L_LINK_HARD) TEST_ERROR; - if(H5Lget_linkinfo(fid, "group", &li, H5P_DEFAULT) < 0) TEST_ERROR; - if(li.linkclass != H5L_LINK_HARD) TEST_ERROR; - if(H5Lget_linkinfo(fid, "dataset", &li, H5P_DEFAULT) < 0) TEST_ERROR; - if(li.linkclass != H5L_LINK_HARD) TEST_ERROR; - - if(H5Lget_linkinfo(fid, "ext_link", &li, H5P_DEFAULT) < 0) TEST_ERROR; - if(li.linkclass != H5L_LINK_EXTERNAL) TEST_ERROR; - if(H5Lget_linkinfo(fid, "softlink", &li, H5P_DEFAULT) < 0) TEST_ERROR; - if(li.linkclass != H5G_LINK_SOFT) TEST_ERROR; - if(H5Lget_linkinfo(fid, "ud_link", &li, H5P_DEFAULT) < 0) TEST_ERROR; - if(li.linkclass != UD_PLIST_TYPE) TEST_ERROR; + if(H5Tclose(tid) < 0) TEST_ERROR + if(H5Gclose(gid) < 0) TEST_ERROR + if(H5Dclose(did) < 0) TEST_ERROR + + /* Make sure that link type is correct when objects are queried */ + if(H5Lget_linkinfo(fid, "datatype", &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.type != H5L_TYPE_HARD) TEST_ERROR + if(H5Lget_linkinfo(fid, "group", &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.type != H5L_TYPE_HARD) TEST_ERROR + if(H5Lget_linkinfo(fid, "dataset", &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.type != H5L_TYPE_HARD) TEST_ERROR + + if(H5Lget_linkinfo(fid, "ext_link", &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.type != H5L_TYPE_EXTERNAL) TEST_ERROR + if(H5Lget_linkinfo(fid, "softlink", &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.type != H5G_LINK_SOFT) TEST_ERROR + if(H5Lget_linkinfo(fid, "ud_link", &li, H5P_DEFAULT) < 0) TEST_ERROR + if(li.type != UD_PLIST_TYPE) TEST_ERROR /* Ensure that passing a NULL pointer doesn't cause an error */ - if(H5Lget_linkinfo(fid, "group", NULL, H5P_DEFAULT) < 0) TEST_ERROR; + if(H5Lget_linkinfo(fid, "group", NULL, H5P_DEFAULT) < 0) TEST_ERROR - if(H5Fclose(fid) < 0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -4989,13 +5117,16 @@ linkinfo(hid_t fapl) *------------------------------------------------------------------------- */ static int -check_all_closed(hid_t fapl) +check_all_closed(hid_t fapl, hbool_t new_format) { hid_t fid=-1; char filename[NAME_BUF_SIZE]; int x; - TESTING("that all files were closed correctly") + if(new_format) + TESTING("that all files were closed correctly (w/new group format)") + else + TESTING("that all files were closed correctly") /* Some of the external or UD link tests may have failed to close * an external file properly. @@ -5034,86 +5165,91 @@ check_all_closed(hid_t fapl) * Programmer: Robb Matzke * Friday, August 14, 1998 * - * Modifications: - * *------------------------------------------------------------------------- */ int main(void) { - int nerrors = 0; - hid_t fapl; const char *envval = NULL; envval = HDgetenv("HDF5_DRIVER"); - if (envval == NULL) + if(envval == NULL) envval = "nomatch"; - if (HDstrcmp(envval, "core") && HDstrcmp(envval, "split") && HDstrcmp(envval, "multi") && HDstrcmp(envval, "family") && HDstrcmp(envval, "stdio")) { + if(HDstrcmp(envval, "core") && HDstrcmp(envval, "split") && HDstrcmp(envval, "multi") && HDstrcmp(envval, "family") && HDstrcmp(envval, "stdio")) { + hid_t fapl, fapl2; /* File access property lists */ + int nerrors = 0; + hbool_t new_format; /* Whether to use the new format or not */ + h5_reset(); fapl = h5_fileaccess(); - /* The tests... */ - nerrors += mklinks(fapl) < 0 ? 1 : 0; - nerrors += cklinks(fapl) < 0 ? 1 : 0; - nerrors += new_links(fapl) < 0 ? 1 : 0; - nerrors += ck_new_links(fapl) < 0 ? 1 : 0; - nerrors += long_links(fapl) < 0 ? 1 : 0; - nerrors += toomany(fapl) < 0 ? 1 : 0; - - /* Test new H5L link creation routine */ -#ifdef H5_GROUP_REVISION - nerrors += test_h5l_create(fapl); - nerrors += test_lcpl(fapl); -#endif - nerrors += test_move(fapl); - nerrors += test_copy(fapl); -#ifdef H5_GROUP_REVISION - nerrors += test_move_preserves(fapl); -#endif - nerrors += test_compat(fapl); + + /* Copy the file access property list */ + if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR + + /* Set the "use the latest version of the format" flag for creating objects in the file */ + if(H5Pset_latest_format(fapl2, TRUE) < 0) TEST_ERROR + + /* Loop over using new group format */ + for(new_format = FALSE; new_format <= TRUE; new_format++) { + /* General tests... (on both old & new format groups */ + nerrors += mklinks((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += cklinks((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += new_links((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += ck_new_links((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += long_links((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += toomany((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + + /* Test new H5L link creation routine */ + nerrors += test_h5l_create((new_format ? fapl2 : fapl), new_format); + nerrors += test_lcpl((new_format ? fapl2 : fapl), new_format); + nerrors += test_move((new_format ? fapl2 : fapl), new_format); + nerrors += test_copy((new_format ? fapl2 : fapl), new_format); + nerrors += test_move_preserves((new_format ? fapl2 : fapl), new_format); + nerrors += test_compat((new_format ? fapl2 : fapl), new_format); #ifndef H5_CANNOT_OPEN_TWICE - nerrors += external_link_root(fapl) < 0 ? 1 : 0; + nerrors += external_link_root((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; #endif /* H5_CANNOT_OPEN_TWICE */ - nerrors += external_link_path(fapl) < 0 ? 1 : 0; - nerrors += external_link_mult(fapl) < 0 ? 1 : 0; -#ifdef H5_GROUP_REVISION - nerrors += external_link_self(fapl) < 0 ? 1 : 0; -#endif + nerrors += external_link_path((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += external_link_mult((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += external_link_self((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; #ifndef H5_CANNOT_OPEN_TWICE - nerrors += external_link_pingpong(fapl) < 0 ? 1 : 0; - nerrors += external_link_toomany(fapl) < 0 ? 1 : 0; + nerrors += external_link_pingpong((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += external_link_toomany((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; #endif /* H5_CANNOT_OPEN_TWICE */ - nerrors += external_link_dangling(fapl) < 0 ? 1 : 0; - nerrors += external_link_recursive(fapl) < 0 ? 1 : 0; - nerrors += external_link_query(fapl) < 0 ? 1 : 0; - nerrors += external_link_unlink_compact(fapl) < 0 ? 1 : 0; -#ifdef H5_GROUP_REVISION - nerrors += external_link_unlink_dense(fapl) < 0 ? 1 : 0; -#endif /* H5_GROUP_REVISION */ - nerrors += external_link_move(fapl) < 0 ? 1 : 0; -#ifdef H5_GROUP_REVISION - nerrors += external_link_ride(fapl) < 0 ? 1 : 0; -#endif /* H5_GROUP_REVISION */ + nerrors += external_link_dangling((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += external_link_recursive((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += external_link_query((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += external_link_unlink_compact((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += external_link_unlink_dense((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += external_link_move((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += external_link_ride((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; #ifndef H5_CANNOT_OPEN_TWICE - nerrors += external_link_closing(fapl) < 0 ? 1 : 0; + nerrors += external_link_closing((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; #endif /* H5_CANNOT_OPEN_TWICE */ - nerrors += external_link_endian(fapl) < 0 ? 1 : 0; - - /* These tests assume that external links are a form of UD links, - * so assume that everything that passed for external links - * above has already been tested for UD links. - */ - nerrors += ud_hard_links(fapl) < 0 ? 1 : 0; - nerrors += ud_link_reregister(fapl) < 0 ? 1 : 0; - nerrors += ud_callbacks(fapl) < 0 ? 1 : 0; - nerrors += ud_link_errors(fapl) < 0 ? 1 : 0; - nerrors += lapl_udata(fapl) < 0 ? 1 : 0; - nerrors += lapl_nlinks(fapl) < 0 ? 1 : 0; - nerrors += linkinfo(fapl) < 0 ? 1 : 0; - - nerrors += check_all_closed(fapl) < 0 ? 1 : 0; + nerrors += external_link_endian((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + + /* These tests assume that external links are a form of UD links, + * so assume that everything that passed for external links + * above has already been tested for UD links. + */ + if(new_format == TRUE) { + nerrors += ud_hard_links(fapl2) < 0 ? 1 : 0; /* requires new format groups */ + nerrors += ud_link_reregister(fapl2) < 0 ? 1 : 0; /* requires new format groups */ + } /* end if */ + nerrors += ud_callbacks((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += ud_link_errors((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += lapl_udata((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += lapl_nlinks((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + nerrors += linkinfo((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + + nerrors += check_all_closed((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0; + } /* end for */ + + /* Close 2nd FAPL */ + H5Pclose(fapl2); /* Results */ - if (nerrors) { + if(nerrors) { printf("***** %d LINK TEST%s FAILED! *****\n", nerrors, 1 == nerrors ? "" : "S"); exit(1); @@ -5122,11 +5258,12 @@ main(void) h5_cleanup(FILENAME, fapl); } else - { puts("All link tests skipped - Incompatible with current Virtual File Driver"); - } return 0; +error: + puts("*** TESTS FAILED ***"); + return 1; } |