diff options
Diffstat (limited to 'src/H5Gtest.c')
-rw-r--r-- | src/H5Gtest.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/H5Gtest.c b/src/H5Gtest.c index 73511a2..83f561e 100644 --- a/src/H5Gtest.c +++ b/src/H5Gtest.c @@ -23,6 +23,7 @@ #include "H5private.h" /* Generic Functions */ +#include "H5Dprivate.h" /* Datasets */ #include "H5Eprivate.h" /* Error handling */ #include "H5Gpkg.h" /* Groups */ #include "H5HLprivate.h" /* Local Heaps */ @@ -229,3 +230,89 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* H5G_lheap_size_test() */ + +/*-------------------------------------------------------------------------- + NAME + H5G_user_path_test + PURPOSE + Retrieve the user path for an ID + USAGE + herr_t H5G_user_path_test(obj_id, user_path, user_path_len) + hid_t obj_id; IN: ID to check + char *user_path; OUT: Pointer to buffer for User path + size_t *user_path_len; OUT: Size of user path + unsigned *obj_hidden; OUT: Whether object is hidden + RETURNS + Non-negative on success, negative on failure + DESCRIPTION + Retrieves the user path for an ID. A zero for the length is returned in + the case of no user path. + GLOBAL VARIABLES + COMMENTS, BUGS, ASSUMPTIONS + DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING + EXAMPLES + REVISION LOG +--------------------------------------------------------------------------*/ +herr_t +H5G_user_path_test(hid_t obj_id, char *user_path, size_t *user_path_len, unsigned *obj_hidden) +{ + void *obj_ptr; /* Pointer to object for ID */ + H5G_name_t *obj_path; /* Pointer to group hier. path for obj */ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(H5G_user_path_test, FAIL) + + /* Sanity check */ + HDassert(user_path_len); + HDassert(obj_hidden); + + /* Get pointer to object for ID */ + if(NULL == (obj_ptr = H5I_object(obj_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get object for ID") + + /* Get the symbol table entry */ + switch(H5I_get_type(obj_id)) { + case H5I_GROUP: + obj_path = H5G_nameof((H5G_t *)obj_ptr); + break; + + case H5I_DATASET: + obj_path = H5D_nameof((H5D_t *)obj_ptr); + break; + + case H5I_DATATYPE: + /* Avoid non-named datatypes */ + if(!H5T_is_named((H5T_t *)obj_ptr)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a named datatype") + + obj_path = H5T_nameof((H5T_t *)obj_ptr); + break; + + default: + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unknown data object type") + } /* end switch */ + HDassert(obj_path); + + /* Retrieve a copy of the user path and put it into the buffer */ + if(obj_path->user_path_r) { + size_t len = H5RS_len(obj_path->user_path_r); + + /* Set the user path, if given */ + if(user_path) + HDstrcpy(user_path, H5RS_get_str(obj_path->user_path_r)); + + /* Set the length of the path */ + *user_path_len = len; + + /* Set the user path hidden flag */ + *obj_hidden = obj_path->obj_hidden; + } /* end if */ + else { + *user_path_len = 0; + *obj_hidden = 0; + } /* end else */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* H5G_user_path_test() */ + |