Create checksum function and remove duplicate code.

This commit is contained in:
Pedro de Oliveira 2023-04-22 20:29:42 +01:00
parent ad50081574
commit a0ace81f92
1 changed files with 6 additions and 6 deletions

View File

@ -1,5 +1,3 @@
#![allow(clippy::new_without_default)]
use std::fs::File;
use std::io::{Read, Seek, Write};
@ -18,6 +16,10 @@ impl VocFile {
const SIGNATURE1: &'static str = "Creative Voice File";
const SIGNATURE2: [u8; 3] = [0x1A, 0x1A, 0x0];
fn checksum(version: i16) -> [u8; 2] {
(!version + 0x1234).to_le_bytes()
}
pub fn from_file(file_name: &str) -> Self {
let mut file = File::open(file_name).unwrap();
@ -45,8 +47,7 @@ impl VocFile {
// Version checksum
let mut checksum_buffer: [u8; 2] = [0; 2];
drop(file.read(&mut checksum_buffer));
let checksum = (!version_int + 0x1234).to_le_bytes();
let checksum_result = checksum_buffer == checksum;
let checksum_result = checksum_buffer == Self::checksum(version_int);
let mut voc_file = VocFile { version, checksum: checksum_result, blocks: Vec::new() };
@ -136,8 +137,7 @@ impl VocFile {
// Version Checksum
let version_int = i16::from_le_bytes([self.version.1, self.version.0]);
let checksum = (!version_int + 0x1234).to_le_bytes();
result.extend_from_slice(&checksum);
result.extend_from_slice(&Self::checksum(version_int));
// Iterate Blocks
for block in &self.blocks {