1use crate::{__IncompleteArrayField, __u8, __u32};
6use zerocopy::{FromBytes, FromZeros, Immutable, IntoBytes, KnownLayout};
7
8#[repr(C)]
9#[derive(Copy, Clone, FromBytes, Immutable, KnownLayout, IntoBytes)]
10pub struct fscrypt_key_specifier {
11 pub type_: __u32,
12 pub __reserved: __u32,
13 pub u: fscrypt_key_specifier__bindgen_ty_1,
14}
15
16#[repr(C)]
17#[derive(Copy, Clone, FromBytes, Immutable, KnownLayout, IntoBytes)]
18pub union fscrypt_key_specifier__bindgen_ty_1 {
19 pub __reserved: [__u8; 32usize],
20 pub descriptor: fscrypt_descriptor,
21 pub identifier: fscrypt_identifier,
22}
23
24#[repr(C)]
25#[derive(Copy, Clone, Default, FromBytes, Immutable, KnownLayout, IntoBytes)]
26pub struct fscrypt_descriptor {
27 pub value: [__u8; 8usize],
28 pub __bindgen_padding_0: [u8; 24usize],
29}
30
31#[repr(C)]
32#[derive(Copy, Clone, Default, FromBytes, Immutable, KnownLayout, IntoBytes)]
33pub struct fscrypt_identifier {
34 pub value: [__u8; 16usize],
35 pub __bindgen_padding_0: [u8; 16usize],
36}
37
38impl Default for fscrypt_key_specifier__bindgen_ty_1 {
39 fn default() -> Self {
40 Self::new_zeroed()
41 }
42}
43impl Default for fscrypt_key_specifier {
44 fn default() -> Self {
45 Self::new_zeroed()
46 }
47}
48
49#[repr(C)]
50#[derive(Clone, FromBytes, Immutable, KnownLayout, IntoBytes)]
51pub struct fscrypt_add_key_arg {
52 pub key_spec: fscrypt_key_specifier,
53 pub raw_size: __u32,
54 pub key_id: __u32,
55 pub __reserved: [__u32; 7usize],
56 pub __flags: __u32,
57 pub raw: __IncompleteArrayField<__u8>,
58}
59impl Default for fscrypt_add_key_arg {
60 fn default() -> Self {
61 Self::new_zeroed()
62 }
63}
64
65crate::check_same_layout! {
66 crate::statfs64 = crate::statfs {
67 f_type => f_type,
68 f_bsize => f_bsize,
69 f_blocks => f_blocks,
70 f_bfree => f_bfree,
71 f_bavail => f_bavail,
72 f_files => f_files,
73 f_ffree => f_ffree,
74 f_fsid => f_fsid,
75 f_namelen => f_namelen,
76 f_frsize => f_frsize,
77 f_flags => f_flags,
78 }
79}
80
81macro_rules! impl_debug {
82 {} => {};
83 {
84 ,
85 $($token:tt)*
86 } => {
87 impl_debug! { $($token)* }
88 };
89 {
90 $name:ident
91 $($token:tt)*
92 } => {
93 impl std::fmt::Debug for crate::$name {
94 fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
95 fmt.debug_struct(std::any::type_name::<Self>()).finish()
96 }
97 }
98 #[cfg(target_arch = "aarch64")]
99 impl std::fmt::Debug for crate::arch32::$name {
100 fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
101 fmt.debug_struct(std::any::type_name::<Self>()).finish()
102 }
103 }
104 impl_debug! { $($token)* }
105 };
106}
107
108impl_debug! {
109 fuse_open_out__bindgen_ty_1,
110 fuse_in_header__bindgen_ty_1,
111}
112
113#[cfg(test)]
114mod tests {
115 use super::*;
116
117 #[test]
118 fn fscrypt_defaults_are_zeroed() {
119 assert!(fscrypt_key_specifier__bindgen_ty_1::default().as_bytes().iter().all(|&b| b == 0));
120 assert!(fscrypt_key_specifier::default().as_bytes().iter().all(|&b| b == 0));
121 assert!(fscrypt_add_key_arg::default().as_bytes().iter().all(|&b| b == 0));
122 }
123}