if (saved_geometry->record_pages_per_chapter != geometry->record_pages_per_chapter) {
vdo_log_error("Record pages per chapter (%u) does not match (%u)",
saved_geometry->record_pages_per_chapter,
geometry->record_pages_per_chapter);
result = false;
}
if (saved_geometry->chapters_per_volume != geometry->chapters_per_volume) {
vdo_log_error("Chapter count (%u) does not match (%u)",
saved_geometry->chapters_per_volume,
geometry->chapters_per_volume);
result = false;
}
if (saved_geometry->sparse_chapters_per_volume != geometry->sparse_chapters_per_volume) {
vdo_log_error("Sparse chapter count (%u) does not match (%u)",
saved_geometry->sparse_chapters_per_volume,
geometry->sparse_chapters_per_volume);
result = false;
}
if (saved_config->cache_chapters != user->cache_chapters) {
vdo_log_error("Cache size (%u) does not match (%u)",
saved_config->cache_chapters, user->cache_chapters);
result = false;
}
if (saved_config->volume_index_mean_delta != user->volume_index_mean_delta) {
vdo_log_error("Volume index mean delta (%u) does not match (%u)",
saved_config->volume_index_mean_delta,
user->volume_index_mean_delta);
result = false;
}
if (saved_geometry->bytes_per_page != geometry->bytes_per_page) {
vdo_log_error("Bytes per page value (%zu) does not match (%zu)",
saved_geometry->bytes_per_page, geometry->bytes_per_page);
result = false;
}
if (saved_config->sparse_sample_rate != user->sparse_sample_rate) {
vdo_log_error("Sparse sample rate (%u) does not match (%u)",
saved_config->sparse_sample_rate,
user->sparse_sample_rate);
result = false;
}
if (saved_config->nonce != user->nonce) {
vdo_log_error("Nonce (%llu) does not match (%llu)",
(unsignedlonglong) saved_config->nonce,
(unsignedlonglong) user->nonce);
result = false;
}
return result;
}
/* Read the configuration and validate it against the provided one. */ int uds_validate_config_contents(struct buffered_reader *reader, struct uds_configuration *user_config)
{ int result; struct uds_configuration config; struct index_geometry geometry;
u8 version_buffer[INDEX_CONFIG_VERSION_LENGTH];
u32 bytes_per_page;
u8 buffer[sizeof(struct uds_configuration_6_02)];
size_t offset = 0;
result = uds_verify_buffered_data(reader, INDEX_CONFIG_MAGIC,
INDEX_CONFIG_MAGIC_LENGTH); if (result != UDS_SUCCESS) return result;
result = uds_read_from_buffered_reader(reader, version_buffer,
INDEX_CONFIG_VERSION_LENGTH); if (result != UDS_SUCCESS) return vdo_log_error_strerror(result, "cannot read index config version");
if (!are_matching_configurations(&config, &geometry, user_config)) {
vdo_log_warning("Supplied configuration does not match save"); return UDS_NO_INDEX;
}
return UDS_SUCCESS;
}
/* * Write the configuration to stable storage. If the superblock version is < 4, write the 6.02 * version; otherwise write the 8.02 version, indicating the configuration is for an index that has * been reduced by one chapter.
*/ int uds_write_config_contents(struct buffered_writer *writer, struct uds_configuration *config, u32 version)
{ int result; struct index_geometry *geometry = config->geometry;
u8 buffer[sizeof(struct uds_configuration_8_02)];
size_t offset = 0;
result = uds_write_to_buffered_writer(writer, INDEX_CONFIG_MAGIC,
INDEX_CONFIG_MAGIC_LENGTH); if (result != UDS_SUCCESS) return result;
/* * If version is < 4, the index has not been reduced by a chapter so it must be written out * as version 6.02 so that it is still compatible with older versions of UDS.
*/ if (version >= 4) {
result = uds_write_to_buffered_writer(writer, INDEX_CONFIG_VERSION_8_02,
INDEX_CONFIG_VERSION_LENGTH); if (result != UDS_SUCCESS) return result;
} else {
result = uds_write_to_buffered_writer(writer, INDEX_CONFIG_VERSION_6_02,
INDEX_CONFIG_VERSION_LENGTH); if (result != UDS_SUCCESS) return result;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.