mod scan;
mod write;
use crate::Result;
use crate::block::BlockDevice;
use crate::fs::archive::ArchiveFs;
pub const MAGIC_NEWC: &[u8; 6] = b"070701";
pub const MAGIC_NEWC_CRC: &[u8; 6] = b"070702";
pub const MAGIC_ODC: &[u8; 6] = b"070707";
pub const TRAILER: &str = "TRAILER!!!";
pub const S_IFMT: u32 = 0o170000;
#[derive(Debug, Clone, Default)]
pub struct CpioFormatOpts;
impl CpioFormatOpts {
pub fn apply_options(&mut self, _bag: &mut crate::format_opts::OptionMap) -> Result<()> {
Ok(())
}
}
pub struct CpioFs(pub ArchiveFs);
impl CpioFs {
pub fn open(dev: &mut dyn BlockDevice) -> Result<Self> {
Ok(Self(ArchiveFs::from_index(scan::scan(dev)?)))
}
pub fn format(dev: &mut dyn BlockDevice, _opts: &CpioFormatOpts) -> Result<Self> {
Ok(Self(ArchiveFs::writer(
"cpio",
Box::new(write::CpioWriter::new(dev)),
)))
}
}
impl crate::fs::FilesystemFactory for CpioFs {
type FormatOpts = CpioFormatOpts;
fn format(dev: &mut dyn BlockDevice, opts: &Self::FormatOpts) -> Result<Self> {
Self::format(dev, opts)
}
fn open(dev: &mut dyn BlockDevice) -> Result<Self> {
Self::open(dev)
}
}
crate::impl_archive_fs_filesystem!(CpioFs);