summaryrefslogtreecommitdiffstats
path: root/src/H5Gloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Gloc.c')
-rw-r--r--src/H5Gloc.c76
1 files changed, 74 insertions, 2 deletions
diff --git a/src/H5Gloc.c b/src/H5Gloc.c
index e513d17..58ae55a 100644
--- a/src/H5Gloc.c
+++ b/src/H5Gloc.c
@@ -126,7 +126,6 @@ static herr_t H5G_loc_get_comment_cb(H5G_loc_t *grp_loc, const char *name,
const H5O_link_t *lnk, H5G_loc_t *obj_loc, void *_udata,
H5G_own_loc_t *own_loc);
-
/*********************/
/* Package Variables */
/*********************/
@@ -143,6 +142,75 @@ static herr_t H5G_loc_get_comment_cb(H5G_loc_t *grp_loc, const char *name,
+/*---------------------------------------------------------------------------
+ * Function: H5G_loc_real
+ *
+ * Purpose: utility routine to get object location
+ *
+ * Returns: Non-negative on success or negative on failure
+ *
+ * Programmer: Mohamad Chaarawi
+ * June, 2012
+ *
+ *---------------------------------------------------------------------------
+ */
+herr_t
+H5G_loc_real(void *obj, H5I_type_t type, H5G_loc_t *loc)
+{
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ switch(type) {
+ case H5I_FILE:
+ /* Construct a group location for root group of the file */
+ if(H5G_root_loc((H5F_t *)obj, loc) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, FAIL, "unable to create location for file")
+ break;
+ case H5I_GROUP:
+ if(NULL == (loc->oloc = H5G_oloc((H5G_t *)obj)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get object location of group")
+ if(NULL == (loc->path = H5G_nameof((H5G_t *)obj)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get path of group")
+ break;
+ case H5I_DATATYPE:
+ if(NULL == (loc->oloc = H5T_oloc((H5T_t *)obj)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get object location of datatype")
+ if(NULL == (loc->path = H5T_nameof((H5T_t *)obj)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get path of datatype")
+ break;
+ case H5I_DATASET:
+ if(NULL == (loc->oloc = H5D_oloc((H5D_t *)obj)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get object location of dataset")
+ if(NULL == (loc->path = H5D_nameof((H5D_t *)obj)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get path of dataset")
+ break;
+ case H5I_ATTR:
+ if(NULL == (loc->oloc = H5A_oloc((H5A_t *)obj)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get object location of attribute")
+ if(NULL == (loc->path = H5A_nameof((H5A_t *)obj)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get path of attribute")
+ break;
+ case H5I_UNINIT:
+ case H5I_BADID:
+ case H5I_DATASPACE:
+ case H5I_REFERENCE:
+ case H5I_VFL:
+ case H5I_VOL:
+ case H5I_GENPROP_CLS:
+ case H5I_GENPROP_LST:
+ case H5I_ERROR_CLASS:
+ case H5I_ERROR_MSG:
+ case H5I_ERROR_STACK:
+ case H5I_NTYPES:
+ default:
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object")
+ } /* end switch */
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5G_loc_real */
+
+
/*-------------------------------------------------------------------------
* Function: H5G_loc
*
@@ -163,6 +231,10 @@ H5G_loc(hid_t loc_id, H5G_loc_t *loc)
FUNC_ENTER_NOAPI(FAIL)
+ if(H5G_loc_real(H5I_object(loc_id), H5I_get_type(loc_id), loc) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object")
+
+#if 0
switch(H5I_get_type(loc_id)) {
case H5I_FILE:
{
@@ -253,7 +325,7 @@ H5G_loc(hid_t loc_id, H5G_loc_t *loc)
default:
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid object ID")
} /* end switch */
-
+#endif
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G_loc() */