summaryrefslogtreecommitdiffstats
path: root/Modules/arraymodule.c
Commit message (Expand)AuthorAgeFilesLines
...
* Merged in py3k-buffer branch to main line. All objects now use the buffer pr...Travis E. Oliphant2007-08-181-42/+75
* Fix reference leak.Martin v. Löwis2007-08-111-0/+1
* Fix merge breakage.Martin v. Löwis2007-07-211-2/+2
* Merged revisions 56467-56482 via svnmerge fromMartin v. Löwis2007-07-211-114/+112
* Change Py_BuildValue to generate Unicode objects forMartin v. Löwis2007-07-181-1/+1
* Creating an array with a bytes object as initializerGuido van Rossum2007-07-031-1/+3
* Revert r56044 (which changed the %c format specifier to accept aWalter Dörwald2007-07-011-1/+1
* Fix a failure that was only apparent on big-endian machines:Guido van Rossum2007-06-301-2/+1
* Make array.typecode a unicode string.Walter Dörwald2007-06-221-2/+2
* "Fix" the array module test -- by ripping out the 'c' typecode.Guido van Rossum2007-06-181-27/+4
* Fixed array.fromfile(); removed references to PyFileObject in array.tofile().Guido van Rossum2007-05-241-71/+58
* Remove unused variables.Walter Dörwald2007-05-201-1/+1
* Add a format specifier %R to PyUnicode_FromFormat(), which embedsWalter Dörwald2007-05-191-10/+4
* Add functions PyUnicode_Append() and PyUnicode_AppendAndDel() that mirrorWalter Dörwald2007-05-181-4/+4
* Fix the array tests. Only a minor change to the C code was required.Guido van Rossum2007-05-101-1/+3
* Get rid of all #ifdef Py_USING_UNICODE (it is always present now).Guido van Rossum2007-05-031-14/+0
* Merged revisions 53952-54987 via svnmerge fromGuido van Rossum2007-04-271-6/+19
* Make array().tofile() work with a new I/O object.Guido van Rossum2007-04-111-5/+29
* Merged revisions 53451-53537 via svnmerge fromThomas Wouters2007-02-011-1/+1
* Four months of trunk changes (including a few releases...)Thomas Wouters2006-12-131-1/+1
* Merge current trunk into p3yk. This includes the PyNumber_Index API change,Thomas Wouters2006-08-211-6/+8
* Completely get rid of PyClass and PyInstance.Guido van Rossum2006-08-171-1/+2
* Merged revisions 46753-51188 via svnmerge fromThomas Wouters2006-08-111-2/+3
* Get rid of most of the flags (in tp_flags) that keep track of variousGuido van Rossum2006-07-271-5/+3
* Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.Thomas Wouters2006-05-271-3/+3
* Merge p3yk branch with the trunk up to revision 45595. This breaks a fairThomas Wouters2006-04-211-6/+7
* Checking in the code for PEP 357.Guido van Rossum2006-03-071-18/+11
* SF #1444030: Fix several potential defects found by Coverity.Hye-Shik Chang2006-03-071-4/+7
* Convert array.array.insert to use Py_ssize_t (like the rest already does.)Thomas Wouters2006-02-271-2/+2
* Bug #1432350: arrayobject should use PyObject_VAR_HEADGeorg Brandl2006-02-171-2/+1
* Use correct format specifier for Py_ssize_t variable to PyArg_ParseTuple().Thomas Wouters2006-02-161-1/+1
* Use Py_ssize_t for counts and sizes.Martin v. Löwis2006-02-161-16/+13
* Merge ssize_t branch.Martin v. Löwis2006-02-151-94/+99
* Check return result from Py_InitModule*(). This API can fail.Neal Norwitz2006-01-191-0/+2
* Disallow keyword arguments for type constructors that don't use them.Georg Brandl2005-08-261-12/+3
* SF #1085304: Make array.array pickle-ableRaymond Hettinger2004-12-161-0/+25
* SF feature request #992967: array.array objects should support sequences.Raymond Hettinger2004-08-291-6/+20
* Add weakref support to array.array and file objects.Raymond Hettinger2004-05-311-2/+7
* SF feature request #686323: Minor array module enhancementsRaymond Hettinger2004-03-141-9/+34
* Update the array overallocation scheme to match the approach used forRaymond Hettinger2004-03-141-61/+76
* SF bug #910986: copy.copy fails for array.arrayRaymond Hettinger2004-03-131-0/+15
* Simplify and speedup uses of Py_BuildValue():Raymond Hettinger2003-10-121-1/+1
* SF bug #782369: Massive memory leak in array moduleRaymond Hettinger2003-08-051-2/+7
* All calls to getarrayitem() (which is static) are done either in loopsWalter Dörwald2003-05-231-4/+1
* Fix array.array.insert(), so that it treats negative indices asWalter Dörwald2003-05-181-2/+5
* SF 686323: Minor array module enhancementsRaymond Hettinger2003-04-241-4/+6
* SF Patch 685051: fix for 680789: reprs in arraymoduleRaymond Hettinger2003-04-231-30/+15
* Renamed PyObject_GenericGetIter to PyObject_SelfIterRaymond Hettinger2003-03-171-1/+1
* Created PyObject_GenericGetIter().Raymond Hettinger2003-03-171-8/+1
* SF patch #687598, array.append is sloooowNeal Norwitz2003-02-241-2/+47
ore a member offset */ @@ -297,13 +318,17 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed") /* Decode the field's datatype information */ - if(H5O_dtype_decode_helper(f, pp, temp_type) < 0) { + if(H5O_dtype_decode_helper(f, ioflags, pp, temp_type) < 0) { for(j = 0; j <= i; j++) H5MM_xfree(dt->shared->u.compnd.memb[j].name); H5MM_xfree(dt->shared->u.compnd.memb); HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode member type") } /* end if */ + /* Keep track of the maximum member version found */ + if(temp_type->shared->version > max_version) + max_version = temp_type->shared->version; + /* Go create the array datatype now, for older versions of the datatype message */ if(version == H5O_DTYPE_VERSION_1) { /* Check if this member is an array field */ @@ -372,6 +397,9 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt) dt->shared->u.compnd.packed = FALSE; } /* end if */ } /* end for */ + /* Check that no member of this compound has a version greater + * than the compound itself. */ + H5O_DTYPE_CHECK_VERSION(dt, version, max_version, ioflags, "compound", FAIL) } break; @@ -402,8 +430,14 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt) dt->shared->u.enumer.nmembs = dt->shared->u.enumer.nalloc = flags & 0xffff; if(NULL == (dt->shared->parent = H5T_alloc())) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed") - if(H5O_dtype_decode_helper(f, pp, dt->shared->parent) < 0) + if(H5O_dtype_decode_helper(f, ioflags, pp, dt->shared->parent) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode parent datatype") + + /* Check if the parent of this enum has a version greater than the + * enum itself. */ + H5O_DTYPE_CHECK_VERSION(dt, version, dt->shared->parent->shared->version, + ioflags, "enum", FAIL) + if(NULL == (dt->shared->u.enumer.name = (char **)H5MM_calloc(dt->shared->u.enumer.nalloc * sizeof(char*))) || NULL == (dt->shared->u.enumer.value = (uint8_t *)H5MM_calloc(dt->shared->u.enumer.nalloc * dt->shared->parent->shared->size))) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed") @@ -438,9 +472,14 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt) /* Decode base type of VL information */ if(NULL == (dt->shared->parent = H5T_alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "memory allocation failed") - if(H5O_dtype_decode_helper(f, pp, dt->shared->parent) < 0) + if(H5O_dtype_decode_helper(f, ioflags, pp, dt->shared->parent) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode VL parent type") + /* Check if the parent of this vlen has a version greater than the + * vlen itself. */ + H5O_DTYPE_CHECK_VERSION(dt, version, dt->shared->parent->shared->version, + ioflags, "vlen", FAIL) + dt->shared->force_conv=TRUE; /* Mark this type as on disk */ if(H5T_set_loc(dt, f, H5T_LOC_DISK) < 0) @@ -471,8 +510,17 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt) /* Decode base type of array */ if(NULL == (dt->shared->parent = H5T_alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "memory allocation failed") - if(H5O_dtype_decode_helper(f, pp, dt->shared->parent) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode VL parent type") + if(H5O_dtype_decode_helper(f, ioflags, pp, dt->shared->parent) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode array parent type") + + /* Check if the parent of this array has a version greater than the + * array itself. */ + H5O_DTYPE_CHECK_VERSION(dt, version, dt->shared->parent->shared->version, + ioflags, "array", FAIL) + + /* There should be no array datatypes with version < 2. */ + H5O_DTYPE_CHECK_VERSION(dt, version, H5O_DTYPE_VERSION_2, ioflags, + "array", FAIL) /* * Set the "force conversion" flag if a VL base datatype is used or @@ -757,6 +805,9 @@ H5O_dtype_encode_helper(const H5F_t *f, uint8_t **pp, const H5T_t *dt) /* Sanity check */ /* (compound datatypes w/array members must be encoded w/version >= 2) */ HDassert(dt->shared->u.compnd.memb[i].type->shared->type != H5T_ARRAY || dt->shared->version >= H5O_DTYPE_VERSION_2); + + /* Check that the version is at least as great as the member */ + HDassert(dt->shared->version >= dt->shared->u.compnd.memb[i].type->shared->version); /* Name */ HDstrcpy((char*)(*pp), dt->shared->u.compnd.memb[i].name); @@ -817,6 +868,9 @@ H5O_dtype_encode_helper(const H5F_t *f, uint8_t **pp, const H5T_t *dt) break; case H5T_ENUM: + /* Check that the version is at least as great as the parent */ + HDassert(dt->shared->version >= dt->shared->parent->shared->version); + /* * Enumeration datatypes... */ @@ -849,6 +903,9 @@ H5O_dtype_encode_helper(const H5F_t *f, uint8_t **pp, const H5T_t *dt) break; case H5T_VLEN: /* Variable length datatypes... */ + /* Check that the version is at least as great as the parent */ + HDassert(dt->shared->version >= dt->shared->parent->shared->version); + flags |= (dt->shared->u.vlen.type & 0x0f); if(dt->shared->u.vlen.type == H5T_VLEN_STRING) { flags |= (dt->shared->u.vlen.pad & 0x0f) << 4; @@ -864,6 +921,12 @@ H5O_dtype_encode_helper(const H5F_t *f, uint8_t **pp, const H5T_t *dt) /* Double-check the number of dimensions */ HDassert(dt->shared->u.array.ndims <= H5S_MAX_RANK); + /* Check that the version is valid */ + HDassert(dt->shared->version >= H5O_DTYPE_VERSION_2); + + /* Check that the version is at least as great as the parent */ + HDassert(dt->shared->version >= dt->shared->parent->shared->version); + /* Encode the number of dimensions */ *(*pp)++ = dt->shared->u.array.ndims; @@ -927,7 +990,8 @@ done: function using malloc() and is returned to the caller. --------------------------------------------------------------------------*/ static void * -H5O_dtype_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, const uint8_t *p) +H5O_dtype_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, + unsigned *ioflags/*in,out*/, const uint8_t *p) { H5T_t *dt = NULL; void *ret_value; /* Return value */ @@ -942,21 +1006,13 @@ H5O_dtype_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, con HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed") /* Perform actual decode of message */ - if(H5O_dtype_decode_helper(f, &p, dt) < 0) + if(H5O_dtype_decode_helper(f, ioflags, &p, dt) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, NULL, "can't decode type") /* Set return value */ ret_value = dt; done: - if(ret_value == NULL) { - if(dt != NULL) { - if(dt->shared != NULL) - H5FL_FREE(H5T_shared_t, dt->shared); - H5FL_FREE(H5T_t, dt); - } /* end if */ - } /* end if */ - FUNC_LEAVE_NOAPI(ret_value) } /* end H5O_dtype_decode() */ @@ -1522,6 +1578,9 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream, fprintf(stream, "%*s%-*s %lu byte%s\n", indent, "", fwidth, "Size:", (unsigned long)(dt->shared->size), 1 == dt->shared->size ? "" : "s"); + + fprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, + "Version:", dt->shared->version); if (H5T_COMPOUND == dt->shared->type) { fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth, @@ -1815,7 +1874,7 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream, "Sign scheme:", s); } } - + FUNC_LEAVE_NOAPI(SUCCEED) } /* end H5O_dtype_debug() */ diff --git a/src/H5Oefl.c b/src/H5Oefl.c index 5fa9d6a..5090f9b 100644 --- a/src/H5Oefl.c +++ b/src/H5Oefl.c @@ -29,7 +29,8 @@ #include "H5Opkg.h" /* Object headers */ /* PRIVATE PROTOTYPES */ -static void *H5O_efl_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_efl_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_efl_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_efl_copy(const void *_mesg, void *_dest); static size_t H5O_efl_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -84,7 +85,7 @@ const H5O_msg_class_t H5O_MSG_EFL[1] = {{ */ static void * H5O_efl_decode(H5F_t *f, hid_t dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_efl_t *mesg = NULL; int version; diff --git a/src/H5Ofill.c b/src/H5Ofill.c index 1335274..fccf430 100644 --- a/src/H5Ofill.c +++ b/src/H5Ofill.c @@ -33,10 +33,12 @@ #include "H5Sprivate.h" /* Dataspaces */ -static void *H5O_fill_old_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_fill_old_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_fill_old_encode(H5F_t *f, uint8_t *p, const void *_mesg); static size_t H5O_fill_old_size(const H5F_t *f, const void *_mesg); -static void *H5O_fill_new_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_fill_new_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_fill_new_encode(H5F_t *f, uint8_t *p, const void *_mesg); static size_t H5O_fill_new_size(const H5F_t *f, const void *_mesg); static void *H5O_fill_copy(const void *_mesg, void *_dest); @@ -181,7 +183,7 @@ H5FL_BLK_EXTERN(type_conv); */ static void * H5O_fill_new_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_fill_t *fill = NULL; void *ret_value; @@ -295,7 +297,7 @@ done: */ static void * H5O_fill_old_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_fill_t *fill = NULL; /* Decoded fill value message */ void *ret_value; /* Return value */ diff --git a/src/H5Oginfo.c b/src/H5Oginfo.c index 5888f58..850a86a 100644 --- a/src/H5Oginfo.c +++ b/src/H5Oginfo.c @@ -33,7 +33,8 @@ /* PRIVATE PROTOTYPES */ -static void *H5O_ginfo_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_ginfo_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_ginfo_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_ginfo_copy(const void *_mesg, void *_dest); static size_t H5O_ginfo_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -95,7 +96,7 @@ H5FL_DEFINE_STATIC(H5O_ginfo_t); */ static void * H5O_ginfo_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_ginfo_t *ginfo = NULL; /* Pointer to group information message */ unsigned char flags; /* Flags for encoding group info */ diff --git a/src/H5Olayout.c b/src/H5Olayout.c index 1f371f3..792c1f0 100644 --- a/src/H5Olayout.c +++ b/src/H5Olayout.c @@ -33,7 +33,8 @@ /* PRIVATE PROTOTYPES */ -static void *H5O_layout_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_layout_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_layout_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_layout_copy(const void *_mesg, void *_dest); static size_t H5O_layout_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -99,7 +100,7 @@ H5FL_DEFINE(H5O_layout_t); */ static void * H5O_layout_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_layout_t *mesg = NULL; unsigned u; diff --git a/src/H5Olinfo.c b/src/H5Olinfo.c index 384353c..d96fe82 100644 --- a/src/H5Olinfo.c +++ b/src/H5Olinfo.c @@ -35,7 +35,8 @@ /* PRIVATE PROTOTYPES */ -static void *H5O_linfo_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_linfo_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_linfo_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_linfo_copy(const void *_mesg, void *_dest); static size_t H5O_linfo_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -111,7 +112,7 @@ H5FL_DEFINE_STATIC(H5O_linfo_t); */ static void * H5O_linfo_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_linfo_t *linfo = NULL; /* Link info */ unsigned char index_flags; /* Flags for encoding link index info */ diff --git a/src/H5Olink.c b/src/H5Olink.c index 175c937..6298a27 100644 --- a/src/H5Olink.c +++ b/src/H5Olink.c @@ -38,7 +38,8 @@ /* PRIVATE PROTOTYPES */ -static void *H5O_link_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_link_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_link_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_link_copy(const void *_mesg, void *_dest); static size_t H5O_link_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -116,7 +117,7 @@ H5FL_DEFINE_STATIC(H5O_link_t); */ static void * H5O_link_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_link_t *lnk = NULL; /* Pointer to link message */ size_t len = 0; /* Length of a string in the message */ diff --git a/src/H5Omessage.c b/src/H5Omessage.c index 3130066..0ff185f 100644 --- a/src/H5Omessage.c +++ b/src/H5Omessage.c @@ -484,7 +484,8 @@ H5O_msg_read(const H5O_loc_t *loc, unsigned type_id, void *mesg, HDassert(type_id < NELMTS(H5O_msg_class_g)); /* Get the object header */ - if(NULL == (oh = (H5O_t *)H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL, H5AC_READ))) + if(NULL == (oh = (H5O_t *)H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL, + (H5F_get_intent(loc->file) & H5F_ACC_RDWR) ? H5AC_WRITE : H5AC_READ))) HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "unable to load object header") /* Call the "real" read routine */ @@ -550,7 +551,7 @@ H5O_msg_read_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned type_id, * Decode the message if necessary. If the message is shared then retrieve * native message through the shared interface. */ - H5O_LOAD_NATIVE(f, dxpl_id, oh, &(oh->mesg[idx]), NULL) + H5O_LOAD_NATIVE(f, dxpl_id, 0, oh, &(oh->mesg[idx]), NULL) /* * The object header caches the native message (along with @@ -1230,7 +1231,8 @@ H5O_msg_iterate(const H5O_loc_t *loc, unsigned type_id, HDassert(op); /* Protect the object header to iterate over */ - if(NULL == (oh = (H5O_t *)H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL, H5AC_READ))) + if(NULL == (oh = (H5O_t *)H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL, + (H5F_get_intent(loc->file) & H5F_ACC_RDWR) ? H5AC_WRITE : H5AC_READ))) HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header") /* Call the "real" iterate routine */ @@ -1299,7 +1301,7 @@ H5O_msg_iterate_real(H5F_t *f, H5O_t *oh, const H5O_msg_class_t *type, for(sequence = 0, idx = 0, idx_msg = &oh->mesg[0]; idx < oh->nmesgs && !ret_value; idx++, idx_msg++) { if(type == idx_msg->type) { /* Decode the message if necessary. */ - H5O_LOAD_NATIVE(f, dxpl_id, oh, idx_msg, FAIL) + H5O_LOAD_NATIVE(f, dxpl_id, 0, oh, idx_msg, FAIL) /* Check for making an "internal" (i.e. within the H5O package) callback */ if(op->op_type == H5O_MESG_OP_LIB) @@ -1811,6 +1813,7 @@ H5O_msg_decode(H5F_t *f, hid_t dxpl_id, unsigned type_id, const unsigned char *b { const H5O_msg_class_t *type; /* Actual H5O class type for the ID */ void *ret_value; /* Return value */ + unsigned ioflags = 0; /* Flags for decode routine */ FUNC_ENTER_NOAPI(H5O_msg_decode, NULL) @@ -1821,7 +1824,7 @@ H5O_msg_decode(H5F_t *f, hid_t dxpl_id, unsigned type_id, const unsigned char *b HDassert(type); /* decode */ - if((ret_value = (type->decode)(f, dxpl_id, 0, buf)) == NULL) + if((ret_value = (type->decode)(f, dxpl_id, 0, &ioflags, buf)) == NULL) HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "unable to decode message") done: @@ -2076,7 +2079,7 @@ H5O_delete_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5O_mesg_t *mesg) /* Check if there is a file space deletion callback for this type of message */ if(type->del) { /* Decode the message if necessary. */ - H5O_LOAD_NATIVE(f, dxpl_id, oh, mesg, FAIL) + H5O_LOAD_NATIVE(f, dxpl_id, H5O_DECODEIO_NOCHANGE, oh, mesg, FAIL) if((type->del)(f, dxpl_id, oh, mesg->native) < 0) HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "unable to delete file space for object header message") diff --git a/src/H5Omtime.c b/src/H5Omtime.c index df4bdd4..18e35f2 100644 --- a/src/H5Omtime.c +++ b/src/H5Omtime.c @@ -28,11 +28,13 @@ #include "H5Opkg.h" /* Object headers */ -static void *H5O_mtime_new_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_mtime_new_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_mtime_new_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static size_t H5O_mtime_new_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); -static void *H5O_mtime_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_mtime_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_mtime_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_mtime_copy(const void *_mesg, void *_dest); static size_t H5O_mtime_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -118,7 +120,7 @@ H5FL_DEFINE(time_t); */ static void * H5O_mtime_new_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { time_t *mesg; uint32_t tmp_time; /* Temporary copy of the time */ @@ -171,7 +173,7 @@ done: */ static void * H5O_mtime_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { time_t *mesg, the_time; int i; diff --git a/src/H5Oname.c b/src/H5Oname.c index 44ab432..3b84f75 100644 --- a/src/H5Oname.c +++ b/src/H5Oname.c @@ -33,7 +33,8 @@ /* PRIVATE PROTOTYPES */ -static void *H5O_name_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_name_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_name_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_name_copy(const void *_mesg, void *_dest); static size_t H5O_name_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -84,7 +85,7 @@ const H5O_msg_class_t H5O_MSG_NAME[1] = {{ */ static void * H5O_name_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_name_t *mesg; void *ret_value; /* Return value */ diff --git a/src/H5Opkg.h b/src/H5Opkg.h index e2c5661..deffdac 100644 --- a/src/H5Opkg.h +++ b/src/H5Opkg.h @@ -174,17 +174,29 @@ #define H5O_SIZEOF_CHKSUM_OH(O) \ H5O_SIZEOF_CHKSUM_VERS((O)->version) +/* Input/output flags for decode functions */ +#define H5O_DECODEIO_NOCHANGE 0x01u /* IN: do not modify values */ +#define H5O_DECODEIO_DIRTY 0x02u /* OUT: message has been changed */ + /* Load native information for a message, if it's not already present */ /* (Only works for messages with decode callback) */ -#define H5O_LOAD_NATIVE(F, DXPL, OH, MSG, ERR) \ +#define H5O_LOAD_NATIVE(F, DXPL, IOF, OH, MSG, ERR) \ if(NULL == (MSG)->native) { \ const H5O_msg_class_t *msg_type = (MSG)->type; \ + unsigned ioflags = (IOF); \ \ /* Decode the message */ \ HDassert(msg_type->decode); \ - if(NULL == ((MSG)->native = (msg_type->decode)((F), (DXPL), (MSG)->flags, (MSG)->raw))) \ + if(NULL == ((MSG)->native = (msg_type->decode)((F), (DXPL), (MSG)->flags, &ioflags, (MSG)->raw))) \ HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, ERR, "unable to decode message") \ \ + /* Mark the object header dirty if the message was changed by decoding */ \ + if((ioflags & H5O_DECODEIO_DIRTY) && (H5F_get_intent((F)) & H5F_ACC_RDWR)) { \ + (MSG)->dirty = TRUE; \ + if(H5AC_mark_pinned_or_protected_entry_dirty((F), (OH)) < 0) \ + HGOTO_ERROR(H5E_OHDR, H5E_CANTMARKDIRTY, ERR, "unable to mark object header as dirty") \ + } \ + \ /* Set the message's "shared info", if it's shareable */ \ if((MSG)->flags & H5O_MSG_FLAG_SHAREABLE) { \ H5O_UPDATE_SHARED((H5O_shared_t *)(MSG)->native, H5O_SHARE_TYPE_HERE, (F), msg_type->id, (MSG)->crt_idx, (OH)->chunk[0].addr) \ @@ -209,7 +221,7 @@ struct H5O_msg_class_t { const char *name; /*for debugging */ size_t native_size; /*size of native message */ unsigned share_flags; /* Message sharing settings */ - void *(*decode)(H5F_t*, hid_t, unsigned, const uint8_t *); + void *(*decode)(H5F_t*, hid_t, unsigned, unsigned *, const uint8_t *); herr_t (*encode)(H5F_t*, hbool_t, uint8_t*, const void *); void *(*copy)(const void *, void *); /*copy native value */ size_t (*raw_size)(const H5F_t *, hbool_t, const void *);/*sizeof encoded message */ @@ -502,7 +514,8 @@ H5_DLL herr_t H5O_release_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5O_mesg_t *mesg, hbool_t adj_link); /* Shared object operators */ -H5_DLL void * H5O_shared_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *buf, const H5O_msg_class_t *type); +H5_DLL void * H5O_shared_decode(H5F_t *f, hid_t dxpl_id, unsigned *ioflags, + const uint8_t *buf, const H5O_msg_class_t *type); H5_DLL herr_t H5O_shared_encode(const H5F_t *f, uint8_t *buf/*out*/, const H5O_shared_t *sh_mesg); H5_DLL size_t H5O_shared_size(const H5F_t *f, const H5O_shared_t *sh_mesg); H5_DLL herr_t H5O_shared_delete(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, diff --git a/src/H5Opline.c b/src/H5Opline.c index 9a926c1..73b71ef 100644 --- a/src/H5Opline.c +++ b/src/H5Opline.c @@ -33,7 +33,8 @@ /* PRIVATE PROTOTYPES */ static herr_t H5O_pline_encode(H5F_t *f, uint8_t *p, const void *mesg); -static void *H5O_pline_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_pline_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static void *H5O_pline_copy(const void *_mesg, void *_dest); static size_t H5O_pline_size(const H5F_t *f, const void *_mesg); static herr_t H5O_pline_reset(void *_mesg); @@ -107,7 +108,7 @@ H5FL_DEFINE(H5O_pline_t); */ static void * H5O_pline_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_pline_t *pline = NULL; /* Pipeline message */ H5Z_filter_info_t *filter; /* Filter to decode */ diff --git a/src/H5Orefcount.c b/src/H5Orefcount.c index 0a06d11..77e05f2 100644 --- a/src/H5Orefcount.c +++ b/src/H5Orefcount.c @@ -33,7 +33,8 @@ /* PRIVATE PROTOTYPES */ -static void *H5O_refcount_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_refcount_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_refcount_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_refcount_copy(const void *_mesg, void *_dest); static size_t H5O_refcount_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -90,7 +91,7 @@ H5FL_DEFINE_STATIC(H5O_refcount_t); */ static void * H5O_refcount_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_refcount_t *refcount = NULL; /* Reference count */ void *ret_value; /* Return value */ diff --git a/src/H5Osdspace.c b/src/H5Osdspace.c index 414aa98..d272379 100644 --- a/src/H5Osdspace.c +++ b/src/H5Osdspace.c @@ -26,7 +26,8 @@ /* PRIVATE PROTOTYPES */ -static void *H5O_sdspace_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_sdspace_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_sdspace_encode(H5F_t *f, uint8_t *p, const void *_mesg); static void *H5O_sdspace_copy(const void *_mesg, void *_dest); static size_t H5O_sdspace_size(const H5F_t *f, const void *_mesg); @@ -109,7 +110,7 @@ H5FL_ARR_EXTERN(hsize_t); --------------------------------------------------------------------------*/ static void * H5O_sdspace_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5S_extent_t *sdim = NULL;/* New extent dimensionality structure */ void *ret_value; diff --git a/src/H5Oshared.c b/src/H5Oshared.c index e406065..aba4ddd 100644 --- a/src/H5Oshared.c +++ b/src/H5Oshared.c @@ -107,8 +107,8 @@ *------------------------------------------------------------------------- */ static void * -H5O_shared_read(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared, - const H5O_msg_class_t *type) +H5O_shared_read(H5F_t *f, hid_t dxpl_id, unsigned *ioflags, + const H5O_shared_t *shared, const H5O_msg_class_t *type) { H5HF_t *fheap = NULL; H5WB_t *wb = NULL; /* Wrapped buffer for attribute data */ @@ -159,7 +159,7 @@ H5O_shared_read(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared, HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "can't read message from fractal heap.") /* Decode the message */ - if(NULL == (ret_value = (type->decode)(f, dxpl_id, 0, mesg_ptr))) + if(NULL == (ret_value = (type->decode)(f, dxpl_id, 0, ioflags, mesg_ptr))) HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "can't decode shared message.") } /* end if */ else { @@ -277,7 +277,8 @@ done: *------------------------------------------------------------------------- */ void * -H5O_shared_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *buf, const H5O_msg_class_t *type) +H5O_shared_decode(H5F_t *f, hid_t dxpl_id, unsigned *ioflags, + const uint8_t *buf, const H5O_msg_class_t *type) { H5O_shared_t sh_mesg; /* Shared message info */ unsigned version; /* Shared message version */ @@ -343,7 +344,7 @@ H5O_shared_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *buf, const H5O_msg_cla sh_mesg.msg_type_id = type->id; /* Retrieve actual message, through decoded shared message info */ - if(NULL == (ret_value = H5O_shared_read(f, dxpl_id, &sh_mesg, type))) + if(NULL == (ret_value = H5O_shared_read(f, dxpl_id, ioflags, &sh_mesg, type))) HGOTO_ERROR(H5E_OHDR, H5E_READERROR, NULL, "unable to retrieve native message") done: diff --git a/src/H5Oshared.h b/src/H5Oshared.h index 582d29b..2e23e60 100644 --- a/src/H5Oshared.h +++ b/src/H5Oshared.h @@ -48,7 +48,8 @@ *------------------------------------------------------------------------- */ static H5_inline void * -H5O_SHARED_DECODE(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p) +H5O_SHARED_DECODE(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p) { void *ret_value; /* Return value */ @@ -67,12 +68,20 @@ H5O_SHARED_DECODE(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p /* Check for shared message */ if(mesg_flags & H5O_MSG_FLAG_SHARED) { /* Retrieve native message info indirectly through shared message */ - if(NULL == (ret_value = H5O_shared_decode(f, dxpl_id, p, H5O_SHARED_TYPE))) + if(NULL == (ret_value = H5O_shared_decode(f, dxpl_id, ioflags, p, H5O_SHARED_TYPE))) HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "unable to decode shared message") + + /* We currently do not support automatically fixing shared messages */ +#ifdef H5_STRICT_FORMAT_CHECKS + if(*ioflags & H5O_DECODEIO_DIRTY) + HGOTO_ERROR(H5E_OHDR, H5E_UNSUPPORTED, NULL, "unable to mark shared message dirty") +#else /* H5_STRICT_FORMAT_CHECKS */ + *ioflags &= ~H5O_DECODEIO_DIRTY; +#endif /* H5_STRICT_FORMAT_CHECKS */ } /* end if */ else { /* Decode native message directly */ - if(NULL == (ret_value = H5O_SHARED_DECODE_REAL(f, dxpl_id, mesg_flags, p))) + if(NULL == (ret_value = H5O_SHARED_DECODE_REAL(f, dxpl_id, mesg_flags, ioflags, p))) HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "unable to decode native message") } /* end else */ diff --git a/src/H5Oshmesg.c b/src/H5Oshmesg.c index e66bdec..ed32fda 100644 --- a/src/H5Oshmesg.c +++ b/src/H5Oshmesg.c @@ -28,7 +28,8 @@ #include "H5Opkg.h" /* Object headers */ #include "H5MMprivate.h" /* Memory management */ -static void *H5O_shmesg_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_shmesg_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_shmesg_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_shmesg_copy(const void *_mesg, void *_dest); static size_t H5O_shmesg_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -76,7 +77,7 @@ const H5O_msg_class_t H5O_MSG_SHMESG[1] = {{ */ static void * H5O_shmesg_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_shmesg_table_t *mesg; /* Native message */ void *ret_value; /* Return value */ diff --git a/src/H5Ostab.c b/src/H5Ostab.c index 231f2ce..521a358 100644 --- a/src/H5Ostab.c +++ b/src/H5Ostab.c @@ -36,7 +36,8 @@ /* PRIVATE PROTOTYPES */ -static void *H5O_stab_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, const uint8_t *p); +static void *H5O_stab_decode(H5F_t *f, hid_t dxpl_id, unsigned mesg_flags, + unsigned *ioflags, const uint8_t *p); static herr_t H5O_stab_encode(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg); static void *H5O_stab_copy(const void *_mesg, void *_dest); static size_t H5O_stab_size(const H5F_t *f, hbool_t disable_shared, const void *_mesg); @@ -96,7 +97,7 @@ H5FL_DEFINE_STATIC(H5O_stab_t); */ static void * H5O_stab_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags, - const uint8_t *p) + unsigned UNUSED *ioflags, const uint8_t *p) { H5O_stab_t *stab=NULL; void *ret_value; /* Return value */ diff --git a/src/H5T.c b/src/H5T.c index 2da5be4..6dc3c68 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -5150,6 +5150,11 @@ H5T_upgrade_version_cb(H5T_t *dt, void *op_value) dt->shared->version = *(unsigned *)op_value; break; + case H5T_VLEN: + if(dt->shared->parent->shared->version > dt->shared->version) + dt->shared->version = dt->shared->parent->shared->version; + break; + default: break; } /* end switch */ diff --git a/tools/h5repack/testfiles/h5repack_attr.h5 b/tools/h5repack/testfiles/h5repack_attr.h5 index 70ad02d..fe066db 100644 Binary files a/tools/h5repack/testfiles/h5repack_attr.h5 and b/tools/h5repack/testfiles/h5repack_attr.h5 differ diff --git a/tools/h5repack/testfiles/h5repack_objs.h5 b/tools/h5repack/testfiles/h5repack_objs.h5 index 199adc5..0a0c041 100644 Binary files a/tools/h5repack/testfiles/h5repack_objs.h5 and b/tools/h5repack/testfiles/h5repack_objs.h5 differ diff --git a/tools/lib/h5trav.c b/tools/lib/h5trav.c index 0ed6a30..bb8014d 100644 --- a/tools/lib/h5trav.c +++ b/tools/lib/h5trav.c @@ -159,8 +159,11 @@ traverse_cb(hid_t loc_id, const char *path, const H5L_info_t *linfo, H5O_info_t oinfo; /* Get information about the object */ - if(H5Oget_info_by_name(loc_id, path, &oinfo, H5P_DEFAULT) < 0) + if(H5Oget_info_by_name(loc_id, path, &oinfo, H5P_DEFAULT) < 0) { + if(new_name) + HDfree(new_name); return(H5_ITER_ERROR); + } /* If the object has multiple links, add it to the list of addresses * already visited, if it isn't there already @@ -171,12 +174,20 @@ traverse_cb(hid_t loc_id, const char *path, const H5L_info_t *linfo, /* Make 'visit object' callback */ if(udata->visitor->visit_obj) - (*udata->visitor->visit_obj)(full_name, &oinfo, already_visited, udata->visitor->udata); + if((*udata->visitor->visit_obj)(full_name, &oinfo, already_visited, udata->visitor->udata) < 0) { + if(new_name) + HDfree(new_name); + return(H5_ITER_ERROR); + } } /* end if */ else { /* Make 'visit link' callback */ if(udata->visitor->visit_lnk) - (*udata->visitor->visit_lnk)(full_name, linfo, udata->visitor->udata); + if((*udata->visitor->visit_lnk)(full_name, linfo, udata->visitor->udata) < 0) { + if(new_name) + HDfree(new_name); + return(H5_ITER_ERROR); + } } /* end else */ if(new_name) diff --git a/tools/testfiles/tarray1.h5 b/tools/testfiles/tarray1.h5 index d62d752..90371f2 100644 Binary files a/tools/testfiles/tarray1.h5 and b/tools/testfiles/tarray1.h5 differ diff --git a/tools/testfiles/tarray2.h5 b/tools/testfiles/tarray2.h5 index 5582c5a..e2e53e8 100644 Binary files a/tools/testfiles/tarray2.h5 and b/tools/testfiles/tarray2.h5 differ diff --git a/tools/testfiles/tarray3.h5 b/tools/testfiles/tarray3.h5 index 0c75d79..580d846 100644 Binary files a/tools/testfiles/tarray3.h5 and b/tools/testfiles/tarray3.h5 differ diff --git a/tools/testfiles/tarray4.h5 b/tools/testfiles/tarray4.h5 index c2811d2..b34efb8 100644 Binary files a/tools/testfiles/tarray4.h5 and b/tools/testfiles/tarray4.h5 differ diff --git a/tools/testfiles/tarray5.h5 b/tools/testfiles/tarray5.h5 index 8cb45b8..55ebf46 100644 Binary files a/tools/testfiles/tarray5.h5 and b/tools/testfiles/tarray5.h5 differ diff --git a/tools/testfiles/tarray6.h5 b/tools/testfiles/tarray6.h5 index 5cf95cf..b4af19b 100644 Binary files a/tools/testfiles/tarray6.h5 and b/tools/testfiles/tarray6.h5 differ diff --git a/tools/testfiles/tarray7.h5 b/tools/testfiles/tarray7.h5 index 0b49f04..74089ea 100644 Binary files a/tools/testfiles/tarray7.h5 and b/tools/testfiles/tarray7.h5 differ diff --git a/tools/testfiles/tattr.h5 b/tools/testfiles/tattr.h5 index 578a20a..fd14b58 100644 Binary files a/tools/testfiles/tattr.h5 and b/tools/testfiles/tattr.h5 differ diff --git a/tools/testfiles/tattr2.h5 b/tools/testfiles/tattr2.h5 index c7e3359..c40f3f7 100644 Binary files a/tools/testfiles/tattr2.h5 and b/tools/testfiles/tattr2.h5 differ diff --git a/tools/testfiles/tbitfields.h5 b/tools/testfiles/tbitfields.h5 index c14b1f0..11087f0 100644 Binary files a/tools/testfiles/tbitfields.h5 and b/tools/testfiles/tbitfields.h5 differ diff --git a/tools/testfiles/tchar.h5 b/tools/testfiles/tchar.h5 index 03bd6d5..4d23ea9 100644 Binary files a/tools/testfiles/tchar.h5 and b/tools/testfiles/tchar.h5 differ diff --git a/tools/testfiles/tcompound.h5 b/tools/testfiles/tcompound.h5 index 37ddd27..d1ec650 100644 Binary files a/tools/testfiles/tcompound.h5 and b/tools/testfiles/tcompound.h5 differ diff --git a/tools/testfiles/tcompound2.h5 b/tools/testfiles/tcompound2.h5 index 20577a6..98e80bd 100644 Binary files a/tools/testfiles/tcompound2.h5 and b/tools/testfiles/tcompound2.h5 differ diff --git a/tools/testfiles/tcompound_complex.h5 b/tools/testfiles/tcompound_complex.h5 index 5eed316..5c6274f 100644 Binary files a/tools/testfiles/tcompound_complex.h5 and b/tools/testfiles/tcompound_complex.h5 differ diff --git a/tools/testfiles/tdatareg.h5 b/tools/testfiles/tdatareg.h5 index 1f911b1..62a889f 100644 Binary files a/tools/t