Skip to main content

linux_uapi/
manual.rs

1// Copyright 2024 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use 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}