summaryrefslogtreecommitdiffstats
path: root/src/H5VLnative.c
diff options
context:
space:
mode:
authorMohamad Chaarawi <chaarawi@hdfgroup.org>2012-07-05 22:11:13 (GMT)
committerMohamad Chaarawi <chaarawi@hdfgroup.org>2012-07-05 22:11:13 (GMT)
commit7a070012c08c4ef16a6effc01e03c2ca7cd8fa00 (patch)
tree1e1b8f704b43c9695e10475ba7d5dbb970be1856 /src/H5VLnative.c
parente4a60d86caa7a76001dd4e09af246c4c0fad19ea (diff)
downloadhdf5-7a070012c08c4ef16a6effc01e03c2ca7cd8fa00.zip
hdf5-7a070012c08c4ef16a6effc01e03c2ca7cd8fa00.tar.gz
hdf5-7a070012c08c4ef16a6effc01e03c2ca7cd8fa00.tar.bz2
[svn-r22519] - many bug fixes
- still some unresolved issues with named datatypes
Diffstat (limited to 'src/H5VLnative.c')
-rw-r--r--src/H5VLnative.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/H5VLnative.c b/src/H5VLnative.c
index 9f79946..07d574d 100644
--- a/src/H5VLnative.c
+++ b/src/H5VLnative.c
@@ -781,8 +781,8 @@ H5VL_native_attr_get(void *obj, H5VL_attr_get_t get_type, hid_t UNUSED req, va_l
/* Copy the name into the user's buffer, if given */
if(buf) {
- HDstrncpy(buf, attr->shared->name, MIN((size_t)(ret_value + 1), buf_size));
- if((size_t)ret_value >= buf_size)
+ HDstrncpy(buf, attr->shared->name, MIN((size_t)(*ret_val + 1), buf_size));
+ if((size_t)(*ret_val) >= buf_size)
buf[buf_size - 1]='\0';
} /* end if */
@@ -907,12 +907,12 @@ H5VL_native_attr_remove(void *obj, H5VL_loc_params_t loc_params, const char *att
if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object")
- if(loc_params.type == H5VL_OBJECT_BY_SELF) { /* H5Adelete */
+ if(H5VL_OBJECT_BY_SELF == loc_params.type) { /* 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 if(loc_params.type == H5VL_OBJECT_BY_NAME) { /* H5Adelete_by_name */
+ else if(H5VL_OBJECT_BY_NAME == loc_params.type) { /* H5Adelete_by_name */
/* Set up opened group location to fill in */
obj_loc.oloc = &obj_oloc;
obj_loc.path = &obj_path;
@@ -928,7 +928,7 @@ H5VL_native_attr_remove(void *obj, H5VL_loc_params_t loc_params, const char *att
if(H5O_attr_remove(obj_loc.oloc, attr_name, H5AC_dxpl_id) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
}
- if(loc_params.type == H5VL_OBJECT_BY_IDX) { /* H5Adelete_by_idx */
+ else if(H5VL_OBJECT_BY_IDX == loc_params.type) { /* H5Adelete_by_idx */
/* Set up opened group location to fill in */
obj_loc.oloc = &obj_oloc;
obj_loc.path = &obj_path;
@@ -1018,6 +1018,20 @@ H5VL_native_datatype_commit(void *obj, H5VL_loc_params_t loc_params, const char
if(NULL == (dt = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a datatype")
+ /*
+ * Check arguments. We cannot commit an immutable type because H5Tclose()
+ * normally fails on such types (try H5Tclose(H5T_NATIVE_INT)) but closing
+ * a named type should always succeed.
+ */
+ if(H5T_STATE_NAMED == dt->shared->state || H5T_STATE_OPEN == dt->shared->state)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "datatype is already committed")
+ if(H5T_STATE_IMMUTABLE == dt->shared->state)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "datatype is immutable")
+
+ /* Check for a "sensible" datatype to store on disk */
+ if(H5T_is_sensible(dt) <= 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "datatype is not sensible")
+
/* Copy the datatype - the copied one will be the type that is
committed, and attached to original datatype above the VOL
layer*/