diff options
Diffstat (limited to 'src/H5FDfamily.c')
-rw-r--r-- | src/H5FDfamily.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/H5FDfamily.c b/src/H5FDfamily.c index 28824e3..d4397e9 100644 --- a/src/H5FDfamily.c +++ b/src/H5FDfamily.c @@ -672,17 +672,30 @@ H5FD_family_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf) /* Read member file size. Skip name template for now although it's saved. */ UINT64DECODE(p, msize); - + + /* For h5repart only. Member size 1 is used to signal h5repart is being used to + * change member file size. Encode the new size. */ + if(file->pmem_size == 1) { + msize = file->memb_size; + UINT64ENCODE(p, msize); + HGOTO_DONE(ret_value) + } + /* Default - use the saved member size */ - if(file->pmem_size == H5F_FAMILY_DEFAULT) - file->memb_size = msize; + if(file->pmem_size == H5F_FAMILY_DEFAULT) { + file->pmem_size = msize; + } - /* Check if member size is correct */ - if(file->memb_size != msize) { + /* Check if member size from file access property is correct */ + if(file->pmem_size != msize) { sprintf(err_msg, "family member size should be %lu", msize); HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, err_msg) } + /* Update member file size to the size saved in the superblock. + * That's the size intended to be. */ + file->memb_size = msize; + done: FUNC_LEAVE_NOAPI(ret_value) } @@ -711,6 +724,14 @@ done: * If there are at least 2 member files, member size can only be equal * the 1st member size. * + * Raymond Lu + * Tuesday, May 24, 2005 + * The modification described above has been changed. The major checking + * is done in H5F_read_superblock. Member file size is saved in the + * superblock now. H5F_read_superblock() reads this saved size and compare + * to the size passed in from file access property. Wrong size will + * result in a failure. + * *------------------------------------------------------------------------- */ static H5FD_t * |