#![no_std]
#![allow(clippy::too_many_arguments)]
#![allow(dead_code, unused)]
#[cfg(feature = "alloc")]
extern crate alloc;
mod bd;
mod block_alloc;
mod crc;
mod dir;
#[cfg(feature = "alloc")]
mod lfs_alloc_module;
mod error;
mod file;
mod fs;
mod lfs_config;
mod lfs_gstate;
mod lfs_info;
mod lfs_superblock;
pub mod lfs_type;
#[cfg(test)]
mod test;
#[macro_use]
mod macros;
mod tag;
mod types;
mod util;
use core::ffi::c_void;
pub use crate::dir::LfsDir;
pub use crate::error::{
LFS_ERR_CORRUPT, LFS_ERR_EXIST, LFS_ERR_INVAL, LFS_ERR_IO, LFS_ERR_ISDIR, LFS_ERR_NAMETOOLONG,
LFS_ERR_NOATTR, LFS_ERR_NOENT, LFS_ERR_NOMEM, LFS_ERR_NOSPC, LFS_ERR_NOTDIR, LFS_ERR_NOTEMPTY,
};
pub use crate::file::LfsFile;
pub use crate::fs::Lfs;
pub use crate::lfs_config::LfsConfig;
pub use crate::lfs_info::{LfsAttr, LfsFileConfig, LfsInfo};
#[doc(hidden)]
pub use crate::dir::traverse::TraverseTestOut;
#[doc(hidden)]
pub use crate::fs::format::{
test_format_minimal_superblock, test_traverse_filter_gets_superblock_after_push,
test_traverse_format_attrs,
};
pub use crate::lfs_info::LfsFsinfo;
#[doc(hidden)]
pub use crate::types::LFS_DISK_VERSION;
#[doc(hidden)]
pub use crate::block_alloc::alloc::lfs_alloc_ckpoint;
#[doc(hidden)]
pub use crate::dir::commit::{lfs_dir_alloc, lfs_dir_commit};
#[doc(hidden)]
pub use crate::dir::fetch::lfs_dir_fetch;
#[doc(hidden)]
pub use crate::dir::traverse::lfs_dir_get;
#[doc(hidden)]
pub use crate::dir::LfsMdir;
#[doc(hidden)]
pub use crate::file::lfs_ctz::lfs_ctz_fromle32;
#[doc(hidden)]
pub use crate::file::lfs_ctz::LfsCtz;
#[doc(hidden)]
pub use crate::fs::init::{lfs_deinit, lfs_init};
#[doc(hidden)]
pub use crate::fs::superblock::lfs_fs_prepmove;
#[doc(hidden)]
pub use crate::lfs_superblock::{lfs_superblock_tole32, LfsSuperblock};
#[doc(hidden)]
pub use crate::tag::{lfs_mattr, lfs_mktag};
use crate::types::{lfs_block_t, lfs_off_t, lfs_size_t, lfs_soff_t, lfs_ssize_t};
#[doc(hidden)]
pub use crate::util::{lfs_pair_fromle32, lfs_pair_tole32, lfs_tole32};
#[inline(never)]
pub fn lfs_format(lfs: *mut Lfs, config: *const LfsConfig) -> i32 {
crate::lfs_trace!("lfs_format({:p}, {:p})", lfs, config);
let err = crate::fs::lfs_format_(lfs, config);
crate::lfs_trace!("lfs_format -> {}", err);
err
}
#[inline(never)]
pub fn lfs_mount(lfs: *mut Lfs, config: *const LfsConfig) -> i32 {
crate::lfs_trace!("lfs_mount({:p}, {:p})", lfs, config);
crate::fs::lfs_mount_(lfs, config)
}
#[inline(never)]
pub fn lfs_unmount(lfs: *mut Lfs) -> i32 {
crate::fs::lfs_unmount_(lfs)
}
#[inline(never)]
pub fn lfs_remove(lfs: *mut Lfs, path: *const u8) -> i32 {
crate::fs::remove::lfs_remove_(lfs, path)
}
#[inline(never)]
pub fn lfs_rename(lfs: *mut Lfs, oldpath: *const u8, newpath: *const u8) -> i32 {
crate::fs::rename::lfs_rename_(lfs, oldpath, newpath)
}
#[inline(never)]
pub fn lfs_stat(lfs: *mut Lfs, path: *const u8, info: *mut LfsInfo) -> i32 {
crate::fs::stat::lfs_stat_(lfs, path, info)
}
#[inline(never)]
pub fn lfs_getattr(
lfs: *mut Lfs,
path: *const u8,
r#type: u8,
buffer: *mut c_void,
size: lfs_size_t,
) -> lfs_ssize_t {
crate::fs::attr::lfs_getattr_(lfs, path, r#type, buffer, size)
}
#[inline(never)]
pub fn lfs_setattr(
lfs: *mut Lfs,
path: *const u8,
r#type: u8,
buffer: *const c_void,
size: lfs_size_t,
) -> i32 {
crate::fs::attr::lfs_setattr_(lfs, path, r#type, buffer, size)
}
#[inline(never)]
pub fn lfs_removeattr(lfs: *mut Lfs, path: *const u8, r#type: u8) -> i32 {
crate::fs::attr::lfs_removeattr_(lfs, path, r#type)
}
#[inline(never)]
pub fn lfs_file_open(lfs: *mut Lfs, file: *mut LfsFile, path: *const u8, flags: i32) -> i32 {
crate::file::ops::lfs_file_open_(lfs, file, path as *const i8, flags)
}
#[inline(never)]
pub fn lfs_file_opencfg(
lfs: *mut Lfs,
file: *mut LfsFile,
path: *const u8,
flags: i32,
config: *const LfsFileConfig,
) -> i32 {
crate::file::ops::lfs_file_opencfg_(lfs, file, path as *const i8, flags, config)
}
#[inline(never)]
pub fn lfs_file_close(lfs: *mut Lfs, file: *mut LfsFile) -> i32 {
crate::file::ops::lfs_file_close_(lfs, file)
}
#[inline(never)]
pub fn lfs_file_sync(lfs: *mut Lfs, file: *mut LfsFile) -> i32 {
crate::file::ops::lfs_file_sync_(lfs, file)
}
#[inline(never)]
pub fn lfs_file_read(
lfs: *mut Lfs,
file: *mut LfsFile,
buffer: *mut c_void,
size: lfs_size_t,
) -> lfs_ssize_t {
crate::file::ops::lfs_file_read_(lfs, file, buffer, size)
}
#[inline(never)]
pub fn lfs_file_write(
lfs: *mut Lfs,
file: *mut LfsFile,
buffer: *const c_void,
size: lfs_size_t,
) -> lfs_ssize_t {
crate::file::ops::lfs_file_write_(lfs, file, buffer, size)
}
#[inline(never)]
pub fn lfs_file_seek(
lfs: *mut Lfs,
file: *mut LfsFile,
off: lfs_soff_t,
whence: i32,
) -> lfs_soff_t {
crate::file::ops::lfs_file_seek_(lfs, file, off, whence)
}
#[inline(never)]
pub fn lfs_file_truncate(lfs: *mut Lfs, file: *mut LfsFile, size: lfs_off_t) -> i32 {
crate::file::ops::lfs_file_truncate_(lfs, file, size)
}
#[inline(never)]
pub fn lfs_file_tell(_lfs: *mut Lfs, file: *mut LfsFile) -> lfs_soff_t {
crate::file::ops::lfs_file_tell_(core::ptr::null(), file)
}
#[inline(never)]
pub fn lfs_file_rewind(lfs: *mut Lfs, file: *mut LfsFile) -> i32 {
crate::file::ops::lfs_file_rewind_(lfs, file)
}
#[inline(never)]
pub fn lfs_file_size(_lfs: *mut Lfs, file: *mut LfsFile) -> lfs_soff_t {
crate::file::ops::lfs_file_size_(core::ptr::null(), file)
}
#[inline(never)]
pub fn lfs_mkdir(lfs: *mut Lfs, path: *const u8) -> i32 {
crate::fs::mkdir::lfs_mkdir_(lfs, path)
}
#[inline(never)]
pub fn lfs_dir_open(lfs: *mut Lfs, dir: *mut LfsDir, path: *const u8) -> i32 {
crate::dir::open::lfs_dir_open_(lfs, dir, path)
}
#[inline(never)]
pub fn lfs_dir_close(lfs: *mut Lfs, dir: *mut LfsDir) -> i32 {
crate::dir::open::lfs_dir_close_(lfs, dir)
}
#[inline(never)]
pub fn lfs_dir_read(lfs: *mut Lfs, dir: *mut LfsDir, info: *mut LfsInfo) -> i32 {
crate::dir::open::lfs_dir_read_(lfs, dir, info)
}
#[inline(never)]
pub fn lfs_dir_seek(lfs: *mut Lfs, dir: *mut LfsDir, off: lfs_off_t) -> i32 {
crate::dir::open::lfs_dir_seek_(lfs, dir, off)
}
#[inline(never)]
pub fn lfs_dir_tell(lfs: *mut Lfs, dir: *mut LfsDir) -> lfs_soff_t {
crate::dir::open::lfs_dir_tell_(lfs, dir)
}
#[inline(never)]
pub fn lfs_dir_rewind(lfs: *mut Lfs, dir: *mut LfsDir) -> i32 {
crate::dir::open::lfs_dir_rewind_(lfs, dir)
}
#[inline(never)]
pub fn lfs_fs_stat(lfs: *mut Lfs, fsinfo: *mut LfsFsinfo) -> i32 {
crate::fs::lfs_fs_stat_(lfs, fsinfo)
}
#[inline(never)]
pub fn lfs_fs_size(lfs: *mut Lfs) -> lfs_ssize_t {
crate::fs::stat::lfs_fs_size_(lfs)
}
pub type LfsTraverseCb = unsafe extern "C" fn(data: *mut c_void, block: lfs_block_t) -> i32;
#[inline(never)]
pub fn lfs_fs_traverse(lfs: *mut Lfs, cb: LfsTraverseCb, data: *mut c_void) -> i32 {
crate::fs::traverse::lfs_fs_traverse_(lfs, Some(cb), data, false)
}
#[inline(never)]
pub fn lfs_fs_mkconsistent(lfs: *mut Lfs) -> i32 {
crate::fs::consistent::lfs_fs_mkconsistent_(lfs)
}
#[inline(never)]
pub fn lfs_fs_gc(lfs: *mut Lfs) -> i32 {
crate::fs::consistent::lfs_fs_gc_(lfs)
}
#[doc(hidden)]
pub fn lfs_fs_forceconsistency(lfs: *mut Lfs) -> i32 {
crate::fs::superblock::lfs_fs_forceconsistency(lfs)
}
#[doc(hidden)]
pub fn lfs_fs_preporphans(lfs: *mut Lfs, orphans: i8) -> i32 {
crate::fs::superblock::lfs_fs_preporphans(lfs, orphans)
}
#[doc(hidden)]
pub unsafe fn lfs_fs_hasorphans(lfs: *const Lfs) -> bool {
crate::lfs_gstate::lfs_gstate_hasorphans(&(*lfs).gstate)
}
#[inline(never)]
pub fn lfs_fs_grow(lfs: *mut Lfs, block_count: lfs_size_t) -> i32 {
crate::fs::grow::lfs_fs_grow_(lfs, block_count)
}