diff options
Diffstat (limited to 'src/H5Odtype.c')
-rw-r--r-- | src/H5Odtype.c | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/src/H5Odtype.c b/src/H5Odtype.c index ba343bc..ac07edf 100644 --- a/src/H5Odtype.c +++ b/src/H5Odtype.c @@ -232,11 +232,10 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt) case H5T_COMPOUND: { unsigned offset_nbytes; /* Size needed to encode member offsets */ - size_t max_memb_pos = 0; /* Maximum member covered, so far */ unsigned j; /* Compute the # of bytes required to store a member offset */ - offset_nbytes = H5V_limit_enc_size((uint64_t)dt->shared->size); + offset_nbytes = (H5V_log2_gen((uint64_t)dt->shared->size) + 7) / 8; /* * Compound datatypes... @@ -337,18 +336,6 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt) /* Set the field datatype (finally :-) */ dt->shared->u.compnd.memb[i].type = temp_type; - /* Check if this field overlaps with a prior field */ - /* (probably indicates that the file is corrupt) */ - if(i > 0 && dt->shared->u.compnd.memb[i].offset < max_memb_pos) { - for(j = 0; j < i; j++) - if(dt->shared->u.compnd.memb[i].offset >= dt->shared->u.compnd.memb[j].offset - && dt->shared->u.compnd.memb[i].offset < (dt->shared->u.compnd.memb[j].offset + dt->shared->u.compnd.memb[j].size)) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "member overlaps with previous member") - } /* end if */ - - /* Update the maximum member position covered */ - max_memb_pos = MAX(max_memb_pos, (dt->shared->u.compnd.memb[i].offset + dt->shared->u.compnd.memb[i].size)); - /* Check if the datatype stayed packed */ if(dt->shared->u.compnd.packed) { /* Check if the member type is packed */ @@ -747,7 +734,7 @@ H5O_dtype_encode_helper(const H5F_t *f, uint8_t **pp, const H5T_t *dt) unsigned offset_nbytes; /* Size needed to encode member offsets */ /* Compute the # of bytes required to store a member offset */ - offset_nbytes = H5V_limit_enc_size((uint64_t)dt->shared->size); + offset_nbytes = (H5V_log2_gen((uint64_t)dt->shared->size) + 7) / 8; /* * Compound datatypes... @@ -1110,7 +1097,7 @@ H5O_dtype_size(const H5F_t *f, const void *_mesg) unsigned offset_nbytes; /* Size needed to encode member offsets */ /* Compute the # of bytes required to store a member offset */ - offset_nbytes = H5V_limit_enc_size((uint64_t)dt->shared->size); + offset_nbytes = (H5V_log2_gen((uint64_t)dt->shared->size) + 7) / 8; /* Compute the total size needed to encode compound datatype */ for(u = 0; u < dt->shared->u.compnd.nmembs; u++) { |