starnix_syscalls/
syscall_result.rs

1// Copyright 2021 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 starnix_uapi::file_lease::FileLeaseType;
6use starnix_uapi::file_mode::FileMode;
7use starnix_uapi::open_flags::OpenFlags;
8use starnix_uapi::seal_flags::SealFlags;
9use starnix_uapi::signals::Signal;
10use starnix_uapi::user_address::UserAddress;
11
12#[derive(Eq, PartialEq, Debug)]
13pub struct SyscallResult(u64);
14pub const SUCCESS: SyscallResult = SyscallResult(0);
15
16impl SyscallResult {
17    pub fn value(&self) -> u64 {
18        self.0
19    }
20}
21
22impl From<UserAddress> for SyscallResult {
23    fn from(value: UserAddress) -> Self {
24        SyscallResult(value.ptr() as u64)
25    }
26}
27
28impl From<FileMode> for SyscallResult {
29    fn from(value: FileMode) -> Self {
30        SyscallResult(value.bits() as u64)
31    }
32}
33
34impl From<SealFlags> for SyscallResult {
35    fn from(value: SealFlags) -> Self {
36        SyscallResult(value.bits() as u64)
37    }
38}
39
40impl From<OpenFlags> for SyscallResult {
41    fn from(value: OpenFlags) -> Self {
42        SyscallResult(value.bits() as u64)
43    }
44}
45
46impl From<Signal> for SyscallResult {
47    fn from(value: Signal) -> Self {
48        SyscallResult(value.number() as u64)
49    }
50}
51
52impl From<FileLeaseType> for SyscallResult {
53    fn from(value: FileLeaseType) -> Self {
54        SyscallResult(value.bits() as u64)
55    }
56}
57
58impl From<bool> for SyscallResult {
59    fn from(value: bool) -> Self {
60        #[allow(clippy::bool_to_int_with_if)]
61        SyscallResult(if value { 1 } else { 0 })
62    }
63}
64
65impl From<u8> for SyscallResult {
66    fn from(value: u8) -> Self {
67        SyscallResult(value as u64)
68    }
69}
70
71impl From<i32> for SyscallResult {
72    fn from(value: i32) -> Self {
73        SyscallResult(value as u64)
74    }
75}
76
77impl From<u32> for SyscallResult {
78    fn from(value: u32) -> Self {
79        SyscallResult(value as u64)
80    }
81}
82
83impl From<i64> for SyscallResult {
84    fn from(value: i64) -> Self {
85        SyscallResult(value as u64)
86    }
87}
88
89impl From<u64> for SyscallResult {
90    fn from(value: u64) -> Self {
91        SyscallResult(value)
92    }
93}
94
95impl From<usize> for SyscallResult {
96    fn from(value: usize) -> Self {
97        SyscallResult(value as u64)
98    }
99}
100
101impl From<()> for SyscallResult {
102    fn from(_value: ()) -> Self {
103        SyscallResult(0)
104    }
105}