Creates and returns new updated header from the provided current header
(
f: &mut File,
current_header: &Header,
change_data_guid: bool,
mut file_write_guid: u128,
start: u64,
)
| 158 | |
| 159 | /// Creates and returns new updated header from the provided current header |
| 160 | fn update_header( |
| 161 | f: &mut File, |
| 162 | current_header: &Header, |
| 163 | change_data_guid: bool, |
| 164 | mut file_write_guid: u128, |
| 165 | start: u64, |
| 166 | ) -> Result<Header> { |
| 167 | let mut buffer = [0u8; HEADER_SIZE as usize]; |
| 168 | let mut data_write_guid = current_header.data_write_guid; |
| 169 | |
| 170 | if change_data_guid { |
| 171 | data_write_guid = Uuid::new_v4().as_u128(); |
| 172 | } |
| 173 | |
| 174 | if file_write_guid == 0 { |
| 175 | file_write_guid = current_header.file_write_guid; |
| 176 | } |
| 177 | |
| 178 | let mut new_header = Header { |
| 179 | signature: current_header.signature, |
| 180 | checksum: 0, |
| 181 | sequence_number: current_header.sequence_number + 1, |
| 182 | file_write_guid, |
| 183 | data_write_guid, |
| 184 | log_guid: current_header.log_guid, |
| 185 | log_version: current_header.log_version, |
| 186 | version: current_header.version, |
| 187 | log_length: current_header.log_length, |
| 188 | log_offset: current_header.log_offset, |
| 189 | }; |
| 190 | |
| 191 | new_header.write_to_buffer(&mut buffer); |
| 192 | new_header.checksum = calculate_checksum(&mut buffer, size_of::<u32>()); |
| 193 | new_header.write_to_buffer(&mut buffer); |
| 194 | |
| 195 | f.seek(SeekFrom::Start(start)) |
| 196 | .map_err(VhdxHeaderError::SeekHeader)?; |
| 197 | f.write(&buffer).map_err(VhdxHeaderError::WriteHeader)?; |
| 198 | |
| 199 | Ok(new_header) |
| 200 | } |
| 201 | } |
| 202 | |
| 203 | #[repr(C, packed)] |
nothing calls this directly
no test coverage detected