mirror of
https://github.com/Prominence/rshred.git
synced 2026-01-09 18:26:41 +03:00
Improved memory usage during shredding.
This commit is contained in:
parent
f7ba2f05b4
commit
b2f0031455
16
src/lib.rs
16
src/lib.rs
@ -7,6 +7,8 @@ use std::process::exit;
|
||||
|
||||
use walkdir::WalkDir;
|
||||
|
||||
const BATCH_SIZE: usize = 8192;
|
||||
|
||||
pub struct Shredder {
|
||||
options: ShredOptions,
|
||||
}
|
||||
@ -74,11 +76,23 @@ impl Shredder {
|
||||
let mut buffer = BufWriter::new(&file);
|
||||
|
||||
for _ in 0..options.rewrite_iterations {
|
||||
let random_bytes: Vec<u8> = (0..file_length).map(|_| {
|
||||
let mut bytes_processed = 0;
|
||||
|
||||
while bytes_processed < file_length {
|
||||
let bytes_to_write = if file_length - bytes_processed > BATCH_SIZE as u64 {
|
||||
BATCH_SIZE
|
||||
} else {
|
||||
(file_length - bytes_processed) as usize
|
||||
};
|
||||
|
||||
let random_bytes: Vec<u8> = (0..bytes_to_write).map(|_| {
|
||||
rand::random::<u8>()
|
||||
}).collect();
|
||||
buffer.write(&random_bytes).unwrap();
|
||||
|
||||
bytes_processed = bytes_processed + bytes_to_write as u64;
|
||||
}
|
||||
|
||||
buffer.flush().unwrap();
|
||||
file.sync_all().unwrap();
|
||||
buffer.seek(SeekFrom::Start(0)).unwrap();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user