in src/logheader.c [38:66]
static sparkey_returncode logheader_version0(sparkey_logheader *header, FILE *fp) {
RETHROW(fread_little_endian32(fp, &header->file_identifier));
RETHROW(fread_little_endian64(fp, &header->num_puts));
RETHROW(fread_little_endian64(fp, &header->num_deletes));
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->delete_size));
RETHROW(fread_little_endian32(fp, &header->compression_type));
RETHROW(fread_little_endian32(fp, &header->compression_block_size));
RETHROW(fread_little_endian64(fp, &header->put_size));
RETHROW(fread_little_endian32(fp, &header->max_entries_per_block));
header->header_size = LOG_HEADER_SIZE;
// Some basic consistency checks
if (header->data_end < header->header_size) {
return SPARKEY_LOG_HEADER_CORRUPT;
}
if (header->num_puts > header->data_end) {
return SPARKEY_LOG_HEADER_CORRUPT;
}
if (header->num_deletes > header->data_end) {
return SPARKEY_LOG_HEADER_CORRUPT;
}
if (header->compression_type > SPARKEY_COMPRESSION_ZSTD) {
return SPARKEY_LOG_HEADER_CORRUPT;
}
return SPARKEY_SUCCESS;
}