[svn-r13419] Description:

Fix error introduced into driver info block size computation, which caused
the test/big test to fail.

Tested on:
    Linux/32 2.6 (chicago)
    Linux/64 2.6 (chicago2)
This commit is contained in:
Quincey Koziol 2007-02-27 12:48:57 -05:00
parent b94776f418
commit 6b12e9769f
3 changed files with 23 additions and 28 deletions

View File

@ -613,27 +613,21 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
H5FD_family_sb_encode(H5FD_t *_file, char *name/*out*/,
unsigned char *buf/*out*/)
H5FD_family_sb_encode(H5FD_t *_file, char *name/*out*/, unsigned char *buf/*out*/)
{
H5FD_family_t *file = (H5FD_family_t*)_file;
unsigned char *p = buf;
uint64_t msize;
herr_t ret_value=SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5FD_family_sb_encode, FAIL)
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_family_sb_encode)
/* Name and version number */
strncpy(name, "NCSAfami", (size_t)8);
HDstrncpy(name, "NCSAfami", (size_t)8);
name[8] = '\0';
/* copy member file size */
msize = (uint64_t)file->memb_size;
UINT64ENCODE(p, msize);
/* Store member file size */
UINT64ENCODE(buf, (uint64_t)file->memb_size);
done:
FUNC_LEAVE_NOAPI(ret_value)
}
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5FD_family_sb_encode() */
/*-------------------------------------------------------------------------
@ -660,9 +654,8 @@ static herr_t
H5FD_family_sb_decode(H5FD_t *_file, const char UNUSED *name, const unsigned char *buf)
{
H5FD_family_t *file = (H5FD_family_t*)_file;
uint64_t msize = 0;
char err_msg[128];
herr_t ret_value=SUCCEED; /* Return value */
uint64_t msize;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5FD_family_sb_decode, FAIL)
@ -676,18 +669,19 @@ H5FD_family_sb_decode(H5FD_t *_file, const char UNUSED *name, const unsigned cha
if(file->mem_newsize) {
file->memb_size = file->mem_newsize;
HGOTO_DONE(ret_value)
}
} /* end if */
/* Default - use the saved member size */
if(file->pmem_size == H5F_FAMILY_DEFAULT) {
if(file->pmem_size == H5F_FAMILY_DEFAULT)
file->pmem_size = msize;
}
/* Check if member size from file access property is correct */
if(msize != file->pmem_size) {
sprintf(err_msg, "family member size should be %lu", (unsigned long)msize);
char err_msg[128];
sprintf(err_msg, "family member size should be %lu, is %lu", (unsigned long)msize, (unsigned long)file->pmem_size);
HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, err_msg)
}
} /* end if */
/* Update member file size to the size saved in the superblock.
* That's the size intended to be. */
@ -695,7 +689,7 @@ H5FD_family_sb_decode(H5FD_t *_file, const char UNUSED *name, const unsigned cha
done:
FUNC_LEAVE_NOAPI(ret_value)
}
} /* end H5FD_family_sb_decode() */
/*-------------------------------------------------------------------------

View File

@ -397,7 +397,6 @@ H5F_read_superblock(H5F_t *f, hid_t dxpl_id, H5G_loc_t *root_loc)
shared->base_addr = shared->super_addr;
} /* end if */
/* This step is for h5repart tool only. If user wants to change file driver
* from family to sec2 while using h5repart, set the driver address to
* undefined to let the library ignore the family driver information saved
@ -752,9 +751,6 @@ H5F_write_superblock(H5F_t *f, hid_t dxpl_id)
char driver_name[9]; /* Name of driver, for driver info block */
uint8_t *dbuf = p; /* Pointer to beginning of driver info */
/* Add in the size of the header */
driver_size += H5F_DRVINFOBLOCK_HDR_SIZE;
/* Encode the driver information block */
*p++ = HDF5_DRIVERINFO_VERSION_0; /* Version */
*p++ = 0; /* reserved */
@ -762,7 +758,7 @@ H5F_write_superblock(H5F_t *f, hid_t dxpl_id)
*p++ = 0; /* reserved */
/* Driver info size, excluding header */
UINT32ENCODE(p, driver_size - H5F_DRVINFOBLOCK_HDR_SIZE);
UINT32ENCODE(p, driver_size);
/* Encode driver-specific data */
if(H5FD_sb_encode(f->shared->lf, driver_name, dbuf + H5F_DRVINFOBLOCK_HDR_SIZE) < 0)
@ -771,10 +767,14 @@ H5F_write_superblock(H5F_t *f, hid_t dxpl_id)
/* Store driver name (set in 'H5FD_sb_encode' call above) */
HDmemcpy(dbuf + 8, driver_name, (size_t)8);
/* Advance buffer pointer past name & variable-sized portion of driver info */
/* (for later use in storing the checksum) */
p += 8 + driver_size;
/* Update superblock checksum with driver info block checksum */
/* (on superblock versions > 1) */
if(super_vers >= HDF5_SUPERBLOCK_VERSION_2)
chksum = H5_checksum_metadata(dbuf, driver_size, chksum);
chksum = H5_checksum_metadata(dbuf, driver_size + H5F_DRVINFOBLOCK_HDR_SIZE, chksum);
} /* end if */
/* Encode the checksum on the superblock (for versions > 1) */

View File

@ -1299,6 +1299,7 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
\
BEGIN_MPE_LOG(func_name)
/* Note: this macro only works when there's _no_ interface initialization routine for the module */
#define FUNC_ENTER_NOAPI_INIT(func_name,err) \
/* Initialize the interface, if appropriate */ \
H5_INTERFACE_INIT(err) \