diff options
Diffstat (limited to 'src/H5VLnative.c')
-rw-r--r-- | src/H5VLnative.c | 257 |
1 files changed, 100 insertions, 157 deletions
diff --git a/src/H5VLnative.c b/src/H5VLnative.c index b8f5550..413bb2f 100644 --- a/src/H5VLnative.c +++ b/src/H5VLnative.c @@ -63,7 +63,6 @@ static hid_t H5VL_NATIVE_g = 0; /* Prototypes */ static H5F_t *H5VL_native_get_file(void *obj, H5I_type_t type); -static herr_t H5VL_native_get_loc(void *obj, H5I_type_t type, H5G_loc_t *loc); static herr_t H5VL_native_term(void); /* Atrribute callbacks */ @@ -272,84 +271,6 @@ H5VL_native_term(void) /*--------------------------------------------------------------------------- - * Function: H5VL_native_get_loc - * - * Purpose: utility routine to get object location - * - * Returns: Non-negative on success or negative on failure - * - * Programmer: Mohamad Chaarawi - * June, 2012 - * - *--------------------------------------------------------------------------- - */ -static herr_t -H5VL_native_get_loc(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") -#if 0 - H5T_t *tmp_dt = (H5T_t *)obj; - H5T_t *dt = (H5T_t *)(tmp_dt->vol_obj); - if(NULL == (loc->oloc = H5T_oloc(dt))) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get object location of datatype") - if(NULL == (loc->path = H5T_nameof(dt))) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get path of datatype") -#endif - 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_FILE_PRIVATE: - 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) -} /* H5VL_native_get_loc */ - - -/*--------------------------------------------------------------------------- * Function: H5VL_native_get_file * * Purpose: utility routine to get file object @@ -402,7 +323,6 @@ H5VL_native_get_file(void *obj, H5I_type_t type) oloc = H5A_oloc(attr); break; } - case H5I_FILE_PRIVATE: case H5I_UNINIT: case H5I_BADID: case H5I_DATASPACE: @@ -460,26 +380,25 @@ H5VL_native_register_aux(hid_t obj_id) switch(H5I_get_type(obj_id)) { case H5I_FILE: - if (H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5F_close_file) < 0) + if(H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5F_close_file) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") break; case H5I_GROUP: - if (H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5G_close_group) < 0) + if(H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5G_close_group) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") break; case H5I_DATATYPE: - if (H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5T_close_datatype) < 0) + if(H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5T_close_datatype) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") break; case H5I_DATASET: - if (H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5D_close_dataset) < 0) + if(H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5D_close_dataset) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") break; case H5I_ATTR: - if (H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5A_close_attr) < 0) + if(H5I_register_aux(obj_id, vol_plugin, (H5I_free2_t)H5A_close_attr) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't attach vol info to ID") break; - case H5I_FILE_PRIVATE: case H5I_UNINIT: case H5I_BADID: case H5I_DATASPACE: @@ -555,6 +474,7 @@ H5VL_native_attr_create(void *obj, H5VL_loc_params_t loc_params, const char *att H5P_genplist_t *plist; /* Property list pointer */ hid_t type_id, space_id; H5T_t *type; /* Datatype to use for attribute */ + H5T_t *named_type; /* Named Datatype to use for attribute */ H5S_t *space; /* Dataspace to use for attribute */ H5A_t *attr = NULL; void *ret_value = NULL; @@ -571,7 +491,7 @@ H5VL_native_attr_create(void *obj, H5VL_loc_params_t loc_params, const char *att if(H5P_get(plist, H5VL_ATTR_SPACE_ID, &space_id) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get property value for space id") - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file or file object") if(0 == (H5F_INTENT(loc.oloc->file) & H5F_ACC_RDWR)) HGOTO_ERROR(H5E_ARGS, H5E_WRITEERROR, NULL, "no write intent on file") @@ -580,12 +500,17 @@ H5VL_native_attr_create(void *obj, H5VL_loc_params_t loc_params, const char *att if(NULL == (space = (H5S_t *)H5I_object_verify(space_id, H5I_DATASPACE))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a data space") + //if(NULL != (named_type = (H5T_t *)H5T_get_named_type(type))) + if(H5T_STATE_OPEN == type->shared->state || H5T_STATE_NAMED == type->shared->state){ + type = (H5T_t *)(type->vol_obj); + } + if(loc_params.type == H5VL_OBJECT_BY_SELF) { /* H5Acreate */ /* Go do the real work for attaching the attribute to the dataset */ if(NULL == (attr = H5A_create(&loc, attr_name, type, space, acpl_id, H5AC_dxpl_id))) HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to create attribute") } - else if (loc_params.type == H5VL_OBJECT_BY_NAME) { /* H5Acreate_by_name */ + else if(loc_params.type == H5VL_OBJECT_BY_NAME) { /* H5Acreate_by_name */ H5G_name_t obj_path; /* Opened object group hier. path */ H5O_loc_t obj_oloc; /* Opened object object location */ @@ -607,7 +532,6 @@ H5VL_native_attr_create(void *obj, H5VL_loc_params_t loc_params, const char *att else { HGOTO_ERROR(H5E_VOL, H5E_UNSUPPORTED, NULL, "unknown attribute create parameters") } - ret_value = (void *)attr; done: @@ -642,7 +566,7 @@ H5VL_native_attr_open(void *obj, H5VL_loc_params_t loc_params, const char *attr_ FUNC_ENTER_NOAPI_NOINIT /* check arguments */ - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file or file object") if(loc_params.type == H5VL_OBJECT_BY_SELF) { /* H5Aopen */ @@ -771,7 +695,7 @@ H5VL_native_attr_get(void *obj, H5VL_attr_get_t get_type, hid_t UNUSED req, va_l H5G_loc_t loc; /* check arguments */ - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + 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) { /* H5Aexists */ @@ -841,7 +765,7 @@ H5VL_native_attr_get(void *obj, H5VL_attr_get_t get_type, hid_t UNUSED req, va_l H5G_loc_t loc; /* check arguments */ - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") /* Open the attribute on the object header */ @@ -889,7 +813,7 @@ H5VL_native_attr_get(void *obj, H5VL_attr_get_t get_type, hid_t UNUSED req, va_l H5G_loc_t loc; /* check arguments */ - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") /* Open the attribute on the object header */ @@ -911,7 +835,7 @@ H5VL_native_attr_get(void *obj, H5VL_attr_get_t get_type, hid_t UNUSED req, va_l H5G_loc_t loc; /* check arguments */ - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") /* Open the attribute on the object header */ @@ -981,7 +905,7 @@ H5VL_native_attr_remove(void *obj, H5VL_loc_params_t loc_params, const char *att FUNC_ENTER_NOAPI_NOINIT /* check arguments */ - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + 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 */ @@ -989,7 +913,7 @@ H5VL_native_attr_remove(void *obj, H5VL_loc_params_t loc_params, const char *att 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(loc_params.type == H5VL_OBJECT_BY_NAME) { /* H5Adelete_by_name */ /* Set up opened group location to fill in */ obj_loc.oloc = &obj_oloc; obj_loc.path = &obj_path; @@ -1089,7 +1013,7 @@ H5VL_native_datatype_commit(void *obj, H5VL_loc_params_t loc_params, const char FUNC_ENTER_NOAPI_NOINIT /* check arguments */ - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file or file object") if(NULL == (dt = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE))) @@ -1101,7 +1025,7 @@ H5VL_native_datatype_commit(void *obj, H5VL_loc_params_t loc_params, const char if(NULL == (type = H5T_copy(dt, H5T_COPY_TRANSIENT))) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy"); - if (NULL != name) { /* H5Tcommit */ + if(NULL != name) { /* H5Tcommit */ /* Commit the type */ if(H5T__commit_named(&loc, name, type, lcpl_id, tcpl_id, tapl_id, H5AC_dxpl_id) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to commit datatype") @@ -1164,7 +1088,7 @@ H5VL_native_datatype_open(void *obj, H5VL_loc_params_t loc_params, const char *n FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file or file object") /* Set up datatype location to fill in */ @@ -1298,7 +1222,7 @@ H5VL_native_dataset_create(void *obj, H5VL_loc_params_t loc_params, const char * HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get property value for lcpl id") /* Check arguments */ - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file or file object") if(H5I_DATATYPE != H5I_get_type(type_id)) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a datatype ID") @@ -1306,7 +1230,7 @@ H5VL_native_dataset_create(void *obj, H5VL_loc_params_t loc_params, const char * HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a dataspace ID") /* H5Dcreate_anon */ - if (NULL == name) { + if(NULL == name) { /* build and open the new dataset */ if(NULL == (dset = H5D__create(loc.oloc->file, type_id, space, dcpl_id, dapl_id, H5AC_dxpl_id))) HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to create dataset") @@ -1368,7 +1292,7 @@ H5VL_native_dataset_open(void *obj, H5VL_loc_params_t loc_params, const char *na FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file or file object") /* Set up dataset location to fill in */ @@ -1703,11 +1627,11 @@ done: *------------------------------------------------------------------------- */ static void * -H5VL_native_file_create(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t UNUSED req) +H5VL_native_file_create(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, + hid_t UNUSED req) { H5F_t *new_file = NULL; - hid_t file_id = FAIL; - void *ret_value; + void *ret_value = NULL; FUNC_ENTER_NOAPI_NOINIT @@ -1716,26 +1640,29 @@ H5VL_native_file_create(const char *name, unsigned flags, hid_t fcpl_id, hid_t f * the EXCL or TRUNC bit is set. All newly-created files are opened for * reading and writing. */ - if (0==(flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC))) + if(0==(flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC))) flags |= H5F_ACC_EXCL; /*default*/ flags |= H5F_ACC_RDWR | H5F_ACC_CREAT; /* Create the file */ if(NULL == (new_file = H5F_open(name, flags, fcpl_id, fapl_id, H5AC_dxpl_id))) HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to create file") +#if 0 /* Get an atom for the file */ if((file_id = H5I_register(H5I_FILE_PRIVATE, new_file, TRUE)) < 0) HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, NULL, "unable to atomize file handle") /* store a pointer to the VOL class in the file structure */ new_file->vol_cls = &H5VL_native_g; new_file->file_id = file_id; - - ret_value = (void *)new_file; - -done: if(file_id < 0 && new_file && H5F_try_close(new_file) < 0) HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "problems closing file") +#endif + ret_value = (void *)new_file; +done: + if(NULL == ret_value && new_file) + if(H5F_close(new_file) < 0) + HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "problems closing file") FUNC_LEAVE_NOAPI(ret_value) } /* end H5VL_native_file_create() */ @@ -1757,25 +1684,27 @@ static void * H5VL_native_file_open(const char *name, unsigned flags, hid_t fapl_id, hid_t UNUSED req) { H5F_t *new_file = NULL; - hid_t file_id = FAIL; - void *ret_value; + void *ret_value = NULL; FUNC_ENTER_NOAPI_NOINIT /* Open the file */ if(NULL == (new_file = H5F_open(name, flags, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id))) HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file") +#if 0 /* Get an atom for the file */ if((file_id = H5I_register(H5I_FILE_PRIVATE, new_file, TRUE)) < 0) HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, NULL, "unable to atomize file handle") /* store a pointer to the VOL class in the file structure */ new_file->vol_cls = &H5VL_native_g; new_file->file_id = file_id; - + if(file_id < 0 && new_file && H5F_try_close(new_file) < 0) + HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "problems closing file") +#endif ret_value = (void *)new_file; done: - if(file_id < 0 && new_file && H5F_try_close(new_file) < 0) + if(NULL == ret_value && new_file && H5F_try_close(new_file) < 0) HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "problems closing file") FUNC_LEAVE_NOAPI(ret_value) } /* end H5VL_native_file_open() */ @@ -1802,7 +1731,7 @@ H5VL_native_file_flush(void *obj, H5VL_loc_params_t loc_params, H5F_scope_t scop FUNC_ENTER_NOAPI_NOINIT - if (NULL == (f = H5VL_native_get_file(obj, loc_params.obj_type))) { + if(NULL == (f = H5VL_native_get_file(obj, loc_params.obj_type))) { HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") } @@ -1941,7 +1870,7 @@ H5VL_native_file_get(void *obj, H5VL_file_get_t get_type, hid_t UNUSED req, va_l ssize_t *ret = va_arg (arguments, ssize_t *); size_t len; - if (NULL == (f = H5VL_native_get_file(obj, type))) { + if(NULL == (f = H5VL_native_get_file(obj, type))) { HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") } @@ -1961,13 +1890,18 @@ H5VL_native_file_get(void *obj, H5VL_file_get_t get_type, hid_t UNUSED req, va_l case H5VL_OBJECT_GET_FILE: { H5I_type_t type = va_arg (arguments, H5I_type_t); - hbool_t app_ref = va_arg (arguments, hbool_t); void **ret = va_arg (arguments, void **); + + if(NULL == (f = H5VL_native_get_file(obj, type))) { + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") + } +#if 0 + hbool_t app_ref = va_arg (arguments, hbool_t); H5F_t *file = NULL; hid_t file_id; H5G_loc_t loc; /* Location of object */ - if (H5VL_native_get_loc(obj, type, &loc) < 0) { + if(H5G_loc_real(obj, type, &loc) < 0) { HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") } /* Get the file ID for the object */ @@ -1977,7 +1911,8 @@ H5VL_native_file_get(void *obj, H5VL_file_get_t get_type, hid_t UNUSED req, va_l /* return the file object */ if(NULL == (file = (H5F_t *)H5I_object(file_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier") - *ret = (void*)file; +#endif + *ret = (void*)f; break; } default: @@ -2018,7 +1953,7 @@ H5VL_native_file_misc(void *obj, H5VL_file_misc_t misc_type, hid_t UNUSED req, v hid_t plist_id = va_arg (arguments, hid_t); H5G_loc_t loc; - if (H5VL_native_get_loc(obj, type, &loc) < 0) { + if(H5G_loc_real(obj, type, &loc) < 0) { HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") } /* Do the mount */ @@ -2034,11 +1969,11 @@ H5VL_native_file_misc(void *obj, H5VL_file_misc_t misc_type, hid_t UNUSED req, v const char *name = va_arg (arguments, const char *); H5G_loc_t loc; - if (H5VL_native_get_loc(obj, type, &loc) < 0) { + if(H5G_loc_real(obj, type, &loc) < 0) { HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") } /* Unmount */ - if (H5F_unmount(&loc, name, H5AC_dxpl_id) < 0) + if(H5F_unmount(&loc, name, H5AC_dxpl_id) < 0) HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "unable to unmount file") break; @@ -2145,7 +2080,7 @@ H5VL_native_file_optional(void *obj, H5VL_file_optional_t optional_type, hid_t U H5I_type_t type = va_arg (arguments, H5I_type_t); H5F_info2_t *finfo = va_arg (arguments, H5F_info2_t *); - if (NULL == (f = H5VL_native_get_file(obj, type))) { + if(NULL == (f = H5VL_native_get_file(obj, type))) { HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") } @@ -2301,6 +2236,7 @@ H5VL_native_file_close(void *file, hid_t UNUSED req) { int nref; H5F_t *f = (H5F_t *)file; + hid_t file_id = FAIL; herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI_NOINIT @@ -2310,19 +2246,27 @@ H5VL_native_file_close(void *file, hid_t UNUSED req) * This is only necessary to replicate previous behaviour, and could be * disabled by an option/property to improve performance. */ if((f->shared->nrefs > 1) && (H5F_INTENT(f) & H5F_ACC_RDWR)) { - if((nref = H5I_get_ref(f->file_id, FALSE)) < 0) + /* get the file ID corresponding to the H5F_t struct */ + if((file_id = H5VL_get_id(f, H5I_FILE)) < 0) + HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "invalid atom") + /* get the number of references outstanding for this file ID */ + if((nref = H5I_get_ref(file_id, FALSE)) < 0) HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "can't get ID ref count") if(nref == 1) if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0) HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache") } /* end if */ - + /* close the file */ + if(H5F_close(f) < 0) + HGOTO_ERROR(H5E_FILE, H5E_CANTDEC, FAIL, "can't close file") +#if 0 /* * Decrement reference count on atom. When it reaches zero the file will * be closed. */ if(H5I_dec_app_ref(f->file_id) < 0) HGOTO_ERROR(H5E_ATOM, H5E_CANTCLOSEFILE, FAIL, "decrementing file ID failed") +#endif done: FUNC_LEAVE_NOAPI(ret_value) @@ -2362,11 +2306,11 @@ H5VL_native_group_create(void *obj, H5VL_loc_params_t loc_params, const char *na if(H5P_get(plist, H5VL_GRP_LCPL_ID, &lcpl_id) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get property value for lcpl id") - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file or file object") /* if name is NULL then this is from H5Gcreate_anon */ - if (name == NULL) { + if(name == NULL) { H5G_obj_create_t gcrt_info; /* Information for group creation */ /* Set up group creation info */ gcrt_info.gcpl_id = gcpl_id; @@ -2386,7 +2330,7 @@ H5VL_native_group_create(void *obj, H5VL_loc_params_t loc_params, const char *na ret_value = (void *)grp; done: - if (name == NULL) { + if(name == NULL) { /* Release the group's object header, if it was created */ if(grp) { H5O_loc_t *oloc; /* Object location for group */ @@ -2426,7 +2370,7 @@ H5VL_native_group_open(void *obj, H5VL_loc_params_t loc_params, const char *name FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file or file object") /* Open the group */ @@ -2478,7 +2422,7 @@ H5VL_native_group_get(void *obj, H5VL_group_get_t get_type, hid_t UNUSED req, va H5G_info_t *grp_info = va_arg (arguments, H5G_info_t *); H5G_loc_t loc; - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + 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) { /* H5Gget_info */ @@ -2486,7 +2430,7 @@ H5VL_native_group_get(void *obj, H5VL_group_get_t get_type, hid_t UNUSED req, va 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 if (loc_params.type == H5VL_OBJECT_BY_NAME) { /* H5Gget_info_by_name */ + else if(loc_params.type == H5VL_OBJECT_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 */ @@ -2511,7 +2455,7 @@ H5VL_native_group_get(void *obj, H5VL_group_get_t get_type, hid_t UNUSED req, va 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_BY_IDX) { /* H5Gget_info_by_idx */ + else if(loc_params.type == H5VL_OBJECT_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 */ @@ -2620,13 +2564,13 @@ H5VL_native_link_create(H5VL_link_create_type_t create_type, void *obj, H5VL_loc if(H5P_get(plist, H5VL_LINK_TARGET_LOC_PARAMS, &cur_params) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get property value for current name") - if (NULL != cur_obj && H5VL_native_get_loc(cur_obj, cur_params.obj_type, &cur_loc) < 0) + if(NULL != cur_obj && H5G_loc_real(cur_obj, cur_params.obj_type, &cur_loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") - if (NULL != obj && H5VL_native_get_loc(obj, loc_params.obj_type, &link_loc) < 0) + if(NULL != obj && H5G_loc_real(obj, loc_params.obj_type, &link_loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") /* H5Lcreate_hard */ - if (H5VL_OBJECT_BY_NAME == cur_params.type) { + if(H5VL_OBJECT_BY_NAME == cur_params.type) { H5G_loc_t *cur_loc_p, *link_loc_p; /* Set up current & new location pointers */ @@ -2658,7 +2602,7 @@ H5VL_native_link_create(H5VL_link_create_type_t create_type, void *obj, H5VL_loc char *target_name; H5G_loc_t link_loc; /* Group location for new link */ - if (H5VL_native_get_loc(obj, loc_params.obj_type, &link_loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &link_loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") if(H5P_get(plist, H5VL_LINK_TARGET_NAME, &target_name) < 0) @@ -2677,7 +2621,7 @@ H5VL_native_link_create(H5VL_link_create_type_t create_type, void *obj, H5VL_loc void *udata; size_t udata_size; - if (H5VL_native_get_loc(obj, loc_params.obj_type, &link_loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &link_loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") if(H5P_get(plist, H5VL_LINK_TYPE, &link_type) < 0) @@ -2729,9 +2673,9 @@ H5VL_native_link_move(void *src_obj, H5VL_loc_params_t loc_params1, FUNC_ENTER_NOAPI_NOINIT - if (NULL != src_obj && H5VL_native_get_loc(src_obj, loc_params1.obj_type, &src_loc) < 0) + if(NULL != src_obj && H5G_loc_real(src_obj, loc_params1.obj_type, &src_loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") - if (NULL != dst_obj && H5VL_native_get_loc(dst_obj, loc_params2.obj_type, &dst_loc) < 0) + if(NULL != dst_obj && H5G_loc_real(dst_obj, loc_params2.obj_type, &dst_loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") /* Set up src & dst location pointers */ @@ -2775,10 +2719,10 @@ static herr_t H5VL_native_link_iterate(void *obj, H5VL_loc_params_t loc_params, FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + 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 (!recursive) { + if(!recursive) { H5G_link_iterate_t lnk_op; /* Link operator */ hsize_t last_lnk; /* Index of last object looked at */ hsize_t idx; /* Internal location to hold index */ @@ -2856,7 +2800,7 @@ H5VL_native_link_get(void *obj, H5VL_loc_params_t loc_params, H5VL_link_get_t ge FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") switch (get_type) { @@ -2990,7 +2934,7 @@ H5VL_native_link_remove(void *obj, H5VL_loc_params_t loc_params, hid_t UNUSED re FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") /* Unlink */ @@ -3046,7 +2990,7 @@ H5VL_native_object_open(void *obj, H5VL_loc_params_t loc_params, H5I_type_t *ope FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file or file object") switch (loc_params.type) { @@ -3121,7 +3065,7 @@ H5VL_native_object_open(void *obj, H5VL_loc_params_t loc_params, H5I_type_t *ope } *opened_type = H5I_get_type (temp_id); - if (NULL == (ret_value = H5I_remove(temp_id))) { + if(NULL == (ret_value = H5I_remove(temp_id))) { HDONE_ERROR(H5E_SYM, H5E_CANTOPENOBJ, NULL, "unable to open object") } done: @@ -3158,9 +3102,9 @@ H5VL_native_object_copy(void *src_obj, H5VL_loc_params_t loc_params1, const char FUNC_ENTER_NOAPI_NOINIT /* get location for objects */ - if (H5VL_native_get_loc(src_obj, loc_params1.obj_type, &src_loc) < 0) + if(H5G_loc_real(src_obj, loc_params1.obj_type, &src_loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") - if (H5VL_native_get_loc(dst_obj, loc_params2.obj_type, &dst_loc) < 0) + if(H5G_loc_real(dst_obj, loc_params2.obj_type, &dst_loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") /* Open the object */ @@ -3194,7 +3138,7 @@ static herr_t H5VL_native_object_visit(void *obj, H5VL_loc_params_t loc_params, FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") /* Call internal object visitation routine */ @@ -3380,13 +3324,13 @@ H5VL_native_object_free_loc(void *location, hid_t UNUSED req) if(H5G_loc_free(obj_loc) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't free location") - if (NULL != obj_loc->oloc) { + if(NULL != obj_loc->oloc) { H5MM_free(obj_loc->oloc); } - if (NULL != obj_loc->path) { + if(NULL != obj_loc->path) { H5MM_free(obj_loc->path); } - if (NULL != obj_loc) { + if(NULL != obj_loc) { H5MM_free(obj_loc); } @@ -3418,7 +3362,7 @@ H5VL_native_object_misc(void *obj, H5VL_loc_params_t loc_params, H5VL_object_mis FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") switch (misc_type) { @@ -3561,7 +3505,7 @@ H5VL_native_object_get(void *obj, H5VL_loc_params_t loc_params, H5VL_object_get_ FUNC_ENTER_NOAPI_NOINIT - if (H5VL_native_get_loc(obj, loc_params.obj_type, &loc) < 0) + if(H5G_loc_real(obj, loc_params.obj_type, &loc) < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object") switch (get_type) { @@ -3570,7 +3514,7 @@ H5VL_native_object_get(void *obj, H5VL_loc_params_t loc_params, H5VL_object_get_ { htri_t *ret = va_arg (arguments, htri_t *); - if (loc_params.type == H5VL_OBJECT_BY_NAME) { + if(loc_params.type == H5VL_OBJECT_BY_NAME) { /* Check if the object exists */ if((*ret = H5G_loc_exists(&loc, loc_params.loc_data.loc_by_name.name, loc_params.loc_data.loc_by_name.plist_id, H5AC_dxpl_id)) < 0) @@ -3593,13 +3537,13 @@ H5VL_native_object_get(void *obj, H5VL_loc_params_t loc_params, H5VL_object_get_ H5AC_ind_dxpl_id) < 0) HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found") } - else if (loc_params.type == H5VL_OBJECT_BY_NAME) { /* H5Oget_info_by_name */ + else if(loc_params.type == H5VL_OBJECT_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_BY_IDX) { /* H5Oget_info_by_idx */ + else if(loc_params.type == H5VL_OBJECT_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 */ @@ -3738,7 +3682,6 @@ H5VL_native_object_close(void UNUSED *obj, H5VL_loc_params_t loc_params, hid_t U case H5I_DATATYPE: case H5I_DATASET: break; - case H5I_FILE_PRIVATE: case H5I_UNINIT: case H5I_BADID: case H5I_FILE: |