summaryrefslogtreecommitdiffstats
path: root/tools/h5dump/h5dump_ddl.c
diff options
context:
space:
mode:
authorPeter Cao <xcao@hdfgroup.org>2012-03-12 21:27:11 (GMT)
committerPeter Cao <xcao@hdfgroup.org>2012-03-12 21:27:11 (GMT)
commitfcf96afeb24119690187ac3907d23070f0ba99d1 (patch)
treebc32b923260a7d42dca3f14df655c87762fcf48a /tools/h5dump/h5dump_ddl.c
parentd7f3dc097ef2c8ced8068879044ce6b9fdd9936e (diff)
downloadhdf5-fcf96afeb24119690187ac3907d23070f0ba99d1.zip
hdf5-fcf96afeb24119690187ac3907d23070f0ba99d1.tar.gz
hdf5-fcf96afeb24119690187ac3907d23070f0ba99d1.tar.bz2
[svn-r22052] - h5dump: Added capability for "-a" option to show attributes containing "/"
by using an escape character. For example, for a dataset "/dset" containing attribute "speed(m/h)", use "h5dump -a "/dset/speed(\/h)" to show the content of the attribute. See details at HDFFV-7523
Diffstat (limited to 'tools/h5dump/h5dump_ddl.c')
-rw-r--r--tools/h5dump/h5dump_ddl.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/tools/h5dump/h5dump_ddl.c b/tools/h5dump/h5dump_ddl.c
index be56c9b..b8deaf9 100644
--- a/tools/h5dump/h5dump_ddl.c
+++ b/tools/h5dump/h5dump_ddl.c
@@ -1322,7 +1322,7 @@ handle_attributes(hid_t fid, const char *attr, void UNUSED * data, int UNUSED pe
hid_t oid = -1;
hid_t attr_id = -1;
char *obj_name;
- const char *attr_name;
+ char *attr_name;
int j;
h5tools_str_t buffer; /* string into which to render */
h5tools_context_t ctx; /* print context */
@@ -1337,7 +1337,7 @@ handle_attributes(hid_t fid, const char *attr, void UNUSED * data, int UNUSED pe
/* find the last / */
while(j >= 0) {
- if (attr[j] == '/')
+ if (attr[j] == '/' && (j==0 || (j>0 && attr[j-1]!='\\')))
break;
j--;
}
@@ -1372,9 +1372,12 @@ handle_attributes(hid_t fid, const char *attr, void UNUSED * data, int UNUSED pe
string_dataformat.do_escape = display_escape;
outputformat = &string_dataformat;
- attr_name = attr + j + 1;
+ //attr_name = attr + j + 1;
+ // need to replace escape characters
+ attr_name = h5tools_str_replace(attr + j + 1, "\\/", "/");
- /* Open the object with the attribute */
+
+ /* handle error case: cannot open the object with the attribute */
if((oid = H5Oopen(fid, obj_name, H5P_DEFAULT)) < 0) {
/* setup */
HDmemset(&buffer, 0, sizeof(h5tools_str_t));
@@ -1415,7 +1418,7 @@ handle_attributes(hid_t fid, const char *attr, void UNUSED * data, int UNUSED pe
attr_data_output = display_attr_data;
h5dump_type_table = type_table;
- h5tools_dump_attribute(rawoutstream, outputformat, &ctx, oid, attr, attr_id, display_ai, display_char);
+ h5tools_dump_attribute(rawoutstream, outputformat, &ctx, oid, attr_name, attr_id, display_ai, display_char);
h5dump_type_table = NULL;
if(attr_id < 0) {
@@ -1428,6 +1431,7 @@ handle_attributes(hid_t fid, const char *attr, void UNUSED * data, int UNUSED pe
} /* end if */
HDfree(obj_name);
+ HDfree(attr_name);
dump_indent -= COL;
return;
@@ -1435,6 +1439,9 @@ error:
h5tools_setstatus(EXIT_FAILURE);
if(obj_name)
HDfree(obj_name);
+
+ if (attr_name)
+ HDfree(attr_name);
H5E_BEGIN_TRY {
H5Oclose(oid);