diff options
Diffstat (limited to 'src/H5VLdaosm.c')
-rw-r--r-- | src/H5VLdaosm.c | 22 |
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: |