in src/hashheader.c [36:72]
static sparkey_returncode hashheader_version0(sparkey_hashheader *header, FILE *fp) {
RETHROW(fread_little_endian32(fp, &header->file_identifier));
RETHROW(fread_little_endian32(fp, &header->hash_seed));
RETHROW(fread_little_endian64(fp, &header->data_end));
RETHROW(fread_little_endian64(fp, &header->max_key_len));
RETHROW(fread_little_endian64(fp, &header->max_value_len));
RETHROW(fread_little_endian64(fp, &header->num_puts));
RETHROW(fread_little_endian64(fp, &header->garbage_size));
RETHROW(fread_little_endian64(fp, &header->num_entries));
RETHROW(fread_little_endian32(fp, &header->address_size));
RETHROW(fread_little_endian32(fp, &header->hash_size));
RETHROW(fread_little_endian64(fp, &header->hash_capacity));
RETHROW(fread_little_endian64(fp, &header->max_displacement));
RETHROW(fread_little_endian32(fp, &header->entry_block_bits));
header->entry_block_bitmask = (1 << header->entry_block_bits) - 1;
RETHROW(fread_little_endian64(fp, &header->hash_collisions));
RETHROW(fread_little_endian64(fp, &header->total_displacement));
header->header_size = HASH_HEADER_SIZE;
header->hash_algorithm = sparkey_get_hash_algorithm(header->hash_size);
if (header->hash_algorithm.hash == NULL) {
return SPARKEY_HASH_HEADER_CORRUPT;
}
// Some basic consistency checks
if (header->num_entries > header->num_puts) {
return SPARKEY_HASH_HEADER_CORRUPT;
}
if (header->max_displacement > header->num_entries) {
return SPARKEY_HASH_HEADER_CORRUPT;
}
if (header->hash_collisions > header->num_entries) {
return SPARKEY_HASH_HEADER_CORRUPT;
}
return SPARKEY_SUCCESS;
}