summaryrefslogtreecommitdiffstats
path: root/src/H5Gtest.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Gtest.c')
-rw-r--r--src/H5Gtest.c87
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() */
+