[svn-r12612] Description:

Provide more abstract internal routine for computing checksums on metadata
in a file.  This will allow a unified policy on which algorithm to choose and
under what criteria (length probably) to be more easily maintained.

Tested On:
    Linux/32 2.6 (chicago)
    Linux/64 2.6 (chicago2)
This commit is contained in:
Quincey Koziol 2006-08-22 12:50:25 -05:00
parent c2c6e2d0d5
commit 5c5f9e8e28
3 changed files with 42 additions and 6 deletions

View File

@ -396,7 +396,7 @@ HDfprintf(stderr, "%s: Load heap header, addr = %a\n", FUNC, addr);
/* Compute checksum on entire header */
/* (including the filter information, if present) */
computed_chksum = H5_fletcher32(buf, (hdr->heap_size - H5HF_SIZEOF_CHKSUM));
computed_chksum = H5_checksum_metadata(buf, (hdr->heap_size - H5HF_SIZEOF_CHKSUM));
/* Verify checksum */
if(stored_chksum != computed_chksum)
@ -525,7 +525,7 @@ HDfprintf(stderr, "%s: Flushing heap header, addr = %a, destroy = %u\n", FUNC, a
} /* end if */
/* Compute metadata checksum */
metadata_chksum = H5_fletcher32(buf, hdr->heap_size - H5HF_SIZEOF_CHKSUM);
metadata_chksum = H5_checksum_metadata(buf, hdr->heap_size - H5HF_SIZEOF_CHKSUM);
/* Metadata checksum */
UINT32ENCODE(p, metadata_chksum);
@ -826,7 +826,7 @@ HDfprintf(stderr, "%s: iblock->ents[%Zu] = {%a}\n", FUNC, u, iblock->ents[u].add
HDassert((size_t)(p - buf) == iblock->size);
/* Compute checksum on indirect block */
computed_chksum = H5_fletcher32(buf, (iblock->size - H5HF_SIZEOF_CHKSUM));
computed_chksum = H5_checksum_metadata(buf, (iblock->size - H5HF_SIZEOF_CHKSUM));
/* Verify checksum */
if(stored_chksum != computed_chksum)
@ -973,7 +973,7 @@ HDfprintf(stderr, "%s: iblock->filt_ents[%Zu] = {%Zu, %x}\n", FUNC, u, iblock->f
} /* end for */
/* Compute checksum */
metadata_chksum = H5_fletcher32(buf, iblock->size - H5HF_SIZEOF_CHKSUM);
metadata_chksum = H5_checksum_metadata(buf, iblock->size - H5HF_SIZEOF_CHKSUM);
/* Metadata checksum */
UINT32ENCODE(p, metadata_chksum);
@ -1235,7 +1235,7 @@ HGOTO_ERROR(H5E_HEAP, H5E_UNSUPPORTED, NULL, "I/O filters not supported yet")
HDmemset((uint8_t *)p - H5HF_SIZEOF_CHKSUM, 0, (size_t)H5HF_SIZEOF_CHKSUM);
/* Compute checksum on entire direct block */
computed_chksum = H5_fletcher32(dblock->blk, dblock->size);
computed_chksum = H5_checksum_metadata(dblock->blk, dblock->size);
/* Verify checksum */
if(stored_chksum != computed_chksum)
@ -1314,7 +1314,7 @@ H5HF_cache_dblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
HDmemset(p, 0, (size_t)H5HF_SIZEOF_CHKSUM);
/* Compute checksum on entire direct block */
metadata_chksum = H5_fletcher32(dblock->blk, dblock->size);
metadata_chksum = H5_checksum_metadata(dblock->blk, dblock->size);
/* Metadata checksum */
UINT32ENCODE(p, metadata_chksum);

View File

@ -136,3 +136,38 @@ H5_fletcher32(const void *_data, size_t _len)
FUNC_LEAVE_NOAPI((sum2 << 16) | sum1)
} /* end H5_fletcher32() */
/*-------------------------------------------------------------------------
* Function: H5_checksum_metadata
*
* Purpose: Provide a more abstract routine for checksumming metadata
* in a file, where the policy of which algorithm to choose
* is centralized.
*
* Return: checksum of input buffer (can't fail)
*
* Programmer: Quincey Koziol
* Tuesday, August 22, 2006
*
*-------------------------------------------------------------------------
*/
uint32_t
H5_checksum_metadata(const void *data, size_t len)
{
uint32_t chksum; /* Checksum value to return */
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5_checksum_metadata)
/* Sanity check */
HDassert(data);
HDassert(len > 0);
/* Choose the appropriate checksum routine */
/* (use fletcher32 for everything right now, but will probably go
* with a CRC algorithm for "shorter" pieces of metadata eventually)
*/
chksum = H5_fletcher32(data, len);
FUNC_LEAVE_NOAPI(chksum)
} /* end H5_checksum_metadata() */

View File

@ -1448,6 +1448,7 @@ H5_DLL int H5Z_term_interface(void);
/* Checksum functions */
H5_DLL uint32_t H5_fletcher32(const void *data, size_t len);
H5_DLL uint32_t H5_checksum_metadata(const void *data, size_t len);
/* Functions for debugging */
H5_DLL herr_t H5_buffer_dump(FILE *stream, int indent, uint8_t *buf,