summaryrefslogtreecommitdiffstats
path: root/src/H5VLdaosm.c
diff options
context:
space:
mode:
authorNeil Fortner <nfortne2@hdfgroup.org>2016-12-15 23:30:25 (GMT)
committerNeil Fortner <nfortne2@hdfgroup.org>2016-12-15 23:30:25 (GMT)
commit59b0c7a9505da5a90eddd510d0dcbab7cab2cdc8 (patch)
treeb06bb76213b0e125605bdf67b403c8e3f96c5afe /src/H5VLdaosm.c
parent54f7af58851b777e61ecad5e7f5c6e0b468cd665 (diff)
downloadhdf5-59b0c7a9505da5a90eddd510d0dcbab7cab2cdc8.zip
hdf5-59b0c7a9505da5a90eddd510d0dcbab7cab2cdc8.tar.gz
hdf5-59b0c7a9505da5a90eddd510d0dcbab7cab2cdc8.tar.bz2
Add support for leading "/" in path names, to denote absolute paths even
if the starting object isn't the file or root group.
Diffstat (limited to 'src/H5VLdaosm.c')
-rw-r--r--src/H5VLdaosm.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/H5VLdaosm.c b/src/H5VLdaosm.c
index 0c304b3..88611cd 100644
--- a/src/H5VLdaosm.c
+++ b/src/H5VLdaosm.c
@@ -1398,16 +1398,25 @@ H5VL_daosm_group_traverse(H5VL_daosm_obj_t *obj, const char *path,
HDassert(path);
HDassert(obj_name);
+ /* Initialize obj_name */
+ *obj_name = path;
+
/* Open starting group */
- if(obj->type == H5I_GROUP)
- grp = (H5VL_daosm_group_t *)obj;
- else
+ if((*obj_name)[0] == '/') {
grp = obj->file->root_grp;
+ (*obj_name)++;
+ } /* end if */
+ else {
+ if(obj->type == H5I_GROUP)
+ grp = (H5VL_daosm_group_t *)obj;
+ else if(obj->type == H5I_FILE)
+ grp = obj->file->root_grp;
+ else
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "obj not a file or group")
+ } /* end else */
+
grp->common.rc++;
- /* Initialize obj_name */
- *obj_name = path;
-
/* Search for '/' */
next_obj = strchr(*obj_name, '/');
@@ -1432,6 +1441,7 @@ H5VL_daosm_group_traverse(H5VL_daosm_obj_t *obj, const char *path,
next_obj = strchr(*obj_name, '/');
} /* end while */
+ /* Set return value */
ret_value = grp;
done: