fast_ntfs 1.0.2

Forked a low-level NTFS filesystem library
Documentation
mod common;

use std::io::Cursor;
use std::sync::{Arc, Barrier};

use fast_ntfs::{KnownNtfsFileRecordNumber, Ntfs};

fn assert_send_sync<T: Send + Sync>() {}

#[test]
fn ntfs_is_send_and_sync_with_std() {
    assert_send_sync::<Ntfs>();
}

#[test]
fn immutable_caches_can_be_initialized_concurrently() {
    const THREADS: usize = 8;

    let image = common::testfs1().into_inner();
    let mut boot_reader = Cursor::new(image.clone());
    let ntfs = Arc::new(Ntfs::new(&mut boot_reader).unwrap());
    let barrier = Arc::new(Barrier::new(THREADS));

    let handles: Vec<_> = (0..THREADS)
        .map(|_| {
            let image = image.clone();
            let ntfs = Arc::clone(&ntfs);
            let barrier = Arc::clone(&barrier);
            std::thread::spawn(move || {
                let mut reader = Cursor::new(image);
                barrier.wait();

                ntfs.read_mft_runs(&mut reader).unwrap();
                ntfs.read_upcase_table(&mut reader).unwrap();

                let root = ntfs.root_directory(&mut reader).unwrap();
                assert_eq!(
                    root.file_record_number(),
                    KnownNtfsFileRecordNumber::RootDirectory as u64
                );
            })
        })
        .collect();

    for handle in handles {
        handle.join().unwrap();
    }
}