#![allow(clippy::doc_lazy_continuation)]
pub mod acl;
pub mod alloc;
pub mod bgd;
pub mod block_cache;
pub mod block_io;
pub mod casefold;
pub mod checksum;
pub mod dir;
pub mod ea_inode;
pub mod error;
pub mod extent;
pub mod extent_mut;
pub mod features;
pub mod file_io;
pub mod file_mut;
pub mod fs;
pub mod fs_core_bridge;
pub mod fsck;
pub mod hash;
pub mod htree;
pub mod htree_mut;
pub mod indirect;
pub mod indirect_mut;
pub mod inline_data;
pub(crate) mod inline_mut;
pub mod inode;
pub mod jbd2;
pub mod journal;
pub mod journal_apply;
pub mod journal_writer;
pub mod mkfs;
pub mod path;
pub mod runtime;
pub mod superblock;
pub mod transaction;
pub mod verify;
pub mod xattr;
pub mod capi;
pub use error::{Error, Result};
pub use fs::{Filesystem, InodeRef};
pub use superblock::Superblock;
#[cfg(test)]
mod overflow_checks {
const HANDSHAKE: &str = "EXPECT_OVERFLOW_CHECKS";
fn this_build_traps_an_overflow() -> bool {
std::panic::catch_unwind(|| {
let big = std::hint::black_box(u64::MAX);
std::hint::black_box(big + 1);
})
.is_err()
}
#[test]
fn the_build_the_gate_asked_to_check_does_check() {
let asked = match std::env::var(HANDSHAKE) {
Ok(value) if !value.is_empty() => value,
_ => return,
};
assert!(
this_build_traps_an_overflow(),
"{HANDSHAKE}={asked} was set, so this run is the one that is \
supposed to panic on arithmetic overflow -- and it did not. \
The debug step is running and blind, which is the exact \
state it exists to rule out."
);
}
}