summaryrefslogtreecommitdiffstats
path: root/tools/h5copy
diff options
context:
space:
mode:
authorJonathan Kim <jkm@hdfgroup.org>2010-04-22 18:17:35 (GMT)
committerJonathan Kim <jkm@hdfgroup.org>2010-04-22 18:17:35 (GMT)
commit249acc03550e9cb2ed3cfaa56737215910a7a194 (patch)
treeff576ef83e636639b4a707bb174466afdc39af5f /tools/h5copy
parent20a020a1c7bccce730be91118b3366b7cabe95fc (diff)
downloadhdf5-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.c29
-rw-r--r--tools/h5copy/testfiles/h5copy_extlinks_src.out.ls16
-rw-r--r--tools/h5copy/testh5copy.sh12
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