[package]
edition = "2021"
rust-version = "1.87"
name = "rust-fs-ext4"
version = "0.8.0"
build = false
exclude = ["fuzz"]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Pure-Rust ext4 filesystem driver. Exposes a C ABI (fs_ext4_*) suitable for FFI from C/C++/Go/etc."
readme = "README.md"
license = "MIT"
repository = "https://github.com/antimatter-studios/rust-fs-ext4"
[package.metadata.package-cli]
licenses = ["LICENSE"]
[package.metadata.package-cli.names]
"mkfs.ext4" = 8
"fsck.ext4" = 8
"fs.ext4" = 1
[package.metadata.semver]
former-name = "am-fs-ext4"
[features]
cli = [
"dep:clap",
"rust-fs-core/cli",
]
[lib]
name = "fs_ext4"
crate-type = [
"staticlib",
"rlib",
]
path = "src/lib.rs"
[[bin]]
name = "mkfs_ext4"
path = "src/bin/mkfs_ext4.rs"
[[bin]]
name = "rust-fs-ext4"
path = "src/cli/main.rs"
required-features = ["cli"]
[[example]]
name = "capi_demo"
path = "examples/capi_demo.rs"
[[example]]
name = "fsck_demo"
path = "examples/fsck_demo.rs"
[[example]]
name = "readme"
path = "examples/readme.rs"
[[test]]
name = "acl_basic"
path = "tests/acl_basic.rs"
[[test]]
name = "all_images_rw_smoke"
path = "tests/all_images_rw_smoke.rs"
[[test]]
name = "alloc_counter_consistency"
path = "tests/alloc_counter_consistency.rs"
[[test]]
name = "allocations_into_an_uninit_group"
path = "tests/allocations_into_an_uninit_group.rs"
[[test]]
name = "bgd_pointer_bounds"
path = "tests/bgd_pointer_bounds.rs"
[[test]]
name = "bigalloc_read_oracle"
path = "tests/bigalloc_read_oracle.rs"
[[test]]
name = "block_cache_integration"
path = "tests/block_cache_integration.rs"
[[test]]
name = "block_mapped_writes_on_csum"
path = "tests/block_mapped_writes_on_csum.rs"
[[test]]
name = "capi_acl_xattrs"
path = "tests/capi_acl_xattrs.rs"
[[test]]
name = "capi_basic"
path = "tests/capi_basic.rs"
[[test]]
name = "capi_callback_alignment"
path = "tests/capi_callback_alignment.rs"
[[test]]
name = "capi_callback_alignment_oracle"
path = "tests/capi_callback_alignment_oracle.rs"
[[test]]
name = "capi_callback_rw"
path = "tests/capi_callback_rw.rs"
[[test]]
name = "capi_chmod_chown"
path = "tests/capi_chmod_chown.rs"
[[test]]
name = "capi_concurrency"
path = "tests/capi_concurrency.rs"
[[test]]
name = "capi_create"
path = "tests/capi_create.rs"
[[test]]
name = "capi_create_mkdir_rmdir_errno"
path = "tests/capi_create_mkdir_rmdir_errno.rs"
[[test]]
name = "capi_csum_variants"
path = "tests/capi_csum_variants.rs"
[[test]]
name = "capi_deep_extents"
path = "tests/capi_deep_extents.rs"
[[test]]
name = "capi_errno"
path = "tests/capi_errno.rs"
[[test]]
name = "capi_flush"
path = "tests/capi_flush.rs"
[[test]]
name = "capi_fs_core_mount"
path = "tests/capi_fs_core_mount.rs"
[[test]]
name = "capi_header_names_real_functions"
path = "tests/capi_header_names_real_functions.rs"
[[test]]
name = "capi_htree"
path = "tests/capi_htree.rs"
[[test]]
name = "capi_inline_data"
path = "tests/capi_inline_data.rs"
[[test]]
name = "capi_ino_api"
path = "tests/capi_ino_api.rs"
[[test]]
name = "capi_input_validation"
path = "tests/capi_input_validation.rs"
[[test]]
name = "capi_largedir"
path = "tests/capi_largedir.rs"
[[test]]
name = "capi_lazy_replay"
path = "tests/capi_lazy_replay.rs"
[[test]]
name = "capi_link"
path = "tests/capi_link.rs"
[[test]]
name = "capi_link_errno"
path = "tests/capi_link_errno.rs"
[[test]]
name = "capi_long_symlink"
path = "tests/capi_long_symlink.rs"
[[test]]
name = "capi_manyfiles"
path = "tests/capi_manyfiles.rs"
[[test]]
name = "capi_mkdir_rmdir"
path = "tests/capi_mkdir_rmdir.rs"
[[test]]
name = "capi_mkdir_rmdir_cycle"
path = "tests/capi_mkdir_rmdir_cycle.rs"
[[test]]
name = "capi_name_too_long"
path = "tests/capi_name_too_long.rs"
[[test]]
name = "capi_non_utf8_path"
path = "tests/capi_non_utf8_path.rs"
[[test]]
name = "capi_paths"
path = "tests/capi_paths.rs"
[[test]]
name = "capi_pwrite"
path = "tests/capi_pwrite.rs"
[[test]]
name = "capi_readlink_basic"
path = "tests/capi_readlink_basic.rs"
[[test]]
name = "capi_removexattr"
path = "tests/capi_removexattr.rs"
[[test]]
name = "capi_rename"
path = "tests/capi_rename.rs"
[[test]]
name = "capi_rename_overwrite"
path = "tests/capi_rename_overwrite.rs"
[[test]]
name = "capi_rename_semantics"
path = "tests/capi_rename_semantics.rs"
[[test]]
name = "capi_resilience"
path = "tests/capi_resilience.rs"
[[test]]
name = "capi_set_volume_label"
path = "tests/capi_set_volume_label.rs"
[[test]]
name = "capi_setxattr"
path = "tests/capi_setxattr.rs"
[[test]]
name = "capi_symlink"
path = "tests/capi_symlink.rs"
[[test]]
name = "capi_truncate"
path = "tests/capi_truncate.rs"
[[test]]
name = "capi_truncate_callback_mount"
path = "tests/capi_truncate_callback_mount.rs"
[[test]]
name = "capi_truncate_deep"
path = "tests/capi_truncate_deep.rs"
[[test]]
name = "capi_truncate_frees_blocks"
path = "tests/capi_truncate_frees_blocks.rs"
[[test]]
name = "capi_truncate_grow"
path = "tests/capi_truncate_grow.rs"
[[test]]
name = "capi_truncate_type_check"
path = "tests/capi_truncate_type_check.rs"
[[test]]
name = "capi_unlink"
path = "tests/capi_unlink.rs"
[[test]]
name = "capi_unlink_errno"
path = "tests/capi_unlink_errno.rs"
[[test]]
name = "capi_utimens"
path = "tests/capi_utimens.rs"
[[test]]
name = "capi_write_file"
path = "tests/capi_write_file.rs"
[[test]]
name = "capi_write_file_allocates_blocks"
path = "tests/capi_write_file_allocates_blocks.rs"
[[test]]
name = "capi_write_file_csum_integrity"
path = "tests/capi_write_file_csum_integrity.rs"
[[test]]
name = "capi_write_file_type_check"
path = "tests/capi_write_file_type_check.rs"
[[test]]
name = "capi_write_ops_on_ro_mount"
path = "tests/capi_write_ops_on_ro_mount.rs"
[[test]]
name = "capi_write_path_e2e"
path = "tests/capi_write_path_e2e.rs"
[[test]]
name = "capi_xattr"
path = "tests/capi_xattr.rs"
[[test]]
name = "checksum_corruption"
path = "tests/checksum_corruption.rs"
[[test]]
name = "ci_profile"
path = "tests/ci_profile.rs"
[[test]]
name = "cli_dispatch"
path = "tests/cli_dispatch.rs"
[[test]]
name = "cli_docs"
path = "tests/cli_docs.rs"
[[test]]
name = "cli_fs_images"
path = "tests/cli_fs_images.rs"
[[test]]
name = "cli_fs_kernel"
path = "tests/cli_fs_kernel.rs"
[[test]]
name = "cli_fs_oracle"
path = "tests/cli_fs_oracle.rs"
[[test]]
name = "cli_fs_write"
path = "tests/cli_fs_write.rs"
[[test]]
name = "cli_fs_write_oracle"
path = "tests/cli_fs_write_oracle.rs"
[[test]]
name = "cli_fsck"
path = "tests/cli_fsck.rs"
[[test]]
name = "cli_fsck_oracle"
path = "tests/cli_fsck_oracle.rs"
[[test]]
name = "cli_mkfs"
path = "tests/cli_mkfs.rs"
[[test]]
name = "cli_mkfs_oracle"
path = "tests/cli_mkfs_oracle.rs"
[[test]]
name = "commit_cache_bounded"
path = "tests/commit_cache_bounded.rs"
[[test]]
name = "deep_dir_extent_nodes_are_distinct"
path = "tests/deep_dir_extent_nodes_are_distinct.rs"
[[test]]
name = "descriptor_pointers_and_csum_v2_tags"
path = "tests/descriptor_pointers_and_csum_v2_tags.rs"
[[test]]
name = "dir_block_checksums_after_writes"
path = "tests/dir_block_checksums_after_writes.rs"
[[test]]
name = "dir_grow"
path = "tests/dir_grow.rs"
[[test]]
name = "dir_nlink_oracle"
path = "tests/dir_nlink_oracle.rs"
[[test]]
name = "direct_commit_failure"
path = "tests/direct_commit_failure.rs"
[[test]]
name = "direct_commit_failure_oracle"
path = "tests/direct_commit_failure_oracle.rs"
[[test]]
name = "encrypt_per_inode"
path = "tests/encrypt_per_inode.rs"
[[test]]
name = "end_to_end"
path = "tests/end_to_end.rs"
[[test]]
name = "ext2_basic"
path = "tests/ext2_basic.rs"
[[test]]
name = "extent_block_leaks"
path = "tests/extent_block_leaks.rs"
[[test]]
name = "extent_deep_insert"
path = "tests/extent_deep_insert.rs"
[[test]]
name = "extent_merge_length_limit"
path = "tests/extent_merge_length_limit.rs"
[[test]]
name = "extent_multi_level"
path = "tests/extent_multi_level.rs"
[[test]]
name = "fallocate_crash_safety"
path = "tests/fallocate_crash_safety.rs"
[[test]]
name = "fallocate_keep_size"
path = "tests/fallocate_keep_size.rs"
[[test]]
name = "fallocate_past_four_extents"
path = "tests/fallocate_past_four_extents.rs"
[[test]]
name = "fallocate_punch_zero"
path = "tests/fallocate_punch_zero.rs"
[[test]]
name = "feature_matrix"
path = "tests/feature_matrix.rs"
[[test]]
name = "fsck_audit"
path = "tests/fsck_audit.rs"
[[test]]
name = "fsck_bogus_entry_hardlinks"
path = "tests/fsck_bogus_entry_hardlinks.rs"
[[test]]
name = "fsck_dir_block_checksum"
path = "tests/fsck_dir_block_checksum.rs"
[[test]]
name = "fsck_dir_block_checksum_oracle"
path = "tests/fsck_dir_block_checksum_oracle.rs"
[[test]]
name = "fsck_repair"
path = "tests/fsck_repair.rs"
[[test]]
name = "fsck_uninit_groups_oracle"
path = "tests/fsck_uninit_groups_oracle.rs"
[[test]]
name = "fsck_unreadable_dir"
path = "tests/fsck_unreadable_dir.rs"
[[test]]
name = "fsck_unreadable_dir_oracle"
path = "tests/fsck_unreadable_dir_oracle.rs"
[[test]]
name = "fsck_wrong_dotdot"
path = "tests/fsck_wrong_dotdot.rs"
[[test]]
name = "fuzz_decoders"
path = "tests/fuzz_decoders.rs"
[[test]]
name = "fuzz_smoke"
path = "tests/fuzz_smoke.rs"
[[test]]
name = "fuzz_write_paths"
path = "tests/fuzz_write_paths.rs"
[[test]]
name = "gdt_csum_writes"
path = "tests/gdt_csum_writes.rs"
[[test]]
name = "group_layout_oracle"
path = "tests/group_layout_oracle.rs"
[[test]]
name = "hostile_superblock"
path = "tests/hostile_superblock.rs"
[[test]]
name = "htree_dir_writes_oracle"
path = "tests/htree_dir_writes_oracle.rs"
[[test]]
name = "htree_hash_differential"
path = "tests/htree_hash_differential.rs"
[[test]]
name = "htree_hash_vectors"
path = "tests/htree_hash_vectors.rs"
[[test]]
name = "htree_index_descent_oracle"
path = "tests/htree_index_descent_oracle.rs"
[[test]]
name = "htree_lookup"
path = "tests/htree_lookup.rs"
[[test]]
name = "htree_root_with_kernel_tail_bytes"
path = "tests/htree_root_with_kernel_tail_bytes.rs"
[[test]]
name = "htree_split_write_cut"
path = "tests/htree_split_write_cut.rs"
[[test]]
name = "inline_data_basic"
path = "tests/inline_data_basic.rs"
[[test]]
name = "inline_dir_kernel_reads"
path = "tests/inline_dir_kernel_reads.rs"
[[test]]
name = "inline_dir_writes_oracle"
path = "tests/inline_dir_writes_oracle.rs"
[[test]]
name = "inline_file_writes"
path = "tests/inline_file_writes.rs"
[[test]]
name = "inline_file_writes_oracle"
path = "tests/inline_file_writes_oracle.rs"
[[test]]
name = "inode_api"
path = "tests/inode_api.rs"
[[test]]
name = "inode_api_e2fsck"
path = "tests/inode_api_e2fsck.rs"
[[test]]
name = "inode_basic"
path = "tests/inode_basic.rs"
[[test]]
name = "jbd2_basic"
path = "tests/jbd2_basic.rs"
[[test]]
name = "jbd2_checksums_oracle"
path = "tests/jbd2_checksums_oracle.rs"
[[test]]
name = "jbd2_layouts_oracle"
path = "tests/jbd2_layouts_oracle.rs"
[[test]]
name = "journal_escape_oracle"
path = "tests/journal_escape_oracle.rs"
[[test]]
name = "journal_maxlen_bound"
path = "tests/journal_maxlen_bound.rs"
[[test]]
name = "journal_mount_recovery"
path = "tests/journal_mount_recovery.rs"
[[test]]
name = "journal_multi_descriptor_oracle"
path = "tests/journal_multi_descriptor_oracle.rs"
[[test]]
name = "journal_replay"
path = "tests/journal_replay.rs"
[[test]]
name = "journal_replay_all_or_nothing"
path = "tests/journal_replay_all_or_nothing.rs"
[[test]]
name = "journal_writer_block_zero"
path = "tests/journal_writer_block_zero.rs"
[[test]]
name = "journal_writer_chmod"
path = "tests/journal_writer_chmod.rs"
[[test]]
name = "journal_writer_crash_dir_ops"
path = "tests/journal_writer_crash_dir_ops.rs"
[[test]]
name = "journal_writer_crash_pwrite_rmdir_xattr"
path = "tests/journal_writer_crash_pwrite_rmdir_xattr.rs"
[[test]]
name = "journal_writer_crash_rename_write"
path = "tests/journal_writer_crash_rename_write.rs"
[[test]]
name = "journal_writer_crash_safety"
path = "tests/journal_writer_crash_safety.rs"
[[test]]
name = "journal_writer_create_mkdir_link_symlink"
path = "tests/journal_writer_create_mkdir_link_symlink.rs"
[[test]]
name = "journal_writer_inode_ops"
path = "tests/journal_writer_inode_ops.rs"
[[test]]
name = "journal_writer_rename_write_xattr"
path = "tests/journal_writer_rename_write_xattr.rs"
[[test]]
name = "journal_writer_truncate_shrink"
path = "tests/journal_writer_truncate_shrink.rs"
[[test]]
name = "journal_writer_unlink_rmdir"
path = "tests/journal_writer_unlink_rmdir.rs"
[[test]]
name = "kernel_inline_writes"
path = "tests/kernel_inline_writes.rs"
[[test]]
name = "kernel_readback"
path = "tests/kernel_readback.rs"
[[test]]
name = "kernel_readback_capi"
path = "tests/kernel_readback_capi.rs"
[[test]]
name = "kernel_xattr_no_extra_isize"
path = "tests/kernel_xattr_no_extra_isize.rs"
[[test]]
name = "largedir"
path = "tests/largedir.rs"
[[test]]
name = "largedir_basic"
path = "tests/largedir_basic.rs"
[[test]]
name = "lazy_replay_reloads_state"
path = "tests/lazy_replay_reloads_state.rs"
[[test]]
name = "leading_hole_deep_tree"
path = "tests/leading_hole_deep_tree.rs"
[[test]]
name = "lwext4_cross_validate"
path = "tests/lwext4_cross_validate.rs"
[[test]]
name = "meta_bg_oracle"
path = "tests/meta_bg_oracle.rs"
[[test]]
name = "mkdir_rmdir"
path = "tests/mkdir_rmdir.rs"
[[test]]
name = "mkdir_unique_inodes"
path = "tests/mkdir_unique_inodes.rs"
[[test]]
name = "mkfs_bin_fsck_oracle"
path = "tests/mkfs_bin_fsck_oracle.rs"
[[test]]
name = "mkfs_bin_smoke"
path = "tests/mkfs_bin_smoke.rs"
[[test]]
name = "mkfs_e2fsck_oracle"
path = "tests/mkfs_e2fsck_oracle.rs"
[[test]]
name = "mkfs_ext3_oracle"
path = "tests/mkfs_ext3_oracle.rs"
[[test]]
name = "mkfs_lost_found"
path = "tests/mkfs_lost_found.rs"
[[test]]
name = "mkfs_lost_found_oracle"
path = "tests/mkfs_lost_found_oracle.rs"
[[test]]
name = "mkfs_roundtrip"
path = "tests/mkfs_roundtrip.rs"
[[test]]
name = "needs_recovery_oracle"
path = "tests/needs_recovery_oracle.rs"
[[test]]
name = "non_64bit_desc_size"
path = "tests/non_64bit_desc_size.rs"
[[test]]
name = "non_utf8_names_oracle"
path = "tests/non_utf8_names_oracle.rs"
[[test]]
name = "nul_in_names"
path = "tests/nul_in_names.rs"
[[test]]
name = "one_kib_group_count"
path = "tests/one_kib_group_count.rs"
[[test]]
name = "oracle_debugfs"
path = "tests/oracle_debugfs.rs"
[[test]]
name = "oracle_encoding"
path = "tests/oracle_encoding.rs"
[[test]]
name = "oracle_verdicts"
path = "tests/oracle_verdicts.rs"
[[test]]
name = "oracle_verdicts_live"
path = "tests/oracle_verdicts_live.rs"
[[test]]
name = "orphan_list_basic"
path = "tests/orphan_list_basic.rs"
[[test]]
name = "orphan_recovery"
path = "tests/orphan_recovery.rs"
[[test]]
name = "probe_dir_csum_range"
path = "tests/probe_dir_csum_range.rs"
[[test]]
name = "punch_hole_deep_tree"
path = "tests/punch_hole_deep_tree.rs"
[[test]]
name = "punch_unaligned_oracle"
path = "tests/punch_unaligned_oracle.rs"
[[test]]
name = "pwrite_chunking_oracle"
path = "tests/pwrite_chunking_oracle.rs"
[[test]]
name = "pwrite_enospc_oracle"
path = "tests/pwrite_enospc_oracle.rs"
[[test]]
name = "pwrite_fits_the_journal"
path = "tests/pwrite_fits_the_journal.rs"
[[test]]
name = "pwrite_into_prealloc"
path = "tests/pwrite_into_prealloc.rs"
[[test]]
name = "random_operations_e2fsck"
path = "tests/random_operations_e2fsck.rs"
[[test]]
name = "read_link_fast_symlink"
path = "tests/read_link_fast_symlink.rs"
[[test]]
name = "read_path_cost"
path = "tests/read_path_cost.rs"
[[test]]
name = "readlink_oracle"
path = "tests/readlink_oracle.rs"
[[test]]
name = "readme_example"
path = "tests/readme_example.rs"
[[test]]
name = "rename_file_type_oracle"
path = "tests/rename_file_type_oracle.rs"
[[test]]
name = "replace_keeps_xattr_block"
path = "tests/replace_keeps_xattr_block.rs"
[[test]]
name = "repro_csum_seed_op_coverage"
path = "tests/repro_csum_seed_op_coverage.rs"
[[test]]
name = "repro_mkfs_1k_op_coverage"
path = "tests/repro_mkfs_1k_op_coverage.rs"
[[test]]
name = "repro_no_csum_op_coverage"
path = "tests/repro_no_csum_op_coverage.rs"
[[test]]
name = "repro_wants_dir_symlinks"
path = "tests/repro_wants_dir_symlinks.rs"
[[test]]
name = "reserved_inodes_past_group_0_oracle"
path = "tests/reserved_inodes_past_group_0_oracle.rs"
[[test]]
name = "ro_compat_write_guard"
path = "tests/ro_compat_write_guard.rs"
[[test]]
name = "ro_mount_replays_in_memory"
path = "tests/ro_mount_replays_in_memory.rs"
[[test]]
name = "runtime_provider"
path = "tests/runtime_provider.rs"
[[test]]
name = "set_flags_oracle"
path = "tests/set_flags_oracle.rs"
[[test]]
name = "shared_xattr_block"
path = "tests/shared_xattr_block.rs"
[[test]]
name = "sparse_grow"
path = "tests/sparse_grow.rs"
[[test]]
name = "sparse_super2_backup_bgs_oracle"
path = "tests/sparse_super2_backup_bgs_oracle.rs"
[[test]]
name = "superblock_basic"
path = "tests/superblock_basic.rs"
[[test]]
name = "test_contract"
path = "tests/test_contract.rs"
[[test]]
name = "test_temp_policy"
path = "tests/test_temp_policy.rs"
[[test]]
name = "timestamps_past_2038_oracle"
path = "tests/timestamps_past_2038_oracle.rs"
[[test]]
name = "truncate_basic"
path = "tests/truncate_basic.rs"
[[test]]
name = "truncate_multilevel"
path = "tests/truncate_multilevel.rs"
[[test]]
name = "truncate_refuses_non_files"
path = "tests/truncate_refuses_non_files.rs"
[[test]]
name = "uninit_group_backup_superblock"
path = "tests/uninit_group_backup_superblock.rs"
[[test]]
name = "uninit_group_flags_cleared"
path = "tests/uninit_group_flags_cleared.rs"
[[test]]
name = "utimens_nsec_range"
path = "tests/utimens_nsec_range.rs"
[[test]]
name = "verify_basic"
path = "tests/verify_basic.rs"
[[test]]
name = "volume_label"
path = "tests/volume_label.rs"
[[test]]
name = "volume_label_oracle"
path = "tests/volume_label_oracle.rs"
[[test]]
name = "wasm"
path = "tests/wasm.rs"
[[test]]
name = "writes_verify_the_block_they_restamp"
path = "tests/writes_verify_the_block_they_restamp.rs"
[[test]]
name = "xattr_basic"
path = "tests/xattr_basic.rs"
[[test]]
name = "xattr_block_checked_oracle"
path = "tests/xattr_block_checked_oracle.rs"
[[test]]
name = "xattr_external_block"
path = "tests/xattr_external_block.rs"
[[test]]
name = "xattr_one_copy_oracle"
path = "tests/xattr_one_copy_oracle.rs"
[dependencies.bitflags]
version = "2"
[dependencies.caseless]
version = "0.2"
[dependencies.clap]
version = "4.5"
features = [
"std",
"help",
"usage",
"error-context",
"suggestions",
]
optional = true
default-features = false
[dependencies.crc32c]
version = "0.6"
[dependencies.rust-fs-core]
version = "0.3.0"
[dependencies.unicode-normalization]
version = "0.1"
[dev-dependencies.hex]
version = "0.4"
[dev-dependencies.saphyr]
version = "0.0.12"
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies.js-sys]
version = "0.3"
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dev-dependencies.wasm-bindgen-test]
version = "0.3"
[target.'cfg(not(all(target_arch = "wasm32", target_os = "unknown")))'.dev-dependencies]
[profile.dev]
opt-level = 1
panic = "unwind"
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
panic = "unwind"