summaryrefslogtreecommitdiffstats
path: root/src/H5A.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>1999-07-03 10:31:26 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>1999-07-03 10:31:26 (GMT)
commit650e29cff6b23b99318f70699af08cfdb57ea924 (patch)
treee37bc1ece43cbbad2504adbea63a5ef9241d2453 /src/H5A.c
parent1b20703c2048cf176df2d5c792de56da92ae03e2 (diff)
downloadhdf5-650e29cff6b23b99318f70699af08cfdb57ea924.zip
hdf5-650e29cff6b23b99318f70699af08cfdb57ea924.tar.gz
hdf5-650e29cff6b23b99318f70699af08cfdb57ea924.tar.bz2
[svn-r1418] Modified H5Tconvert to require a dataset transfer property list ID as the
final parameter (so that VL datatypes have a way to pass in the custom memory allocation routines). Fixed a conversion bug when VL fields were part of a compound datatype that was causing the no-op conversion routine to be used instead of the vlen routine. Added the H5Pset_vlen_mem_manager and H5Pget_vlen_mem_manager routines to allow users to provide their own custom memory allocation routines for VL data read in from the file and reclaimed with H5Dvlen_reclaim. Finished coding on H5Dvlen_reclaim so it works now.
Diffstat (limited to 'src/H5A.c')
-rw-r--r--src/H5A.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/src/H5A.c b/src/H5A.c
index fc0efef..a01e652 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -243,10 +243,8 @@ H5A_create(const H5G_entry_t *ent, const char *name, const H5T_t *type,
attr->name=HDstrdup(name);
attr->dt=H5T_copy(type, H5T_COPY_ALL);
/* Mark any VL datatypes as being on disk now */
- if(H5T_get_class(attr->dt)==H5T_VLEN) {
- if (H5T_vlen_set_loc(attr->dt, ent->file, H5T_VLEN_DISK)<0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location");
- }
+ if (H5T_vlen_mark(attr->dt, ent->file, H5T_VLEN_DISK)<0) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location");
}
attr->ds=H5S_copy(space);
attr->initialized = TRUE; /*for now, set to false later*/
@@ -667,7 +665,7 @@ H5A_write(H5A_t *attr, const H5T_t *mem_type, void *buf)
}
/* Perform data type conversion */
- if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, tconv_buf, bkg_buf)<0) {
+ if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, tconv_buf, bkg_buf, H5P_DEFAULT)<0) {
HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL,
"data type conversion failed");
}
@@ -835,7 +833,7 @@ H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf)
}
/* Perform data type conversion. */
- if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, tconv_buf, bkg_buf)<0) {
+ if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, tconv_buf, bkg_buf, H5P_DEFAULT)<0) {
HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL,
"data type conversion failed");
}
@@ -962,11 +960,9 @@ H5Aget_type(hid_t attr_id)
"unable to copy datatype");
}
/* Mark any VL datatypes as being in memory now */
- if(H5T_get_class(dst)==H5T_VLEN) {
- if (H5T_vlen_set_loc(dst, NULL, H5T_VLEN_MEMORY)<0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ if (H5T_vlen_mark(dst, NULL, H5T_VLEN_MEMORY)<0) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
"invalid VL location");
- }
}
if (H5T_lock(dst, FALSE)<0) {
H5T_close(dst);