summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5D.c8
-rw-r--r--src/H5Tconv.c5
-rw-r--r--src/H5Tprivate.h2
-rw-r--r--src/H5Tvlen.c17
4 files changed, 18 insertions, 14 deletions
diff --git a/src/H5D.c b/src/H5D.c
index 09caa77..90932b5 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -3380,15 +3380,15 @@ done:
herr_t
H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf)
{
- H5T_vlen_alloc_info_t vl_alloc_info; /* VL allocation info */
+ H5T_vlen_alloc_info_t _vl_alloc_info; /* VL allocation info buffer */
+ H5T_vlen_alloc_info_t *vl_alloc_info=&_vl_alloc_info; /* VL allocation info */
herr_t ret_value;
FUNC_ENTER_API(H5Dvlen_reclaim, FAIL)
H5TRACE4("e","iiix",type_id,space_id,plist_id,buf);
/* Check args */
- if (H5I_DATATYPE!=H5I_get_type(type_id) ||
- H5I_DATASPACE!=H5I_get_type(space_id) ||
+ if (H5I_DATATYPE!=H5I_get_type(type_id) || H5I_DATASPACE!=H5I_get_type(space_id) ||
buf==NULL)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid argument")
@@ -3404,7 +3404,7 @@ H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "unable to retrieve VL allocation info");
/* Call H5Diterate with args, etc. */
- ret_value=H5Diterate(buf,type_id,space_id,H5T_vlen_reclaim,&vl_alloc_info);
+ ret_value=H5Diterate(buf,type_id,space_id,H5T_vlen_reclaim,vl_alloc_info);
done:
FUNC_LEAVE_API(ret_value)
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index 865f564..95ba6c2 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -2225,7 +2225,8 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
size_t buf_stride, size_t bkg_stride, void *buf,
void *bkg, hid_t dxpl_id)
{
- H5T_vlen_alloc_info_t vl_alloc_info;/* VL allocation information */
+ H5T_vlen_alloc_info_t _vl_alloc_info; /* VL allocation info buffer */
+ H5T_vlen_alloc_info_t *vl_alloc_info=&_vl_alloc_info; /* VL allocation info */
H5T_path_t *tpath; /* Type conversion path */
hbool_t noop_conv=FALSE; /* Flag to indicate a noop conversion */
hbool_t write_to_file=FALSE; /* Flag to indicate writing to file */
@@ -2451,7 +2452,7 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
} /* end if */
/* Write sequence to destination location */
- if((*(dst->u.vlen.write))(dst->u.vlen.f,dxpl_id,&vl_alloc_info,d,conv_buf, b, (size_t)seq_len, dst_base_size)<0)
+ if((*(dst->u.vlen.write))(dst->u.vlen.f,dxpl_id,vl_alloc_info,d,conv_buf, b, (size_t)seq_len, dst_base_size)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "can't write VL data");
if(!noop_conv) {
diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h
index d274f30..69656ad 100644
--- a/src/H5Tprivate.h
+++ b/src/H5Tprivate.h
@@ -81,7 +81,7 @@ H5_DLL herr_t H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id,
size_t nelmts, size_t buf_stride, size_t bkg_stride,
void *buf, void *bkg, hid_t dset_xfer_plist);
H5_DLL herr_t H5T_vlen_reclaim(void *elem, hid_t type_id, hsize_t ndim, hssize_t *point, void *_op_data);
-H5_DLL herr_t H5T_vlen_get_alloc_info(hid_t dxpl_id, H5T_vlen_alloc_info_t *vl_alloc_info);
+H5_DLL herr_t H5T_vlen_get_alloc_info(hid_t dxpl_id, H5T_vlen_alloc_info_t **vl_alloc_info);
H5_DLL htri_t H5T_vlen_mark(H5T_t *dt, H5F_t *f, H5T_vlen_loc_t loc);
H5_DLL htri_t H5T_is_sensible(const H5T_t *dt);
H5_DLL htri_t H5T_committed(H5T_t *type);
diff --git a/src/H5Tvlen.c b/src/H5Tvlen.c
index 56e18f1..6ab21d1 100644
--- a/src/H5Tvlen.c
+++ b/src/H5Tvlen.c
@@ -62,7 +62,7 @@ static herr_t H5T_vlen_disk_setnull(H5F_t *f, hid_t dxpl_id, void *_vl, void *_b
/* Local variables */
/* Default settings for variable-length allocation routines */
-static const H5T_vlen_alloc_info_t H5T_vlen_def_vl_alloc_info ={
+static H5T_vlen_alloc_info_t H5T_vlen_def_vl_alloc_info ={
H5D_XFER_VLEN_ALLOC_DEF,
H5D_XFER_VLEN_ALLOC_INFO_DEF,
H5D_XFER_VLEN_FREE_DEF,
@@ -1158,11 +1158,14 @@ done:
transfer property list.
GLOBAL VARIABLES
COMMENTS, BUGS, ASSUMPTIONS
+ The VL_ALLOC_INFO pointer should point at already allocated memory to place
+ non-default property list info. If a default property list is used, the
+ VL_ALLOC_INFO pointer will be changed to point at the default information.
EXAMPLES
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5T_vlen_get_alloc_info(hid_t dxpl_id, H5T_vlen_alloc_info_t *vl_alloc_info)
+H5T_vlen_get_alloc_info(hid_t dxpl_id, H5T_vlen_alloc_info_t **vl_alloc_info)
{
H5P_genplist_t *plist; /* DX property list */
herr_t ret_value=SUCCEED;
@@ -1174,20 +1177,20 @@ H5T_vlen_get_alloc_info(hid_t dxpl_id, H5T_vlen_alloc_info_t *vl_alloc_info)
/* Check for the default DXPL */
if(dxpl_id==H5P_DATASET_XFER_DEFAULT)
- HDmemcpy(vl_alloc_info,&H5T_vlen_def_vl_alloc_info,sizeof(H5T_vlen_alloc_info_t));
+ *vl_alloc_info=&H5T_vlen_def_vl_alloc_info;
else {
/* Check args */
if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
/* Get the allocation functions & information */
- if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_NAME,&vl_alloc_info->alloc_func)<0)
+ if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_NAME,&(*vl_alloc_info)->alloc_func)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
- if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_INFO_NAME,&vl_alloc_info->alloc_info)<0)
+ if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_INFO_NAME,&(*vl_alloc_info)->alloc_info)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
- if (H5P_get(plist,H5D_XFER_VLEN_FREE_NAME,&vl_alloc_info->free_func)<0)
+ if (H5P_get(plist,H5D_XFER_VLEN_FREE_NAME,&(*vl_alloc_info)->free_func)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
- if (H5P_get(plist,H5D_XFER_VLEN_FREE_INFO_NAME,&vl_alloc_info->free_info)<0)
+ if (H5P_get(plist,H5D_XFER_VLEN_FREE_INFO_NAME,&(*vl_alloc_info)->free_info)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
} /* end else */