MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / update_header

Method update_header

block/src/vhdx/vhdx_header.rs:160–200  ·  view source on GitHub ↗

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,
    )

Source from the content-addressed store, hash-verified

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)]

Callers

nothing calls this directly

Calls 4

calculate_checksumFunction · 0.85
write_to_bufferMethod · 0.80
seekMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected