diff options
author | Mohamad Chaarawi <chaarawi@hdfgroup.org> | 2012-07-03 20:19:47 (GMT) |
---|---|---|
committer | Mohamad Chaarawi <chaarawi@hdfgroup.org> | 2012-07-03 20:19:47 (GMT) |
commit | 34050a7d9c9ae16326711cfb69c575bfe75e422e (patch) | |
tree | 4853ab483660cd6ade4768d95dec53ceb3879cfd /src/H5Gloc.c | |
parent | 358cac8ec8cd1989bf0b47d255751c6d4130c0fc (diff) | |
download | hdf5-34050a7d9c9ae16326711cfb69c575bfe75e422e.zip hdf5-34050a7d9c9ae16326711cfb69c575bfe75e422e.tar.gz hdf5-34050a7d9c9ae16326711cfb69c575bfe75e422e.tar.bz2 |
[svn-r22511] - remove the internal file type and use the file ID created at the API level for the native implementation
- work on fixing the named datatype issue.. still not resolved
- branch still not stable and tests do not pass at this point
Diffstat (limited to 'src/H5Gloc.c')
-rw-r--r-- | src/H5Gloc.c | 76 |
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() */ |