mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-21 01:04:10 +08:00
Merge pull request #2029 in HDFFV/hdf5 from ~CHOGAN/hdf5:feature/cx_lcpl to develop
* commit '4ce9c10c568ff81ebd4eb7585039cbe3c40d1718': Add documentation for H5CX_get_ohdr_flags Add object header flags to API context Use major error code of calling package Handle H5CX_state_t for lcpl Add character encoding to lcpl context Change LC property name from 'create_intermediate_group' to 'intermediate_group' Use API context to store/retrieve LCPL when creating intermediate groups
This commit is contained in:
commit
b8a56718e4
222
src/H5CX.c
222
src/H5CX.c
@ -181,6 +181,10 @@ typedef struct H5CX_t {
|
||||
hid_t dxpl_id; /* DXPL ID for API operation */
|
||||
H5P_genplist_t *dxpl; /* Dataset Transfer Property List */
|
||||
|
||||
/* LCPL */
|
||||
hid_t lcpl_id; /* LCPL ID for API operation */
|
||||
H5P_genplist_t *lcpl; /* Link Creation Property List */
|
||||
|
||||
/* LAPL */
|
||||
hid_t lapl_id; /* LAPL ID for API operation */
|
||||
H5P_genplist_t *lapl; /* Link Access Property List */
|
||||
@ -278,6 +282,12 @@ typedef struct H5CX_t {
|
||||
#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* Cached LCPL properties */
|
||||
H5T_cset_t encoding; /* Link name character encoding */
|
||||
hbool_t encoding_valid; /* Whether link name character encoding is valid */
|
||||
unsigned intermediate_group; /* Whether to create intermediate groups */
|
||||
hbool_t intermediate_group_valid; /* Whether create intermediate group flag is valid */
|
||||
|
||||
/* Cached LAPL properties */
|
||||
size_t nlinks; /* Number of soft / UD links to traverse (H5L_ACS_NLINKS_NAME) */
|
||||
hbool_t nlinks_valid; /* Whether number of soft / UD links to traverse is valid */
|
||||
@ -285,6 +295,8 @@ typedef struct H5CX_t {
|
||||
/* Cached DCPL properties */
|
||||
hbool_t do_min_dset_ohdr; /* Whether to minimize dataset object header */
|
||||
hbool_t do_min_dset_ohdr_valid; /* Whether minimize dataset object header flag is valid */
|
||||
uint8_t ohdr_flags; /* Object header flags */
|
||||
hbool_t ohdr_flags_valid; /* Whether the object headers flags are valid */
|
||||
|
||||
/* Cached DAPL properties */
|
||||
const char *extfile_prefix; /* Prefix for external file */
|
||||
@ -346,6 +358,13 @@ typedef struct H5CX_dxpl_cache_t {
|
||||
H5T_conv_cb_t dt_conv_cb; /* Datatype conversion struct (H5D_XFER_CONV_CB_NAME) */
|
||||
} H5CX_dxpl_cache_t;
|
||||
|
||||
/* Typedef for cached default link creation property list information */
|
||||
/* (Same as the cached DXPL struct, above, except for the default LCPL) */
|
||||
typedef struct H5CX_lcpl_cache_t {
|
||||
H5T_cset_t encoding; /* Link name character encoding */
|
||||
unsigned intermediate_group; /* Whether to create intermediate groups */
|
||||
} H5CX_lcpl_cache_t;
|
||||
|
||||
/* Typedef for cached default link access property list information */
|
||||
/* (Same as the cached DXPL struct, above, except for the default LAPL) */
|
||||
typedef struct H5CX_lapl_cache_t {
|
||||
@ -356,6 +375,7 @@ typedef struct H5CX_lapl_cache_t {
|
||||
/* (Same as the cached DXPL struct, above, except for the default DCPL) */
|
||||
typedef struct H5CX_dcpl_cache_t {
|
||||
hbool_t do_min_dset_ohdr; /* Whether to minimize dataset object header */
|
||||
uint8_t ohdr_flags; /* Object header flags */
|
||||
} H5CX_dcpl_cache_t;
|
||||
|
||||
/* Typedef for cached default dataset access property list information */
|
||||
@ -401,6 +421,9 @@ static H5CX_node_t *H5CX_head_g = NULL; /* Pointer to head of context st
|
||||
/* Define a "default" dataset transfer property list cache structure to use for default DXPLs */
|
||||
static H5CX_dxpl_cache_t H5CX_def_dxpl_cache;
|
||||
|
||||
/* Define a "default" link creation property list cache structure to use for default LCPLs */
|
||||
static H5CX_lcpl_cache_t H5CX_def_lcpl_cache;
|
||||
|
||||
/* Define a "default" link access property list cache structure to use for default LAPLs */
|
||||
static H5CX_lapl_cache_t H5CX_def_lapl_cache;
|
||||
|
||||
@ -435,6 +458,7 @@ herr_t
|
||||
H5CX__init_package(void)
|
||||
{
|
||||
H5P_genplist_t *dx_plist; /* Data transfer property list */
|
||||
H5P_genplist_t *lc_plist; /* Link creation property list */
|
||||
H5P_genplist_t *la_plist; /* Link access property list */
|
||||
H5P_genplist_t *dc_plist; /* Dataset creation property list */
|
||||
H5P_genplist_t *da_plist; /* Dataset access property list */
|
||||
@ -525,6 +549,23 @@ H5CX__init_package(void)
|
||||
if(H5P_get(dx_plist, H5D_XFER_CONV_CB_NAME, &H5CX_def_dxpl_cache.dt_conv_cb) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve datatype conversion exception callback")
|
||||
|
||||
/* Reset the "default LCPL cache" information */
|
||||
HDmemset(&H5CX_def_lcpl_cache, 0, sizeof(H5CX_lcpl_cache_t));
|
||||
|
||||
/* Get the default LCPL cache information */
|
||||
|
||||
/* Get the default link creation property list */
|
||||
if(NULL == (lc_plist = (H5P_genplist_t *)H5I_object(H5P_LINK_CREATE_DEFAULT)))
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_BADTYPE, FAIL, "not a link creation property list")
|
||||
|
||||
/* Get link name character encoding */
|
||||
if(H5P_get(lc_plist, H5P_STRCRT_CHAR_ENCODING_NAME, &H5CX_def_lcpl_cache.encoding) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve link name encoding")
|
||||
|
||||
/* Get flag whether to create intermediate groups */
|
||||
if(H5P_get(lc_plist, H5L_CRT_INTERMEDIATE_GROUP_NAME, &H5CX_def_lcpl_cache.intermediate_group) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve intermediate group creation flag")
|
||||
|
||||
/* Reset the "default LAPL cache" information */
|
||||
HDmemset(&H5CX_def_lapl_cache, 0, sizeof(H5CX_lapl_cache_t));
|
||||
|
||||
@ -552,6 +593,10 @@ H5CX__init_package(void)
|
||||
if(H5P_get(dc_plist, H5D_CRT_MIN_DSET_HDR_SIZE_NAME, &H5CX_def_dcpl_cache.do_min_dset_ohdr) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve dataset minimize flag")
|
||||
|
||||
/* Get object header flags */
|
||||
if(H5P_get(dc_plist, H5O_CRT_OHDR_FLAGS_NAME, &H5CX_def_dcpl_cache.ohdr_flags) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve object header flags")
|
||||
|
||||
/* Reset the "default DAPL cache" information */
|
||||
HDmemset(&H5CX_def_dapl_cache, 0, sizeof(H5CX_dapl_cache_t));
|
||||
|
||||
@ -710,6 +755,7 @@ H5CX__push_common(H5CX_node_t *cnode)
|
||||
cnode->ctx.dxpl_id = H5P_DATASET_XFER_DEFAULT;
|
||||
cnode->ctx.dcpl_id = H5P_DATASET_CREATE_DEFAULT;
|
||||
cnode->ctx.dapl_id = H5P_DATASET_ACCESS_DEFAULT;
|
||||
cnode->ctx.lcpl_id = H5P_LINK_CREATE_DEFAULT;
|
||||
cnode->ctx.lapl_id = H5P_LINK_ACCESS_DEFAULT;
|
||||
cnode->ctx.fapl_id = H5P_FILE_ACCESS_DEFAULT;
|
||||
cnode->ctx.tag = H5AC__INVALID_TAG;
|
||||
@ -820,6 +866,18 @@ H5CX_retrieve_state(H5CX_state_t **api_state)
|
||||
if(NULL == (*api_state = H5FL_CALLOC(H5CX_state_t)))
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTALLOC, FAIL, "unable to allocate new API context state")
|
||||
|
||||
/* Check for non-default DCPL */
|
||||
if(H5P_DATASET_CREATE_DEFAULT != (*head)->ctx.dcpl_id) {
|
||||
/* Retrieve the DCPL property list */
|
||||
H5CX_RETRIEVE_PLIST(dcpl, FAIL)
|
||||
|
||||
/* Copy the DCPL ID */
|
||||
if(((*api_state)->dcpl_id = H5P_copy_plist((H5P_genplist_t *)(*head)->ctx.dcpl, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTCOPY, FAIL, "can't copy property list")
|
||||
} /* end if */
|
||||
else
|
||||
(*api_state)->dcpl_id = H5P_DATASET_CREATE_DEFAULT;
|
||||
|
||||
/* Check for non-default DXPL */
|
||||
if(H5P_DATASET_XFER_DEFAULT != (*head)->ctx.dxpl_id) {
|
||||
/* Retrieve the DXPL property list */
|
||||
@ -844,6 +902,18 @@ H5CX_retrieve_state(H5CX_state_t **api_state)
|
||||
else
|
||||
(*api_state)->lapl_id = H5P_LINK_ACCESS_DEFAULT;
|
||||
|
||||
/* Check for non-default LCPL */
|
||||
if(H5P_LINK_CREATE_DEFAULT != (*head)->ctx.lcpl_id) {
|
||||
/* Retrieve the LCPL property list */
|
||||
H5CX_RETRIEVE_PLIST(lcpl, FAIL)
|
||||
|
||||
/* Copy the LCPL ID */
|
||||
if(((*api_state)->lcpl_id = H5P_copy_plist((H5P_genplist_t *)(*head)->ctx.lcpl, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTCOPY, FAIL, "can't copy property list")
|
||||
} /* end if */
|
||||
else
|
||||
(*api_state)->lcpl_id = H5P_LINK_CREATE_DEFAULT;
|
||||
|
||||
/* Keep a reference to the current VOL wrapping context */
|
||||
(*api_state)->vol_wrap_ctx = (*head)->ctx.vol_wrap_ctx;
|
||||
if(NULL != (*api_state)->vol_wrap_ctx)
|
||||
@ -916,6 +986,10 @@ H5CX_restore_state(const H5CX_state_t *api_state)
|
||||
HDassert(head && *head);
|
||||
HDassert(api_state);
|
||||
|
||||
/* Restore the DCPL info */
|
||||
(*head)->ctx.dcpl_id = api_state->dcpl_id;
|
||||
(*head)->ctx.dcpl = NULL;
|
||||
|
||||
/* Restore the DXPL info */
|
||||
(*head)->ctx.dxpl_id = api_state->dxpl_id;
|
||||
(*head)->ctx.dxpl = NULL;
|
||||
@ -924,6 +998,10 @@ H5CX_restore_state(const H5CX_state_t *api_state)
|
||||
(*head)->ctx.lapl_id = api_state->lapl_id;
|
||||
(*head)->ctx.lapl = NULL;
|
||||
|
||||
/* Restore the LCPL info */
|
||||
(*head)->ctx.lcpl_id = api_state->lcpl_id;
|
||||
(*head)->ctx.lcpl = NULL;
|
||||
|
||||
/* Restore the VOL wrapper context */
|
||||
(*head)->ctx.vol_wrap_ctx = api_state->vol_wrap_ctx;
|
||||
|
||||
@ -964,6 +1042,11 @@ H5CX_free_state(H5CX_state_t *api_state)
|
||||
/* Sanity check */
|
||||
HDassert(api_state);
|
||||
|
||||
/* Release the DCPL */
|
||||
if(api_state->dcpl_id != H5P_DATASET_CREATE_DEFAULT)
|
||||
if(H5I_dec_ref(api_state->dcpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTDEC, FAIL, "can't decrement refcount on DCPL")
|
||||
|
||||
/* Release the DXPL */
|
||||
if(api_state->dxpl_id != H5P_DATASET_XFER_DEFAULT)
|
||||
if(H5I_dec_ref(api_state->dxpl_id) < 0)
|
||||
@ -974,6 +1057,11 @@ H5CX_free_state(H5CX_state_t *api_state)
|
||||
if(H5I_dec_ref(api_state->lapl_id) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTDEC, FAIL, "can't decrement refcount on LAPL")
|
||||
|
||||
/* Release the LCPL */
|
||||
if(api_state->lcpl_id != H5P_LINK_CREATE_DEFAULT)
|
||||
if(H5I_dec_ref(api_state->lcpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTDEC, FAIL, "can't decrement refcount on LCPL")
|
||||
|
||||
/* Release the VOL wrapper context */
|
||||
if(api_state->vol_wrap_ctx)
|
||||
if(H5VL_dec_vol_wrapper(api_state->vol_wrap_ctx) < 0)
|
||||
@ -1117,6 +1205,35 @@ done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5CX_set_libver_bounds() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_set_lcpl
|
||||
*
|
||||
* Purpose: Sets the LCPL for the current API call context.
|
||||
*
|
||||
* Return: <none>
|
||||
*
|
||||
* Programmer: Chris Hogan
|
||||
* October 28, 2019
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
H5CX_set_lcpl(hid_t lcpl_id)
|
||||
{
|
||||
H5CX_node_t **head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(*head);
|
||||
|
||||
/* Set the API context's LCPL to a new value */
|
||||
(*head)->ctx.lcpl_id = lcpl_id;
|
||||
|
||||
FUNC_LEAVE_NOAPI_VOID
|
||||
} /* end H5CX_set_lcpl() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_set_lapl
|
||||
@ -2369,6 +2486,76 @@ done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5CX_get_dt_conv_cb() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_get_encoding
|
||||
*
|
||||
* Purpose: Retrieves the character encoding for the current API call context.
|
||||
*
|
||||
* Return: Non-negative on success / Negative on failure
|
||||
*
|
||||
* Programmer: Gerd Heber
|
||||
* October 21, 2019
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5CX_get_encoding(H5T_cset_t* encoding)
|
||||
{
|
||||
H5CX_node_t **head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(encoding);
|
||||
HDassert(head && *head);
|
||||
HDassert(H5P_DEFAULT != (*head)->ctx.lcpl_id);
|
||||
|
||||
H5CX_RETRIEVE_PROP_VALID(lcpl, H5P_LINK_CREATE_DEFAULT, H5P_STRCRT_CHAR_ENCODING_NAME, encoding)
|
||||
|
||||
/* Get the value */
|
||||
*encoding = (*head)->ctx.encoding;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5CX_get_encoding() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_get_intermediate_group
|
||||
*
|
||||
* Purpose: Retrieves the create intermediate group flag for the current API call context.
|
||||
*
|
||||
* Return: Non-negative on success / Negative on failure
|
||||
*
|
||||
* Programmer: Gerd Heber
|
||||
* October 21, 2019
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5CX_get_intermediate_group(unsigned* crt_intermed_group)
|
||||
{
|
||||
H5CX_node_t **head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(crt_intermed_group);
|
||||
HDassert(head && *head);
|
||||
HDassert(H5P_DEFAULT != (*head)->ctx.lcpl_id);
|
||||
|
||||
H5CX_RETRIEVE_PROP_VALID(lcpl, H5P_LINK_CREATE_DEFAULT, H5L_CRT_INTERMEDIATE_GROUP_NAME, intermediate_group)
|
||||
|
||||
/* Get the value */
|
||||
*crt_intermed_group = (*head)->ctx.intermediate_group;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5CX_get_create_intermediate_group() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_get_nlinks
|
||||
@ -3282,6 +3469,41 @@ done:
|
||||
#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_get_ohdr_flags
|
||||
*
|
||||
* Purpose: Retrieves the object header flags for the current API call context.
|
||||
*
|
||||
* Return: Non-negative on success / Negative on failure
|
||||
*
|
||||
* Programmer: Chris Hogan
|
||||
* November 15, 2019
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5CX_get_ohdr_flags(uint8_t *ohdr_flags)
|
||||
{
|
||||
H5CX_node_t **head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(ohdr_flags);
|
||||
HDassert(head && *head);
|
||||
HDassert(H5P_DEFAULT != (*head)->ctx.dcpl_id);
|
||||
|
||||
H5CX_RETRIEVE_PROP_VALID(dcpl, H5P_DATASET_CREATE_DEFAULT, H5O_CRT_OHDR_FLAGS_NAME, ohdr_flags)
|
||||
|
||||
/* Get the value */
|
||||
*ohdr_flags = (*head)->ctx.ohdr_flags;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* End H5CX_get_ohdr_flags() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX__pop_common
|
||||
|
@ -41,8 +41,10 @@
|
||||
|
||||
/* API context state */
|
||||
typedef struct H5CX_state_t {
|
||||
hid_t dcpl_id; /* DCPL for operation */
|
||||
hid_t dxpl_id; /* DXPL for operation */
|
||||
hid_t lapl_id; /* LAPL for operation */
|
||||
hid_t lcpl_id; /* LCPL for operation */
|
||||
void *vol_wrap_ctx; /* VOL connector's "wrap context" for creating IDs */
|
||||
H5VL_connector_prop_t vol_connector_prop; /* VOL connector property */
|
||||
|
||||
@ -77,6 +79,7 @@ H5_DLL herr_t H5CX_free_state(H5CX_state_t *api_state);
|
||||
|
||||
/* "Setter" routines for API context info */
|
||||
H5_DLL void H5CX_set_dxpl(hid_t dxpl_id);
|
||||
H5_DLL void H5CX_set_lcpl(hid_t lcpl_id);
|
||||
H5_DLL void H5CX_set_lapl(hid_t lapl_id);
|
||||
H5_DLL void H5CX_set_dcpl(hid_t dcpl_id);
|
||||
H5_DLL herr_t H5CX_set_libver_bounds(H5F_t *f);
|
||||
@ -122,11 +125,16 @@ H5_DLL herr_t H5CX_get_data_transform(H5Z_data_xform_t **data_transform);
|
||||
H5_DLL herr_t H5CX_get_vlen_alloc_info(H5T_vlen_alloc_info_t *vl_alloc_info);
|
||||
H5_DLL herr_t H5CX_get_dt_conv_cb(H5T_conv_cb_t *cb_struct);
|
||||
|
||||
/* "Getter" routines for LCPL properties cached in API context */
|
||||
H5_DLL herr_t H5CX_get_encoding(H5T_cset_t* encoding);
|
||||
H5_DLL herr_t H5CX_get_intermediate_group(unsigned* crt_intermed_group);
|
||||
|
||||
/* "Getter" routines for LAPL properties cached in API context */
|
||||
H5_DLL herr_t H5CX_get_nlinks(size_t *nlinks);
|
||||
|
||||
/* "Getter" routines for DCPL properties cached in API context */
|
||||
H5_DLL herr_t H5CX_get_dset_min_ohdr_flag(hbool_t *dset_min_ohdr_flag);
|
||||
H5_DLL herr_t H5CX_get_ohdr_flags(uint8_t *ohdr_flags);
|
||||
|
||||
/* "Getter" routines for DAPL properties cached in API context */
|
||||
H5_DLL herr_t H5CX_get_ext_file_prefix(const char **prefix_extfile);
|
||||
|
@ -137,6 +137,9 @@ H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
|
||||
/* Set the DCPL for the API context */
|
||||
H5CX_set_dcpl(dcpl_id);
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&dapl_id, H5P_CLS_DACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, H5I_INVALID_HID, "can't set access property list info")
|
||||
|
@ -345,6 +345,9 @@ H5Gcreate2(hid_t loc_id, const char *name, hid_t lcpl_id, hid_t gcpl_id,
|
||||
if(TRUE != H5P_isa_class(gcpl_id, H5P_GROUP_CREATE))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "not a group creation property list")
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&gapl_id, H5P_CLS_GACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTSET, H5I_INVALID_HID, "can't set access property list info")
|
||||
|
31
src/H5L.c
31
src/H5L.c
@ -299,6 +299,9 @@ H5Lmove(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
|
||||
if(H5P_DEFAULT == lcpl_id)
|
||||
lcpl_id = H5P_LINK_CREATE_DEFAULT;
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC,
|
||||
((src_loc_id != H5L_SAME_LOC) ? src_loc_id : dst_loc_id), TRUE) < 0)
|
||||
@ -386,6 +389,9 @@ H5Lcopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
|
||||
if(H5P_DEFAULT == lcpl_id)
|
||||
lcpl_id = H5P_LINK_CREATE_DEFAULT;
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC,
|
||||
((src_loc_id != H5L_SAME_LOC) ? src_loc_id : dst_loc_id), TRUE) < 0)
|
||||
@ -473,10 +479,13 @@ H5Lcreate_soft(const char *link_target, hid_t link_loc_id, const char *link_name
|
||||
if(lcpl_id != H5P_DEFAULT && (TRUE != H5P_isa_class(lcpl_id, H5P_LINK_CREATE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a link creation property list")
|
||||
|
||||
/* Check the group access property list */
|
||||
/* Get the link creation property list */
|
||||
if(H5P_DEFAULT == lcpl_id)
|
||||
lcpl_id = H5P_LINK_CREATE_DEFAULT;
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Set location fields */
|
||||
loc_params.type = H5VL_OBJECT_BY_NAME;
|
||||
loc_params.loc_data.loc_by_name.name = link_name;
|
||||
@ -549,6 +558,9 @@ H5Lcreate_hard(hid_t cur_loc_id, const char *cur_name,
|
||||
if(H5P_DEFAULT == lcpl_id)
|
||||
lcpl_id = H5P_LINK_CREATE_DEFAULT;
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, cur_loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
@ -635,10 +647,13 @@ H5Lcreate_ud(hid_t link_loc_id, const char *link_name, H5L_type_t link_type,
|
||||
if(!udata && udata_size)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "udata cannot be NULL if udata_size is non-zero")
|
||||
|
||||
/* Check the group access property list */
|
||||
/* Get the link creation property list */
|
||||
if(H5P_DEFAULT == lcpl_id)
|
||||
lcpl_id = H5P_LINK_CREATE_DEFAULT;
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, link_loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
@ -1850,8 +1865,8 @@ H5L__link_cb(H5G_loc_t *grp_loc/*in*/, const char *name, const H5O_link_t H5_ATT
|
||||
/* Check for non-default link creation properties */
|
||||
if(udata->lc_plist) {
|
||||
/* Get character encoding property */
|
||||
if(H5P_get(udata->lc_plist, H5P_STRCRT_CHAR_ENCODING_NAME, &udata->lnk->cset) < 0)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "can't get property value for character encoding")
|
||||
if(H5CX_get_encoding(&udata->lnk->cset) < 0)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "can't get 'character set' property")
|
||||
} /* end if */
|
||||
else
|
||||
udata->lnk->cset = H5F_DEFAULT_CSET; /* Default character encoding for link */
|
||||
@ -1992,8 +2007,8 @@ H5L__create_real(const H5G_loc_t *link_loc, const char *link_name,
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
|
||||
|
||||
/* Get intermediate group creation property */
|
||||
if(H5P_get(lc_plist, H5L_CRT_INTERMEDIATE_GROUP_NAME, &crt_intmd_group) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get property value for creating missing groups")
|
||||
if(H5CX_get_intermediate_group(&crt_intmd_group) < 0)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "can't get 'create intermediate group' property")
|
||||
|
||||
if(crt_intmd_group > 0)
|
||||
target_flags |= H5G_CRT_INTMD_GROUP;
|
||||
@ -2881,7 +2896,7 @@ H5L_move(const H5G_loc_t *src_loc, const char *src_name, const H5G_loc_t *dst_lo
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
|
||||
|
||||
/* Get intermediate group creation property */
|
||||
if(H5P_get(lc_plist, H5L_CRT_INTERMEDIATE_GROUP_NAME, &crt_intmd_group) < 0)
|
||||
if(H5CX_get_intermediate_group(&crt_intmd_group) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get property value for creating missing groups")
|
||||
|
||||
/* Set target flags for source and destination */
|
||||
@ -2889,7 +2904,7 @@ H5L_move(const H5G_loc_t *src_loc, const char *src_name, const H5G_loc_t *dst_lo
|
||||
dst_target_flags |= H5G_CRT_INTMD_GROUP;
|
||||
|
||||
/* Get character encoding property */
|
||||
if(H5P_get(lc_plist, H5P_STRCRT_CHAR_ENCODING_NAME, &char_encoding) < 0)
|
||||
if(H5CX_get_encoding(&char_encoding) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get property value for character encoding")
|
||||
} /* end if */
|
||||
|
||||
|
@ -364,10 +364,13 @@ H5Lcreate_external(const char *file_name, const char *obj_name,
|
||||
if(!link_name || !*link_name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no link name specified")
|
||||
|
||||
/* Check the group access property list */
|
||||
/* Get the link creation property list */
|
||||
if(H5P_DEFAULT == lcpl_id)
|
||||
lcpl_id = H5P_LINK_CREATE_DEFAULT;
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Get normalized copy of the link target */
|
||||
if(NULL == (norm_obj_name = H5G_normalize(obj_name)))
|
||||
HGOTO_ERROR(H5E_LINK, H5E_BADVALUE, FAIL, "can't normalize object name")
|
||||
|
@ -360,10 +360,13 @@ H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name, hid_t lcpl_id,
|
||||
if(lcpl_id != H5P_DEFAULT && (TRUE != H5P_isa_class(lcpl_id, H5P_LINK_CREATE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a link creation property list")
|
||||
|
||||
/* Check the group access property list */
|
||||
/* Get the link creation property list */
|
||||
if(H5P_DEFAULT == lcpl_id)
|
||||
lcpl_id = H5P_LINK_CREATE_DEFAULT;
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, obj_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
@ -227,6 +227,9 @@ H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
|
||||
if(TRUE != H5P_isa_class(ocpypl_id, H5P_OBJECT_COPY))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not object copy property list")
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Set up collective metadata if appropriate */
|
||||
if(H5CX_set_loc(src_loc_id) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set collective metadata read info")
|
||||
|
14
src/H5Oint.c
14
src/H5Oint.c
@ -352,8 +352,18 @@ H5O__create_ohdr(H5F_t *f, hid_t ocpl_id)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, NULL, "not a property list")
|
||||
|
||||
/* Get any object header status flags set by properties */
|
||||
if(H5P_get(oc_plist, H5O_CRT_OHDR_FLAGS_NAME, &oh_flags) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get object header flags")
|
||||
if(H5P_DATASET_CREATE_DEFAULT == ocpl_id)
|
||||
{
|
||||
/* If the OCPL is the default DCPL, we can get the header flags from the
|
||||
* API context. Otherwise we have to call H5P_get */
|
||||
if(H5CX_get_ohdr_flags(&oh_flags) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get object header flags")
|
||||
}
|
||||
else
|
||||
{
|
||||
if(H5P_get(oc_plist, H5O_CRT_OHDR_FLAGS_NAME, &oh_flags) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get object header flags")
|
||||
}
|
||||
|
||||
if(H5O_set_version(f, oh, oh_flags, H5F_STORE_MSG_CRT_IDX(f)) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, NULL, "can't set version of object header")
|
||||
|
@ -137,6 +137,9 @@ H5Tcommit2(hid_t loc_id, const char *name, hid_t type_id, hid_t lcpl_id,
|
||||
if(TRUE != H5P_isa_class(tcpl_id, H5P_DATATYPE_CREATE))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not datatype creation property list")
|
||||
|
||||
/* Set the LCPL for the API context */
|
||||
H5CX_set_lcpl(lcpl_id);
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&tapl_id, H5P_CLS_TACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
@ -43,15 +43,10 @@ H5VL__native_link_create(H5VL_link_create_type_t create_type, void *obj,
|
||||
const H5VL_loc_params_t *loc_params, hid_t lcpl_id, hid_t H5_ATTR_UNUSED lapl_id,
|
||||
hid_t H5_ATTR_UNUSED dxpl_id, void H5_ATTR_UNUSED **req, va_list arguments)
|
||||
{
|
||||
H5P_genplist_t *plist; /* Property list pointer */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_PACKAGE
|
||||
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = (H5P_genplist_t *)H5I_object(lcpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
|
||||
switch(create_type) {
|
||||
case H5VL_LINK_CREATE_HARD:
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user