mod default {
use crate::bindings::*;
impl Default for btrfs_ioctl_search_key {
fn default() -> Self {
Self {
tree_id: BTRFS_ROOT_TREE_OBJECTID,
min_objectid: u64::MIN,
max_objectid: u64::MAX,
min_offset: u64::MIN,
max_offset: u64::MAX,
min_transid: u64::MIN,
max_transid: u64::MAX,
min_type: u32::MIN,
max_type: u32::MAX,
nr_items: BTRFS_SEARCH_ARGS_BUFSIZE as u32,
unused: 0,
unused1: 0,
unused2: 0,
unused3: 0,
unused4: 0,
}
}
}
macro_rules! impl_default {
($( $btrfs_ioctl_args:ty ),+) => [$(
impl Default for $btrfs_ioctl_args {
#[doc = stringify!(Returns $btrfs_ioctl_args with all fields initialized to zero)]
fn default() -> Self {
unsafe {
::std::mem::zeroed()
}
}
}
)+]
}
impl_default![
btrfs_ioctl_vol_args,
btrfs_ioctl_clone_range_args,
btrfs_ioctl_defrag_range_args,
btrfs_ioctl_search_args,
btrfs_ioctl_search_args_v2,
btrfs_ioctl_ino_lookup_args,
btrfs_ioctl_space_args,
btrfs_ioctl_vol_args_v2,
btrfs_ioctl_scrub_args,
btrfs_ioctl_dev_info_args,
btrfs_ioctl_fs_info_args,
btrfs_ioctl_balance_args,
btrfs_ioctl_ino_path_args,
btrfs_ioctl_logical_ino_args,
btrfs_ioctl_received_subvol_args,
btrfs_ioctl_send_args,
btrfs_ioctl_quota_ctl_args,
btrfs_ioctl_qgroup_assign_args,
btrfs_ioctl_qgroup_create_args,
btrfs_ioctl_qgroup_limit_args,
btrfs_ioctl_quota_rescan_args,
btrfs_ioctl_get_dev_stats,
btrfs_ioctl_dev_replace_args,
btrfs_ioctl_same_args,
btrfs_ioctl_feature_flags,
btrfs_ioctl_get_subvol_info_args,
btrfs_ioctl_get_subvol_rootref_args,
btrfs_ioctl_ino_lookup_user_args,
btrfs_ioctl_encoded_io_args
];
}
mod from {
use crate::bindings::*;
macro_rules! impl_from_c_chars {
($( $btrfs_search_item:ty ),+) => [$(
impl From<&[::libc::c_char]> for &$btrfs_search_item {
#[inline]
fn from(value: &[::libc::c_char]) -> Self {
::std::debug_assert!(value.len() >= ::std::mem::size_of::<$btrfs_search_item>());
unsafe { &*(value as *const _ as *const $btrfs_search_item) }
}
}
)+]
}
#[cfg(VERSION_6_2)]
impl_from_c_chars![
btrfs_header,
btrfs_item,
btrfs_key_ptr,
btrfs_leaf,
btrfs_node,
btrfs_root_backup,
btrfs_super_block
];
impl_from_c_chars![
btrfs_disk_key,
btrfs_key,
btrfs_dev_item,
btrfs_stripe,
btrfs_chunk,
btrfs_free_space_entry,
btrfs_free_space_header,
btrfs_extent_item,
btrfs_extent_item_v0,
btrfs_tree_block_info,
btrfs_extent_data_ref,
btrfs_shared_data_ref,
btrfs_extent_inline_ref,
btrfs_dev_extent,
btrfs_inode_ref,
btrfs_inode_extref,
btrfs_timespec,
btrfs_inode_item,
btrfs_dir_log_item,
btrfs_dir_item,
btrfs_root_item,
btrfs_root_ref,
btrfs_disk_balance_args,
btrfs_balance_item,
btrfs_file_extent_item,
btrfs_csum_item,
btrfs_dev_stats_item,
btrfs_dev_replace_item,
btrfs_block_group_item,
btrfs_free_space_info,
btrfs_qgroup_status_item,
btrfs_qgroup_info_item,
btrfs_qgroup_limit_item,
btrfs_verity_descriptor_item
];
}
#[cfg(feature = "debug")]
mod debug {
use crate::*;
use std::fmt::{self, Debug, Formatter};
impl Debug for subvol::SubvolInfo {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.debug_struct("SubvolInfo")
.field("treeid", &self.treeid())
.field("name", &self.name_as_str())
.field("parent_id", &self.parent_id())
.field("dirid", &self.dirid())
.field("generation", &self.generation())
.field("flags", &self.flags())
.field("uuid", &self.uuid())
.field("parend_uuid", &self.parent_uuid())
.field("received_uuid", &self.received_uuid())
.field("ctransid", &self.ctransid())
.field("otransid", &self.otransid())
.field("stransid", &self.stransid())
.field("rtransid", &self.rtransid())
.field(
"ctime",
&format_args!(
"{{ sec: {}, nsec: {} }}",
&self.ctime().sec,
&self.ctime().nsec
),
)
.field(
"otime",
&format_args!(
"{{ sec: {}, nsec: {} }}",
&self.otime().sec,
&self.otime().nsec
),
)
.field(
"stime",
&format_args!(
"{{ sec: {}, nsec: {} }}",
&self.stime().sec,
&self.stime().nsec
),
)
.field(
"rtime",
&format_args!(
"{{ sec: {}, nsec: {} }}",
&self.rtime().sec,
&self.rtime().nsec
),
)
.finish()
}
}
impl Debug for fs::FsInfo {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.debug_struct("FsInfo")
.field("max_id", &self.max_id())
.field("num_devices", &self.num_devices())
.field("fsid", &self.fsid())
.field("nodesize", &self.nodesize())
.field("sectorsize", &self.sectorsize())
.field("clone_alignment", &self.clone_alignment())
.finish()
}
}
impl Debug for fs::SpaceInfo {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.debug_struct("SpaceInfo")
.field("block_type", &self.block_type())
.field("raid_profile", &self.raid_profile().map(|v| v.upper_name))
.field("used_bytes", &self.used_bytes())
.field("total_bytes", &self.total_bytes())
.finish()
}
}
impl Debug for crate::tree_search::SearchItem<'_> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.debug_struct("SearchItem")
.field("header_type", &self.item_type())
.field("offset", &self.offset())
.finish()
}
}
}