diff options
author | Jonathan Kim <jkm@hdfgroup.org> | 2010-04-22 18:17:35 (GMT) |
---|---|---|
committer | Jonathan Kim <jkm@hdfgroup.org> | 2010-04-22 18:17:35 (GMT) |
commit | 249acc03550e9cb2ed3cfaa56737215910a7a194 (patch) | |
tree | ff576ef83e636639b4a707bb174466afdc39af5f /tools/h5copy | |
parent | 20a020a1c7bccce730be91118b3366b7cabe95fc (diff) | |
download | hdf5-249acc03550e9cb2ed3cfaa56737215910a7a194.zip hdf5-249acc03550e9cb2ed3cfaa56737215910a7a194.tar.gz hdf5-249acc03550e9cb2ed3cfaa56737215910a7a194.tar.bz2 |
[svn-r18614] Purpose:
Fix for bug 1817 : h5copy fail to copy dangling link by specifying
link path directly
Tested:
jam, amani, linew
Diffstat (limited to 'tools/h5copy')
-rw-r--r-- | tools/h5copy/h5copy.c | 29 | ||||
-rw-r--r-- | tools/h5copy/testfiles/h5copy_extlinks_src.out.ls | 16 | ||||
-rw-r--r-- | tools/h5copy/testh5copy.sh | 12 |
3 files changed, 42 insertions, 15 deletions
diff --git a/tools/h5copy/h5copy.c b/tools/h5copy/h5copy.c index 992195d..0ea8e16 100644 --- a/tools/h5copy/h5copy.c +++ b/tools/h5copy/h5copy.c @@ -213,6 +213,8 @@ main (int argc, const char *argv[]) hid_t lcpl_id = (-1); /* Link creation property list */ char str_flag[20]; int opt; + int li_ret; + h5tool_link_info_t linkinfo; /* initialize h5tools lib */ h5tools_init(); @@ -406,7 +408,22 @@ main (int argc, const char *argv[]) /*------------------------------------------------------------------------- * do the copy *-------------------------------------------------------------------------*/ - + /* init linkinfo struct */ + memset(&linkinfo, 0, sizeof(h5tool_link_info_t)); + + if(verbose) + linkinfo.opt.msg_mode = 1; + + li_ret = H5tools_get_link_info(fid_src, oname_src, &linkinfo); + if (li_ret == 0) /* dangling link */ + { + if(H5Lcopy(fid_src, oname_src, + fid_dst, oname_dst, + H5P_DEFAULT, H5P_DEFAULT) < 0) + goto error; + } + else /* valid link */ + { if (H5Ocopy(fid_src, /* Source file or group identifier */ oname_src, /* Name of the source object to be copied */ fid_dst, /* Destination file or group identifier */ @@ -414,6 +431,11 @@ main (int argc, const char *argv[]) ocpl_id, /* Object copy property list */ lcpl_id)<0) /* Link creation property list */ goto error; + } + + /* free link info path */ + if (linkinfo.trg_path) + free(linkinfo.trg_path); /* close propertis */ if(H5Pclose(ocpl_id)<0) @@ -442,6 +464,11 @@ main (int argc, const char *argv[]) error: printf("Error in copy...Exiting\n"); + + /* free link info path */ + if (linkinfo.trg_path) + free(linkinfo.trg_path); + H5E_BEGIN_TRY { H5Pclose(ocpl_id); H5Pclose(lcpl_id); diff --git a/tools/h5copy/testfiles/h5copy_extlinks_src.out.ls b/tools/h5copy/testfiles/h5copy_extlinks_src.out.ls index a9927f8..e0047a7 100644 --- a/tools/h5copy/testfiles/h5copy_extlinks_src.out.ls +++ b/tools/h5copy/testfiles/h5copy_extlinks_src.out.ls @@ -11,7 +11,7 @@ Opened "./testfiles/h5copy_extlinks_src.out.h5" with sec2 driver. Storage: <details removed for portability> Type: 32-bit little-endian integer /copy1_group Group - Location: 1:4344 + Location: 1:4696 Links: 1 /copy1_group/extlink_datatype External Link {h5copy_extlinks_trg.h5//datatype} /copy1_group/extlink_dset External Link {h5copy_extlinks_trg.h5//simple} @@ -24,19 +24,23 @@ Opened "./testfiles/h5copy_extlinks_src.out.h5" with sec2 driver. Storage: <details removed for portability> Type: 32-bit little-endian integer /copy2_group Group - Location: 1:4712 + Location: 1:5128 Links: 1 /copy2_group/extlink_datatype Type - Location: 1:5912 + Location: 1:6328 Links: 1 - Type: shared-1:5912 32-bit little-endian integer + Type: shared-1:6328 32-bit little-endian integer /copy2_group/extlink_dset Dataset {6/6} - Location: 1:5080 + Location: 1:5496 Links: 1 Storage: <details removed for portability> Type: 32-bit little-endian integer /copy2_group/extlink_grp Group - Location: 1:5872 + Location: 1:6288 Links: 1 /copy2_group/extlink_notyet1 External Link {h5copy_extlinks_trg.h5//notyet} /copy2_group/extlink_notyet2 External Link {notyet_file.h5//notyet} +/copy_dangle1_1 External Link {h5copy_extlinks_trg.h5//notyet} +/copy_dangle1_2 External Link {h5copy_extlinks_trg.h5//notyet} +/copy_dangle2_1 External Link {notyet_file.h5//notyet} +/copy_dangle2_2 External Link {notyet_file.h5//notyet} diff --git a/tools/h5copy/testh5copy.sh b/tools/h5copy/testh5copy.sh index d8dfe52..31104dd 100644 --- a/tools/h5copy/testh5copy.sh +++ b/tools/h5copy/testh5copy.sh @@ -353,20 +353,16 @@ COPY_EXT_LINKS() TOOLTEST -f ext -i $TESTFILE -o $FILEOUT -v -s /group_ext/extlink_dset -d /copy2_dset echo "Test copying dangling external link (no obj) directly without -f ext" - #TOOLTEST -i $TESTFILE -o $FILEOUT -v -s /copy2_group/extlink_notyet1 -d /copy2_dangle1 - SKIP -s /copy2_group/extlink_notyet1 -d /copy2_dangle1 + TOOLTEST -i $TESTFILE -o $FILEOUT -v -s /group_ext/extlink_notyet1 -d /copy_dangle1_1 echo "Test copying dangling external link (no obj) directly with -f ext" - #TOOLTEST -f ext -i $TESTFILE -o $FILEOUT -v -s /copy2_group/extlink_notyet1 -d /copy2_dangle1 - SKIP -f ext -s /copy2_group/extlink_notyet1 -d /copy2_dangle1 + TOOLTEST -f ext -i $TESTFILE -o $FILEOUT -v -s /group_ext/extlink_notyet1 -d /copy_dangle1_2 echo "Test copying dangling external link (no file) directly without -f ext" - #TOOLTEST -i $TESTFILE -o $FILEOUT -v -s /copy2_group/extlink_notyet2 -d /copy2_dangle2 - SKIP -s /copy2_group/extlink_notyet2 -d /copy2_dangle2 + TOOLTEST -i $TESTFILE -o $FILEOUT -v -s /group_ext/extlink_notyet2 -d /copy_dangle2_1 echo "Test copying dangling external link (no file) directly with -f ext" - #TOOLTEST -f ext -i $TESTFILE -o $FILEOUT -v -s /copy2_group/extlink_notyet2 -d /copy2_dangle2 - SKIP -f ext -s /copy2_group/extlink_notyet2 -d /copy2_dangle2 + TOOLTEST -f ext -i $TESTFILE -o $FILEOUT -v -s /group_ext/extlink_notyet2 -d /copy_dangle2_2 echo "Test copying a group contains external links without -f ext" TOOLTEST -v -i $TESTFILE -o $FILEOUT -s /group_ext -d /copy1_group |