summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMohamad Chaarawi <chaarawi@hdfgroup.org>2012-06-12 15:55:55 (GMT)
committerMohamad Chaarawi <chaarawi@hdfgroup.org>2012-06-12 15:55:55 (GMT)
commit3736cc2a1d41f96d740079cc8201f761961b582a (patch)
tree7799e6d9108bcb60027bc91fe7571fb68ab1d968 /src
parentf31fac3a23da12287384db7f6aa2937e9461d3fe (diff)
downloadhdf5-3736cc2a1d41f96d740079cc8201f761961b582a.zip
hdf5-3736cc2a1d41f96d740079cc8201f761961b582a.tar.gz
hdf5-3736cc2a1d41f96d740079cc8201f761961b582a.tar.bz2
[svn-r22456] change all usage of lookup/free VOL callback in H5G,O,A and use the loc_param struct instead.
update the native implementation
Diffstat (limited to 'src')
-rw-r--r--src/H5A.c160
-rw-r--r--src/H5Aprivate.h4
-rw-r--r--src/H5G.c44
-rw-r--r--src/H5O.c57
-rw-r--r--src/H5R.c3
-rw-r--r--src/H5Rdeprec.c3
-rw-r--r--src/H5VLint.c17
-rw-r--r--src/H5VLnative.c208
-rw-r--r--src/H5VLprivate.h4
-rw-r--r--src/H5VLpublic.h9
10 files changed, 355 insertions, 154 deletions
diff --git a/src/H5A.c b/src/H5A.c
index a41340b..1f254eb 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -316,7 +316,7 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
loc_params.loc_data.loc_by_name.name = obj_name;
- loc_params.loc_data.loc_by_name.lapl_id = lapl_id;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* Get the plist structure */
if(NULL == (plist = (H5P_genplist_t *)H5I_object(acpl_id)))
@@ -600,7 +600,7 @@ H5Aopen_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
loc_params.loc_data.loc_by_name.name = obj_name;
- loc_params.loc_data.loc_by_name.lapl_id = lapl_id;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* Open the attribute through the VOL */
if((ret_value = H5VL_attr_open(loc_id, loc_params, attr_name, aapl_id, H5_REQUEST_NULL)) < 0)
@@ -1662,7 +1662,7 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
loc_params.loc_data.loc_by_name.name = obj_name;
- loc_params.loc_data.loc_by_name.lapl_id = lapl_id;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* Open the attribute through the VOL */
if((attr_id = H5VL_attr_open(loc_id, loc_params, attr_name, H5P_DEFAULT, H5_REQUEST_NULL)) < 0)
@@ -1807,7 +1807,6 @@ done:
herr_t
H5Arename(hid_t loc_id, const char *old_name, const char *new_name)
{
- H5G_loc_t loc; /* Object location */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -1879,7 +1878,7 @@ H5Arename_by_name(hid_t loc_id, const char *obj_name, const char *old_attr_name,
loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
loc_params.loc_data.loc_by_name.name = obj_name;
- loc_params.loc_data.loc_by_name.lapl_id = lapl_id;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* get the attribute info through the VOL */
if(H5VL_object_misc(loc_id, H5VL_ATTR_RENAME, H5_REQUEST_NULL, loc_params, old_attr_name, new_attr_name) < 0)
@@ -2046,9 +2045,10 @@ H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
loc_params.loc_data.loc_by_name.name = obj_name;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* Open the object through the VOL */
- if((obj_loc_id = H5VL_object_open(loc_id, loc_params, lapl_id, H5_REQUEST_NULL)) < 0)
+ if((obj_loc_id = H5VL_object_open(loc_id, loc_params, H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object")
/* Build attribute operator info */
@@ -2092,6 +2092,7 @@ done:
herr_t
H5Adelete(hid_t loc_id, const char *name)
{
+ H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -2103,8 +2104,11 @@ H5Adelete(hid_t loc_id, const char *name)
if(!name || !*name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_ID;
+ loc_params.loc_data.loc_by_id.id = loc_id;
+
/* Open the attribute through the VOL */
- if(H5VL_attr_remove(loc_id, NULL, name, H5_REQUEST_NULL) < 0)
+ if(H5VL_attr_remove(loc_id, loc_params, name, H5_REQUEST_NULL) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
done:
@@ -2132,7 +2136,7 @@ herr_t
H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
hid_t lapl_id)
{
- void *location = NULL;
+ H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -2151,20 +2155,15 @@ H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
- /* Get the token for the Object location through the VOL */
- if(H5VL_object_lookup (loc_id, H5VL_OBJECT_LOOKUP_BY_NAME, &location, H5_REQUEST_NULL, obj_name, lapl_id) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to locate object")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
+ loc_params.loc_data.loc_by_name.name = obj_name;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* Open the attribute through the VOL */
- if(H5VL_attr_remove(loc_id, location, attr_name, H5_REQUEST_NULL) < 0)
+ if(H5VL_attr_remove(loc_id, loc_params, attr_name, H5_REQUEST_NULL) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
done:
- if(NULL != location) {
- /* free the location token through the VOL */
- if(H5VL_object_free_loc (loc_id, location, H5_REQUEST_NULL) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to free location token")
- }
FUNC_LEAVE_API(ret_value)
} /* H5Adelete_by_name() */
@@ -2197,7 +2196,7 @@ herr_t
H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
H5_iter_order_t order, hsize_t n, hid_t lapl_id)
{
- void *location = NULL;
+ H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -2218,26 +2217,65 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
- /* Get the token for the Object location through the VOL */
- if(H5VL_object_lookup(loc_id, H5VL_OBJECT_LOOKUP_BY_NAME, &location, H5_REQUEST_NULL, obj_name, lapl_id) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to locate object")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
+ loc_params.loc_data.loc_by_name.name = obj_name;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* get the attribute info through the VOL */
- if(H5VL_object_misc(loc_id, H5VL_ATTR_DELETE_BY_IDX, H5_REQUEST_NULL, location, idx_type, order, n) < 0)
+ if(H5VL_object_misc(loc_id, H5VL_ATTR_DELETE_BY_IDX, H5_REQUEST_NULL, loc_params,
+ idx_type, order, n) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get attribute info")
done:
- if(NULL != location) {
- /* free the location token through the VOL */
- if(H5VL_object_free_loc (loc_id, location, H5_REQUEST_NULL) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to free location token")
- }
FUNC_LEAVE_API(ret_value)
} /* H5Adelete_by_idx() */
/*--------------------------------------------------------------------------
NAME
+ H5A_delete_by_idx
+ PURPOSE
+ private version of H5Adelete_by_idx
+ RETURNS
+ Non-negative on success/Negative on failure
+--------------------------------------------------------------------------*/
+herr_t
+H5A_delete_by_idx(H5G_loc_t loc, const char *obj_name, H5_index_t idx_type,
+ H5_iter_order_t order, hsize_t n, hid_t lapl_id)
+{
+ H5G_loc_t obj_loc; /* Location used to open group */
+ H5G_name_t obj_path; /* Opened object group hier. path */
+ H5O_loc_t obj_oloc; /* Opened object object location */
+ hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Set up opened group location to fill in */
+ obj_loc.oloc = &obj_oloc;
+ obj_loc.path = &obj_path;
+ H5G_loc_reset(&obj_loc);
+
+ /* Find the object's location */
+ if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, H5AC_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
+ loc_found = TRUE;
+
+ /* Delete the attribute from the location */
+ if(H5O_attr_remove_by_idx(obj_loc.oloc, idx_type, order, n, H5AC_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
+
+done:
+ /* Release resources */
+ if(loc_found && H5G_loc_free(&obj_loc) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_delete_by_idx() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
H5Aclose
PURPOSE
Close an attribute ID
@@ -2550,6 +2588,7 @@ done:
htri_t
H5Aexists(hid_t obj_id, const char *attr_name)
{
+ H5VL_loc_params_t loc_params;
htri_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -2561,8 +2600,11 @@ H5Aexists(hid_t obj_id, const char *attr_name)
if(!attr_name || !*attr_name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_ID;
+ loc_params.loc_data.loc_by_id.id = obj_id;
+
/* get the attribute info through the VOL */
- if(H5VL_attr_get(obj_id, H5VL_ATTR_EXISTS, H5_REQUEST_NULL, attr_name, NULL, &ret_value) < 0)
+ if(H5VL_attr_get(obj_id, H5VL_ATTR_EXISTS, H5_REQUEST_NULL, attr_name, loc_params, &ret_value) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get attribute info")
done:
@@ -2587,7 +2629,7 @@ htri_t
H5Aexists_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
hid_t lapl_id)
{
- void *location = NULL;
+ H5VL_loc_params_t loc_params;
htri_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -2606,20 +2648,62 @@ H5Aexists_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
- /* Get the token for the Object location through the VOL */
- if(H5VL_object_lookup(loc_id, H5VL_OBJECT_LOOKUP_BY_NAME, &location, H5_REQUEST_NULL, obj_name, lapl_id) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to locate object")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
+ loc_params.loc_data.loc_by_name.name = obj_name;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* get the attribute info through the VOL */
- if(H5VL_attr_get(loc_id, H5VL_ATTR_EXISTS, H5_REQUEST_NULL, attr_name, location, &ret_value) < 0)
+ if(H5VL_attr_get(loc_id, H5VL_ATTR_EXISTS, H5_REQUEST_NULL, attr_name, loc_params, &ret_value) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get attribute info")
done:
- if(NULL != location) {
- /* free the location token through the VOL */
- if(H5VL_object_free_loc (loc_id, location, H5_REQUEST_NULL) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to free location token")
- }
FUNC_LEAVE_API(ret_value)
} /* H5Aexists_by_name() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_exists_by_name
+ *
+ * Purpose: Private version of H5Aexists_by_name
+ *
+ * Return: Success: TRUE/FALSE
+ * Failure: Negative
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, November 1, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5A_exists_by_name(H5G_loc_t loc, const char *obj_name, const char *attr_name,
+ hid_t lapl_id)
+{
+ H5G_loc_t obj_loc; /* Location used to open group */
+ H5G_name_t obj_path; /* Opened object group hier. path */
+ H5O_loc_t obj_oloc; /* Opened object object location */
+ hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
+ htri_t ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Set up opened group location to fill in */
+ obj_loc.oloc = &obj_oloc;
+ obj_loc.path = &obj_path;
+ H5G_loc_reset(&obj_loc);
+
+ /* Find the object's location */
+ if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, H5AC_ind_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
+ loc_found = TRUE;
+
+ /* Check if the attribute exists */
+ if((ret_value = H5O_attr_exists(obj_loc.oloc, attr_name, H5AC_ind_dxpl_id)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to determine if attribute exists")
+
+done:
+ /* Release resources */
+ if(loc_found && H5G_loc_free(&obj_loc) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_exists_by_name() */
diff --git a/src/H5Aprivate.h b/src/H5Aprivate.h
index 9e2cbb2..fa774fa 100644
--- a/src/H5Aprivate.h
+++ b/src/H5Aprivate.h
@@ -84,5 +84,9 @@ H5_DLL herr_t H5O_attr_iterate(hid_t loc_id, hid_t dxpl_id, H5_index_t idx_type,
const H5A_attr_iter_op_t *op, void *op_data);
H5_DLL herr_t H5A_rename_by_name(H5G_loc_t loc, const char *obj_name, const char *old_attr_name,
const char *new_attr_name, hid_t lapl_id);
+H5_DLL herr_t H5A_delete_by_idx(H5G_loc_t loc, const char *obj_name, H5_index_t idx_type,
+ H5_iter_order_t order, hsize_t n, hid_t lapl_id);
+H5_DLL htri_t H5A_exists_by_name(H5G_loc_t loc, const char *obj_name, const char *attr_name,
+ hid_t lapl_id);
#endif /* _H5Aprivate_H */
diff --git a/src/H5G.c b/src/H5G.c
index 00e142a..5544e41 100644
--- a/src/H5G.c
+++ b/src/H5G.c
@@ -470,6 +470,7 @@ herr_t
H5Gget_info(hid_t loc_id, H5G_info_t *grp_info)
{
H5I_type_t id_type; /* Type of ID */
+ H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -482,8 +483,11 @@ H5Gget_info(hid_t loc_id, H5G_info_t *grp_info)
if(!grp_info)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no info struct")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_ID;
+ loc_params.loc_data.loc_by_id.id = loc_id;
+
/* Get the group info through the VOL using the location token */
- if((ret_value = H5VL_group_get(loc_id, H5VL_GROUP_GET_INFO, H5_REQUEST_NULL, grp_info, NULL)) < 0)
+ if((ret_value = H5VL_group_get(loc_id, H5VL_GROUP_GET_INFO, H5_REQUEST_NULL, grp_info, loc_params)) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get group info")
done:
@@ -508,8 +512,7 @@ herr_t
H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *grp_info,
hid_t lapl_id)
{
- void *location = NULL; /* a pointer to VOL specific token that indicates
- the location of the object */
+ H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -526,20 +529,16 @@ H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *grp_info,
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
- /* Get the token for the Object location through the VOL */
- if(H5VL_object_lookup (loc_id, H5VL_OBJECT_LOOKUP_BY_NAME, &location, H5_REQUEST_NULL, name, lapl_id) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to locate object")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
+ loc_params.loc_data.loc_by_name.name = name;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* Get the group info through the VOL using the location token */
- if((ret_value = H5VL_group_get(loc_id, H5VL_GROUP_GET_INFO, H5_REQUEST_NULL, grp_info, location)) < 0)
+ if((ret_value = H5VL_group_get(loc_id, H5VL_GROUP_GET_INFO, H5_REQUEST_NULL,
+ grp_info, loc_params)) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get group info")
done:
- if (NULL != location) {
- /* free the location token through the VOL */
- if(H5VL_object_free_loc (loc_id, location, H5_REQUEST_NULL) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to free location token")
- }
FUNC_LEAVE_API(ret_value)
} /* end H5Gget_info_by_name() */
@@ -562,8 +561,7 @@ herr_t
H5Gget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
H5_iter_order_t order, hsize_t n, H5G_info_t *grp_info, hid_t lapl_id)
{
- void *location = NULL; /* a pointer to VOL specific token that indicates
- the location of the object */
+ H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -585,21 +583,19 @@ H5Gget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
- /* Get the token for the Object location through the VOL */
- if(H5VL_object_lookup(loc_id, H5VL_OBJECT_LOOKUP_BY_IDX, &location, H5_REQUEST_NULL, group_name,
- idx_type, order, n, lapl_id) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to locate object")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_IDX;
+ loc_params.loc_data.loc_by_idx.name = group_name;
+ loc_params.loc_data.loc_by_idx.idx_type = idx_type;
+ loc_params.loc_data.loc_by_idx.order = order;
+ loc_params.loc_data.loc_by_idx.n = n;
+ loc_params.loc_data.loc_by_idx.plist_id = lapl_id;
/* Get the group info through the VOL using the location token */
- if((ret_value = H5VL_group_get(loc_id, H5VL_GROUP_GET_INFO, H5_REQUEST_NULL, grp_info, location)) < 0)
+ if((ret_value = H5VL_group_get(loc_id, H5VL_GROUP_GET_INFO, H5_REQUEST_NULL,
+ grp_info, loc_params)) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get group info")
done:
- if (NULL != location) {
- /* free the location token through the VOL */
- if(H5VL_object_free_loc (loc_id, location, H5_REQUEST_NULL) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to free location token")
- }
FUNC_LEAVE_API(ret_value)
} /* end H5Gget_info_by_idx() */
diff --git a/src/H5O.c b/src/H5O.c
index 4df3970..305bb79 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -238,9 +238,10 @@ H5Oopen(hid_t loc_id, const char *name, hid_t lapl_id)
loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
loc_params.loc_data.loc_by_name.name = name;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* Open the object through the VOL */
- if((ret_value = H5VL_object_open(loc_id, loc_params, lapl_id, H5_REQUEST_NULL)) < 0)
+ if((ret_value = H5VL_object_open(loc_id, loc_params, H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object")
done:
@@ -299,9 +300,10 @@ H5Oopen_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
loc_params.loc_data.loc_by_idx.idx_type = idx_type;
loc_params.loc_data.loc_by_idx.order = order;
loc_params.loc_data.loc_by_idx.n = n;
+ loc_params.loc_data.loc_by_idx.plist_id = lapl_id;
/* Open the object through the VOL */
- if((ret_value = H5VL_object_open(loc_id, loc_params, lapl_id, H5_REQUEST_NULL)) < 0)
+ if((ret_value = H5VL_object_open(loc_id, loc_params, H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object")
done:
@@ -347,7 +349,6 @@ done:
hid_t
H5Oopen_by_addr(hid_t loc_id, haddr_t addr)
{
- hid_t lapl_id = H5P_LINK_ACCESS_DEFAULT; /* lapl to use to open this object */
H5VL_loc_params_t loc_params;
hid_t ret_value = FAIL;
@@ -358,7 +359,7 @@ H5Oopen_by_addr(hid_t loc_id, haddr_t addr)
loc_params.loc_data.loc_by_addr.addr = addr;
/* Open the object through the VOL */
- if((ret_value = H5VL_object_open(loc_id, loc_params, lapl_id, H5_REQUEST_NULL)) < 0)
+ if((ret_value = H5VL_object_open(loc_id, loc_params, H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object")
done:
@@ -564,8 +565,7 @@ done:
herr_t
H5Oget_info(hid_t loc_id, H5O_info_t *oinfo)
{
- void *location = NULL; /* a pointer to VOL specific token that indicates
- the location of the object */
+ H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -575,15 +575,14 @@ H5Oget_info(hid_t loc_id, H5O_info_t *oinfo)
if(!oinfo)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no info struct")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_ID;
+ loc_params.loc_data.loc_by_id.id = loc_id;
+
/* Get the group info through the VOL using the location token */
- if((ret_value = H5VL_object_get(loc_id, H5VL_OBJECT_GET_INFO, H5_REQUEST_NULL, oinfo, NULL)) < 0)
+ if((ret_value = H5VL_object_get(loc_id, H5VL_OBJECT_GET_INFO, H5_REQUEST_NULL, oinfo, loc_params)) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get group info")
done:
- if (NULL != location) {
- free (location);
- location = NULL;
- }
FUNC_LEAVE_API(ret_value)
} /* end H5Oget_info() */
@@ -604,8 +603,7 @@ done:
herr_t
H5Oget_info_by_name(hid_t loc_id, const char *name, H5O_info_t *oinfo, hid_t lapl_id)
{
- void *location = NULL; /* a pointer to VOL specific token that indicates
- the location of the object */
+ H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -622,20 +620,15 @@ H5Oget_info_by_name(hid_t loc_id, const char *name, H5O_info_t *oinfo, hid_t lap
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
- /* Get the token for the Object location through the VOL */
- if(H5VL_object_lookup (loc_id, H5VL_OBJECT_LOOKUP_BY_NAME, &location, H5_REQUEST_NULL, name, lapl_id) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to locate object")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
+ loc_params.loc_data.loc_by_name.name = name;
+ loc_params.loc_data.loc_by_name.plist_id = lapl_id;
/* Get the group info through the VOL using the location token */
- if((ret_value = H5VL_object_get(loc_id, H5VL_OBJECT_GET_INFO, H5_REQUEST_NULL, oinfo, location)) < 0)
+ if((ret_value = H5VL_object_get(loc_id, H5VL_OBJECT_GET_INFO, H5_REQUEST_NULL, oinfo, loc_params)) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get group info")
done:
- if (NULL != location) {
- /* free the location token through the VOL */
- if(H5VL_object_free_loc (loc_id, location, H5_REQUEST_NULL) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to free location token")
- }
FUNC_LEAVE_API(ret_value)
} /* end H5Oget_info_by_name() */
@@ -658,8 +651,7 @@ herr_t
H5Oget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
H5_iter_order_t order, hsize_t n, H5O_info_t *oinfo, hid_t lapl_id)
{
- void *location = NULL; /* a pointer to VOL specific token that indicates
- the location of the object */
+ H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -681,21 +673,18 @@ H5Oget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
- /* Get the token for the Object location through the VOL */
- if(H5VL_object_lookup(loc_id, H5VL_OBJECT_LOOKUP_BY_IDX, &location, H5_REQUEST_NULL, group_name,
- idx_type, order, n, lapl_id) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to locate object")
+ loc_params.type = H5VL_OBJECT_LOOKUP_BY_IDX;
+ loc_params.loc_data.loc_by_idx.name = group_name;
+ loc_params.loc_data.loc_by_idx.idx_type = idx_type;
+ loc_params.loc_data.loc_by_idx.order = order;
+ loc_params.loc_data.loc_by_idx.n = n;
+ loc_params.loc_data.loc_by_idx.plist_id = lapl_id;
/* Get the group info through the VOL using the location token */
- if((ret_value = H5VL_object_get(loc_id, H5VL_OBJECT_GET_INFO, H5_REQUEST_NULL, oinfo, location)) < 0)
+ if((ret_value = H5VL_object_get(loc_id, H5VL_OBJECT_GET_INFO, H5_REQUEST_NULL, oinfo, loc_params)) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get group info")
done:
- if (NULL != location) {
- /* free the location token through the VOL */
- if(H5VL_object_free_loc (loc_id, location, H5_REQUEST_NULL) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to free location token")
- }
FUNC_LEAVE_API(ret_value)
} /* end H5Oget_info_by_idx() */
diff --git a/src/H5R.c b/src/H5R.c
index 4ce37da..87edbea 100644
--- a/src/H5R.c
+++ b/src/H5R.c
@@ -528,9 +528,10 @@ H5Rdereference2(hid_t obj_id, hid_t oapl_id, H5R_type_t ref_type, const void *_r
loc_params.type = H5VL_OBJECT_LOOKUP_BY_REF;
loc_params.loc_data.loc_by_ref.ref_type = ref_type;
loc_params.loc_data.loc_by_ref._ref = _ref;
+ loc_params.loc_data.loc_by_ref.plist_id = oapl_id;
/* Open the object through the VOL */
- if((ret_value = H5VL_object_open(obj_id, loc_params, oapl_id, H5_REQUEST_NULL)) < 0)
+ if((ret_value = H5VL_object_open(obj_id, loc_params, H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object")
#if 0
diff --git a/src/H5Rdeprec.c b/src/H5Rdeprec.c
index a595c90..6a8febb 100644
--- a/src/H5Rdeprec.c
+++ b/src/H5Rdeprec.c
@@ -197,9 +197,10 @@ H5Rdereference1(hid_t obj_id, H5R_type_t ref_type, const void *_ref)
loc_params.type = H5VL_OBJECT_LOOKUP_BY_REF;
loc_params.loc_data.loc_by_ref.ref_type = ref_type;
loc_params.loc_data.loc_by_ref._ref = _ref;
+ loc_params.loc_data.loc_by_ref.plist_id = H5P_DATASET_ACCESS_DEFAULT;
/* Open the object through the VOL */
- if((ret_value = H5VL_object_open(obj_id, loc_params, H5P_DATASET_ACCESS_DEFAULT, H5_REQUEST_NULL)) < 0)
+ if((ret_value = H5VL_object_open(obj_id, loc_params, H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object")
done:
diff --git a/src/H5VLint.c b/src/H5VLint.c
index 6371ef3..94346b8 100644
--- a/src/H5VLint.c
+++ b/src/H5VLint.c
@@ -513,7 +513,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VL_attr_remove(hid_t id, void *location, const char *attr_name, hid_t req)
+H5VL_attr_remove(hid_t id, H5VL_loc_params_t loc_params, const char *attr_name, hid_t req)
{
H5VL_class_t *vol_plugin; /* VOL structure attached to id */
herr_t ret_value = SUCCEED;
@@ -523,7 +523,7 @@ H5VL_attr_remove(hid_t id, void *location, const char *attr_name, hid_t req)
if (NULL == (vol_plugin = (H5VL_class_t *)H5I_get_aux (id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "ID does not contain VOL information")
- if((ret_value = (vol_plugin->attr_cls.remove)(id, location, attr_name, req)) < 0)
+ if((ret_value = (vol_plugin->attr_cls.remove)(id, loc_params, attr_name, req)) < 0)
HGOTO_ERROR(H5E_VOL, H5E_CANTDELETE, FAIL, "remove failed")
done:
@@ -645,9 +645,10 @@ H5VL_datatype_open(hid_t id, const char *name, hid_t tapl_id, hid_t req)
loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
loc_params.loc_data.loc_by_name.name = name;
+ loc_params.loc_data.loc_by_name.plist_id = tapl_id;
/* Open the object class */
- if((ret_value = H5VL_object_open(id, loc_params, tapl_id, H5_REQUEST_NULL)) < 0)
+ if((ret_value = H5VL_object_open(id, loc_params, H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object")
}
else {
@@ -774,9 +775,10 @@ H5VL_dataset_open(hid_t id, const char *name, hid_t dapl_id, hid_t req)
loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
loc_params.loc_data.loc_by_name.name = name;
+ loc_params.loc_data.loc_by_name.plist_id = dapl_id;
/* Open the object class */
- if((ret_value = H5VL_object_open(id, loc_params, dapl_id, H5_REQUEST_NULL)) < 0)
+ if((ret_value = H5VL_object_open(id, loc_params, H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object")
}
else {
@@ -1357,9 +1359,10 @@ H5VL_group_open(hid_t id, const char *name, hid_t gapl_id, hid_t req)
loc_params.type = H5VL_OBJECT_LOOKUP_BY_NAME;
loc_params.loc_data.loc_by_name.name = name;
+ loc_params.loc_data.loc_by_name.plist_id = gapl_id;
/* Open the object class */
- if((ret_value = H5VL_object_open(id, loc_params, gapl_id, H5_REQUEST_NULL)) < 0)
+ if((ret_value = H5VL_object_open(id, loc_params, H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to open object")
}
else {
@@ -1687,7 +1690,7 @@ done:
*-------------------------------------------------------------------------
*/
hid_t
-H5VL_object_open(hid_t id, H5VL_loc_params_t params, hid_t lapl_id, hid_t req)
+H5VL_object_open(hid_t id, H5VL_loc_params_t params, hid_t req)
{
H5VL_class_t *vol_plugin; /* VOL structure attached to id */
hid_t ret_value; /* Return value */
@@ -1702,7 +1705,7 @@ H5VL_object_open(hid_t id, H5VL_loc_params_t params, hid_t lapl_id, hid_t req)
HGOTO_ERROR(H5E_VOL, H5E_UNSUPPORTED, FAIL, "vol plugin has no `object open' method")
/* call the corresponding VOL open callback */
- if((ret_value = (vol_plugin->object_cls.open)(id, params, lapl_id, req)) < 0)
+ if((ret_value = (vol_plugin->object_cls.open)(id, params, req)) < 0)
HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "open failed")
/* attach VOL information to the ID */
diff --git a/src/H5VLnative.c b/src/H5VLnative.c
index db9c0ab..05c2fb4 100644
--- a/src/H5VLnative.c
+++ b/src/H5VLnative.c
@@ -69,7 +69,7 @@ static hid_t H5VL_native_attr_open(hid_t loc_id, H5VL_loc_params_t loc_params, c
static herr_t H5VL_native_attr_read(hid_t attr_id, hid_t dtype_id, void *buf, hid_t req);
static herr_t H5VL_native_attr_write(hid_t attr_id, hid_t dtype_id, const void *buf, hid_t req);
static herr_t H5VL_native_attr_get(hid_t id, H5VL_attr_get_t get_type, hid_t req, va_list arguments);
-static herr_t H5VL_native_attr_remove(hid_t loc_id, void *location, const char *attr_name, hid_t req);
+static herr_t H5VL_native_attr_remove(hid_t loc_id, H5VL_loc_params_t loc_params, const char *attr_name, hid_t req);
static herr_t H5VL_native_attr_close(hid_t attr_id, hid_t req);
static herr_t H5VL_native_datatype_commit(hid_t loc_id, const char *name, hid_t type_id,
@@ -109,7 +109,7 @@ static herr_t H5VL_native_link_iterate(hid_t loc_id, const char *name, hbool_t r
static herr_t H5VL_native_link_get(hid_t loc_id, H5VL_link_get_t get_type, hid_t req, va_list arguments);
static herr_t H5VL_native_link_remove(hid_t loc_id, const char *name, void *udata, hid_t lapl_id, hid_t req);
-static hid_t H5VL_native_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t lapl_id, hid_t req);
+static hid_t H5VL_native_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t req);
static herr_t H5VL_native_object_copy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
const char *dst_name, hid_t ocpypl_id, hid_t lcpl_id, hid_t req);
static herr_t H5VL_native_object_visit(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
@@ -356,7 +356,7 @@ H5VL_native_attr_create(hid_t loc_id, const char *attr_name, hid_t acpl_id, hid_
/* Find the object's location */
if(H5G_loc_find(&loc, loc_params.loc_data.loc_by_name.name, &obj_loc/*out*/,
- loc_params.loc_data.loc_by_name.lapl_id, H5AC_ind_dxpl_id) < 0)
+ loc_params.loc_data.loc_by_name.plist_id, H5AC_ind_dxpl_id) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
loc_found = TRUE;
@@ -413,14 +413,9 @@ H5VL_native_attr_open(hid_t loc_id, H5VL_loc_params_t loc_params, const char *at
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to initialize attribute")
}
else if(loc_params.type == H5VL_OBJECT_LOOKUP_BY_NAME) { /* H5Aopen_by_name */
- H5G_loc_t obj_loc; /* Location used to open group */
- H5G_name_t obj_path; /* Opened object group hier. path */
- H5O_loc_t obj_oloc; /* Opened object object location */
- hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
-
/* Open the attribute on the object header */
if(NULL == (attr = H5A_open_by_name(&loc, loc_params.loc_data.loc_by_name.name, attr_name,
- loc_params.loc_data.loc_by_name.lapl_id, H5AC_ind_dxpl_id)))
+ loc_params.loc_data.loc_by_name.plist_id, H5AC_ind_dxpl_id)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute")
}
else {
@@ -538,24 +533,27 @@ H5VL_native_attr_get(hid_t id, H5VL_attr_get_t get_type, hid_t UNUSED req, va_li
case H5VL_ATTR_EXISTS:
{
char *name = va_arg (arguments, char *);
- void *location = va_arg (arguments, void *);
+ H5VL_loc_params_t loc_params = va_arg (arguments, H5VL_loc_params_t);
htri_t *ret = va_arg (arguments, htri_t *);
H5G_loc_t loc;
if(H5G_loc(id, &loc) < 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
- if(NULL == location) { /* H5Aexists */
+ if(loc_params.type == H5VL_OBJECT_LOOKUP_BY_ID) { /* H5Aexists */
/* Check if the attribute exists */
if((*ret = H5O_attr_exists(loc.oloc, name, H5AC_ind_dxpl_id)) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to determine if attribute exists")
}
- else {
- H5G_loc_t *obj_loc = (H5G_loc_t *)location;
+ else if(loc_params.type == H5VL_OBJECT_LOOKUP_BY_NAME) { /* H5Aopen_by_name */
/* Check if the attribute exists */
- if((*ret = H5O_attr_exists(obj_loc->oloc, name, H5AC_ind_dxpl_id)) < 0)
+ if((*ret = H5A_exists_by_name(loc, loc_params.loc_data.loc_by_name.name,
+ name, loc_params.loc_data.loc_by_name.plist_id)) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to determine if attribute exists")
}
+ else {
+ HGOTO_ERROR(H5E_VOL, H5E_UNSUPPORTED, FAIL, "unknown parameters")
+ }
break;
}
/* H5Aget_space */
@@ -664,29 +662,52 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5VL_native_attr_remove(hid_t loc_id, void *location, const char *attr_name, hid_t UNUSED req)
+H5VL_native_attr_remove(hid_t loc_id, H5VL_loc_params_t loc_params, const char *attr_name,
+ hid_t UNUSED req)
{
H5G_loc_t loc; /* Object location */
- herr_t ret_value = SUCCEED; /* Return value */
+ H5G_loc_t obj_loc; /* Location used to open group */
+ hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
if(H5G_loc(loc_id, &loc) < 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
- if(NULL == location) { /* H5Adelete */
+ if(loc_params.type == H5VL_OBJECT_LOOKUP_BY_ID) { /* H5Adelete */
/* Delete the attribute from the location */
if(H5O_attr_remove(loc.oloc, attr_name, H5AC_dxpl_id) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
}
- else { /* H5Adelete_by_name */
- H5G_loc_t *obj_loc = (H5G_loc_t *)location;
+ else if (loc_params.type == H5VL_OBJECT_LOOKUP_BY_NAME) { /* H5Adelete_by_name */
+ H5G_name_t obj_path; /* Opened object group hier. path */
+ H5O_loc_t obj_oloc; /* Opened object object location */
+
+ /* Set up opened group location to fill in */
+ obj_loc.oloc = &obj_oloc;
+ obj_loc.path = &obj_path;
+ H5G_loc_reset(&obj_loc);
+
+ /* Find the object's location */
+ if(H5G_loc_find(&loc, loc_params.loc_data.loc_by_name.name, &obj_loc/*out*/,
+ loc_params.loc_data.loc_by_name.plist_id, H5AC_ind_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
+ loc_found = TRUE;
/* Delete the attribute from the location */
- if(H5O_attr_remove(obj_loc->oloc, attr_name, H5AC_dxpl_id) < 0)
+ if(H5O_attr_remove(obj_loc.oloc, attr_name, H5AC_dxpl_id) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
}
+ else {
+ HGOTO_ERROR(H5E_VOL, H5E_UNSUPPORTED, FAIL, "unknown attribute remove parameters")
+ }
+
done:
+ /* Release resources */
+ if(loc_found && H5G_loc_free(&obj_loc) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
+
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5VL_native_attr_remove() */
@@ -2176,21 +2197,73 @@ H5VL_native_group_get(hid_t obj_id, H5VL_group_get_t get_type, hid_t UNUSED req,
case H5VL_GROUP_GET_INFO:
{
H5G_info_t *grp_info = va_arg (arguments, H5G_info_t *);
- H5G_loc_t *obj_loc = va_arg (arguments, H5G_loc_t *);
+ H5VL_loc_params_t loc_params = va_arg (arguments, H5VL_loc_params_t);
H5G_loc_t loc;
if(H5G_loc(obj_id, &loc) < 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
- if (NULL == obj_loc) {
+ if(loc_params.type == H5VL_OBJECT_LOOKUP_BY_ID) { /* H5Gget_info */
/* Retrieve the group's information */
if(H5G__obj_info(loc.oloc, grp_info, H5AC_ind_dxpl_id) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve group info")
}
- else {
+ else if (loc_params.type == H5VL_OBJECT_LOOKUP_BY_NAME) { /* H5Gget_info_by_name */
+ H5G_loc_t grp_loc; /* Location used to open group */
+ H5G_name_t grp_path; /* Opened object group hier. path */
+ H5O_loc_t grp_oloc; /* Opened object object location */
+
+ /* Set up opened group location to fill in */
+ grp_loc.oloc = &grp_oloc;
+ grp_loc.path = &grp_path;
+ H5G_loc_reset(&grp_loc);
+
+ /* Find the group object */
+ if(H5G_loc_find(&loc, loc_params.loc_data.loc_by_name.name, &grp_loc/*out*/,
+ loc_params.loc_data.loc_by_name.plist_id, H5AC_ind_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "group not found")
+
/* Retrieve the group's information */
- if(H5G__obj_info(obj_loc->oloc, grp_info, H5AC_ind_dxpl_id) < 0)
+ if(H5G__obj_info(grp_loc.oloc, grp_info/*out*/, H5AC_ind_dxpl_id) < 0) {
+ H5G_loc_free(&grp_loc);
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve group info")
+ }
+
+ /* Release the object location */
+ if(H5G_loc_free(&grp_loc) < 0)
+ HDONE_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't free location")
+ }
+ else if (loc_params.type == H5VL_OBJECT_LOOKUP_BY_IDX) { /* H5Gget_info_by_idx */
+ H5G_loc_t grp_loc; /* Location used to open group */
+ H5G_name_t grp_path; /* Opened object group hier. path */
+ H5O_loc_t grp_oloc; /* Opened object object location */
+
+ /* Set up opened group location to fill in */
+ grp_loc.oloc = &grp_oloc;
+ grp_loc.path = &grp_path;
+ H5G_loc_reset(&grp_loc);
+
+ /* Find the object's location, according to the order in the index */
+ if(H5G_loc_find_by_idx(&loc, loc_params.loc_data.loc_by_idx.name,
+ loc_params.loc_data.loc_by_idx.idx_type,
+ loc_params.loc_data.loc_by_idx.order,
+ loc_params.loc_data.loc_by_idx.n, &grp_loc/*out*/,
+ loc_params.loc_data.loc_by_idx.plist_id,
+ H5AC_ind_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "group not found")
+
+ /* Retrieve the group's information */
+ if(H5G__obj_info(grp_loc.oloc, grp_info/*out*/, H5AC_ind_dxpl_id) < 0) {
+ H5G_loc_free(&grp_loc);
+ HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve group info")
+ }
+
+ /* Release the object location */
+ if(H5G_loc_free(&grp_loc) < 0)
+ HDONE_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't free location")
+ }
+ else {
+ HGOTO_ERROR(H5E_VOL, H5E_UNSUPPORTED, FAIL, "unknown get info parameters")
}
break;
}
@@ -2619,7 +2692,7 @@ done:
*-------------------------------------------------------------------------
*/
static hid_t
-H5VL_native_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t lapl_id, hid_t UNUSED req)
+H5VL_native_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t UNUSED req)
{
H5G_loc_t loc;
H5G_loc_t obj_loc; /* Location used to open group */
@@ -2637,8 +2710,8 @@ H5VL_native_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t lapl_id, h
case H5VL_OBJECT_LOOKUP_BY_NAME:
{
/* Open the object */
- if((ret_value = H5O_open_name(&loc, params.loc_data.loc_by_name.name, lapl_id,
- TRUE)) < 0)
+ if((ret_value = H5O_open_name(&loc, params.loc_data.loc_by_name.name,
+ params.loc_data.loc_by_name.plist_id, TRUE)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open object")
break;
}
@@ -2653,12 +2726,14 @@ H5VL_native_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t lapl_id, h
if(H5G_loc_find_by_idx(&loc, params.loc_data.loc_by_idx.name,
params.loc_data.loc_by_idx.idx_type,
params.loc_data.loc_by_idx.order, params.loc_data.loc_by_idx.n,
- &obj_loc/*out*/, lapl_id, H5AC_dxpl_id) < 0)
+ &obj_loc/*out*/, params.loc_data.loc_by_idx.plist_id,
+ H5AC_dxpl_id) < 0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "group not found")
loc_found = TRUE;
/* Open the object */
- if((ret_value = H5O_open_by_loc(&obj_loc, lapl_id, H5AC_dxpl_id, TRUE)) < 0)
+ if((ret_value = H5O_open_by_loc(&obj_loc, params.loc_data.loc_by_name.plist_id,
+ H5AC_dxpl_id, TRUE)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open object")
break;
}
@@ -2676,7 +2751,8 @@ H5VL_native_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t lapl_id, h
H5G_name_reset(obj_loc.path); /* objects opened through this routine don't have a path name */
/* Open the object */
- if((ret_value = H5O_open_by_loc(&obj_loc, lapl_id, H5AC_dxpl_id, TRUE)) < 0)
+ if((ret_value = H5O_open_by_loc(&obj_loc, H5P_LINK_ACCESS_DEFAULT,
+ H5AC_dxpl_id, TRUE)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open object")
break;
}
@@ -2688,7 +2764,8 @@ H5VL_native_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t lapl_id, h
file = loc.oloc->file;
/* Create reference */
- if((ret_value = H5R_dereference(file, lapl_id, H5AC_dxpl_id,
+ if((ret_value = H5R_dereference(file, params.loc_data.loc_by_ref.plist_id,
+ H5AC_dxpl_id,
params.loc_data.loc_by_ref.ref_type,
params.loc_data.loc_by_ref._ref,
TRUE)) < 0)
@@ -2981,14 +3058,22 @@ H5VL_native_object_misc(hid_t loc_id, H5VL_object_misc_t misc_type, hid_t UNUSED
/* H5Adelete_by_idx */
case H5VL_ATTR_DELETE_BY_IDX:
{
- H5G_loc_t *obj_loc = va_arg (arguments, H5G_loc_t *);
+ H5VL_loc_params_t loc_params = va_arg (arguments, H5VL_loc_params_t);
H5_index_t idx_type = va_arg (arguments, H5_index_t);
H5_iter_order_t order = va_arg (arguments, H5_iter_order_t);
hsize_t n = va_arg (arguments, hsize_t);
+ H5G_loc_t loc; /* Object location */
+
+ HDassert(loc_params.type == H5VL_OBJECT_LOOKUP_BY_NAME);
+
+ if(H5G_loc(loc_id, &loc) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+
+ /* Call attribute delete routine */
+ if(H5A_delete_by_idx(loc, loc_params.loc_data.loc_by_name.name, idx_type,
+ order, n, loc_params.loc_data.loc_by_name.plist_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTRENAME, FAIL, "can't delete attribute")
- /* Delete the attribute from the location */
- if(H5O_attr_remove_by_idx(obj_loc->oloc, idx_type, order, n, H5AC_dxpl_id) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
break;
}
/* H5Aopen_by_idx */
@@ -3034,7 +3119,7 @@ H5VL_native_object_misc(hid_t loc_id, H5VL_object_misc_t misc_type, hid_t UNUSED
else if(loc_params.type == H5VL_OBJECT_LOOKUP_BY_NAME) { /* H5Arename_by_name */
/* Call attribute rename routine */
if(H5A_rename_by_name(loc, loc_params.loc_data.loc_by_name.name, old_name,
- new_name, loc_params.loc_data.loc_by_name.lapl_id) < 0)
+ new_name, loc_params.loc_data.loc_by_name.plist_id) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTRENAME, FAIL, "can't rename attribute")
}
else {
@@ -3177,15 +3262,52 @@ H5VL_native_object_get(hid_t id, H5VL_object_get_t get_type, hid_t UNUSED req, v
case H5VL_OBJECT_GET_INFO:
{
H5O_info_t *obj_info = va_arg (arguments, H5O_info_t *);
- H5G_loc_t *obj_loc = va_arg (arguments, H5G_loc_t *);
+ H5VL_loc_params_t loc_params = va_arg (arguments, H5VL_loc_params_t);
- if(NULL == obj_loc) {
- obj_loc = &loc;
+ if(loc_params.type == H5VL_OBJECT_LOOKUP_BY_ID) { /* H5Oget_info */
+ /* Retrieve the object's information */
+ if(H5G_loc_info(&loc, ".", TRUE, obj_info, H5P_LINK_ACCESS_DEFAULT,
+ H5AC_ind_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found")
+ }
+ else if (loc_params.type == H5VL_OBJECT_LOOKUP_BY_NAME) { /* H5Oget_info_by_name */
+ /* Retrieve the object's information */
+ if(H5G_loc_info(&loc, loc_params.loc_data.loc_by_name.name, TRUE, obj_info,
+ loc_params.loc_data.loc_by_name.plist_id, H5AC_ind_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found")
+ }
+ else if (loc_params.type == H5VL_OBJECT_LOOKUP_BY_IDX) { /* H5Oget_info_by_idx */
+ H5G_loc_t obj_loc; /* Location used to open group */
+ H5G_name_t obj_path; /* Opened object group hier. path */
+ H5O_loc_t obj_oloc; /* Opened object object location */
+
+ /* Set up opened group location to fill in */
+ obj_loc.oloc = &obj_oloc;
+ obj_loc.path = &obj_path;
+ H5G_loc_reset(&obj_loc);
+
+ /* Find the object's location, according to the order in the index */
+ if(H5G_loc_find_by_idx(&loc, loc_params.loc_data.loc_by_idx.name,
+ loc_params.loc_data.loc_by_idx.idx_type,
+ loc_params.loc_data.loc_by_idx.order,
+ loc_params.loc_data.loc_by_idx.n, &obj_loc/*out*/,
+ loc_params.loc_data.loc_by_idx.plist_id,
+ H5AC_ind_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "group not found")
+
+ /* Retrieve the object's information */
+ if(H5O_get_info(obj_loc.oloc, H5AC_ind_dxpl_id, TRUE, obj_info) < 0) {
+ H5G_loc_free(&obj_loc);
+ HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve object info")
+ }
+
+ /* Release the object location */
+ if(H5G_loc_free(&obj_loc) < 0)
+ HDONE_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't free location")
+ }
+ else {
+ HGOTO_ERROR(H5E_VOL, H5E_UNSUPPORTED, FAIL, "unknown get info parameters")
}
-
- /* Retrieve the object's information */
- if(H5O_get_info(obj_loc->oloc, H5AC_ind_dxpl_id, TRUE, obj_info) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve object info")
break;
}
/* H5Oget_comment / H5Oget_comment_by_name */
diff --git a/src/H5VLprivate.h b/src/H5VLprivate.h
index eeb4b3c..f3d2f46 100644
--- a/src/H5VLprivate.h
+++ b/src/H5VLprivate.h
@@ -54,7 +54,7 @@ H5_DLL hid_t H5VL_attr_open(hid_t loc_id, H5VL_loc_params_t loc_params, const ch
H5_DLL herr_t H5VL_attr_read(hid_t attr_id, hid_t dtype_id, void *buf, hid_t req);
H5_DLL herr_t H5VL_attr_write(hid_t attr_id, hid_t dtype_id, const void *buf, hid_t req);
H5_DLL herr_t H5VL_attr_get(hid_t id, H5VL_attr_get_t get_type, hid_t req, ...);
-H5_DLL herr_t H5VL_attr_remove(hid_t loc_id, void *location, const char *attr_name, hid_t req);
+H5_DLL herr_t H5VL_attr_remove(hid_t loc_id, H5VL_loc_params_t loc_params, const char *attr_name, hid_t req);
H5_DLL herr_t H5VL_attr_close(hid_t attr_id, hid_t req);
H5_DLL hid_t H5VL_dataset_create(hid_t uid, const char *name, hid_t dcpl_id, hid_t dapl_id, hid_t req);
@@ -92,7 +92,7 @@ H5_DLL herr_t H5VL_link_iterate(hid_t loc_id, const char *name, hbool_t recursiv
H5_DLL herr_t H5VL_link_get(hid_t loc_id, H5VL_link_get_t get_type, hid_t req, ...);
H5_DLL herr_t H5VL_link_remove(hid_t loc_id, const char *name, void *udata, hid_t lapl_id, hid_t req);
-H5_DLL hid_t H5VL_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t lapl_id, hid_t req);
+H5_DLL hid_t H5VL_object_open(hid_t loc_id, H5VL_loc_params_t params, hid_t req);
H5_DLL herr_t H5VL_object_copy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
const char *dst_name, hid_t ocpypl_id, hid_t lcpl_id, hid_t req);
H5_DLL herr_t H5VL_object_visit(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
diff --git a/src/H5VLpublic.h b/src/H5VLpublic.h
index 4e433e5..2746dfc 100644
--- a/src/H5VLpublic.h
+++ b/src/H5VLpublic.h
@@ -165,7 +165,7 @@ struct H5VL_loc_by_id {
struct H5VL_loc_by_name {
const char *name;
- hid_t lapl_id;
+ hid_t plist_id;
};
struct H5VL_loc_by_idx {
@@ -173,7 +173,7 @@ struct H5VL_loc_by_idx {
H5_index_t idx_type;
H5_iter_order_t order;
hsize_t n;
- hid_t lapl_id;
+ hid_t plist_id;
};
struct H5VL_loc_by_addr {
@@ -183,6 +183,7 @@ struct H5VL_loc_by_addr {
struct H5VL_loc_by_ref {
H5R_type_t ref_type;
const void *_ref;
+ hid_t plist_id;
};
/* Structure to hold parameters for object location */
@@ -206,7 +207,7 @@ typedef struct H5VL_attr_class_t {
herr_t (*read) (hid_t attr_id, hid_t mem_type_id, void *buf, hid_t req);
herr_t (*write) (hid_t attr_id, hid_t mem_type_id, const void *buf, hid_t req);
herr_t (*get) (hid_t loc_id, H5VL_attr_get_t get_type, hid_t req, va_list arguments);
- herr_t (*remove)(hid_t loc_id, void *location, const char *attr_name, hid_t req);
+ herr_t (*remove)(hid_t loc_id, H5VL_loc_params_t loc_params, const char *attr_name, hid_t req);
herr_t (*close) (hid_t attr_id, hid_t req);
} H5VL_attr_class_t;
@@ -265,7 +266,7 @@ typedef struct H5VL_link_class_t {
/* H5O routines */
typedef struct H5VL_object_class_t {
- hid_t (*open) (hid_t id, H5VL_loc_params_t params, hid_t lapl_id, hid_t req);
+ hid_t (*open) (hid_t id, H5VL_loc_params_t params, hid_t req);
herr_t (*copy) (hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, const char *dst_name,
hid_t ocpypl_id, hid_t lcpl_id, hid_t req);
herr_t (*visit) (hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order,