82 lines
2.9 KiB
Diff
82 lines
2.9 KiB
Diff
|
|
From 241471ed8d54b769831fc383075233df967a897a Mon Sep 17 00:00:00 2001
|
||
|
|
From: chenjiayi <chenjiayi22@huawei.com>
|
||
|
|
Date: Wed, 8 Nov 2023 02:09:09 +0800
|
||
|
|
Subject: [PATCH 045/103] fix(basic): complete feature dependencies
|
||
|
|
|
||
|
|
uuid depends on random.
|
||
|
|
|
||
|
|
random depends on io.
|
||
|
|
|
||
|
|
Also add get_errno method for basic Error.
|
||
|
|
---
|
||
|
|
libs/basic/Cargo.toml | 4 ++--
|
||
|
|
libs/basic/src/error.rs | 36 ++++++++++++++++++++++++++++++++++++
|
||
|
|
2 files changed, 38 insertions(+), 2 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/libs/basic/Cargo.toml b/libs/basic/Cargo.toml
|
||
|
|
index f7c84157..654c1a3b 100644
|
||
|
|
--- a/libs/basic/Cargo.toml
|
||
|
|
+++ b/libs/basic/Cargo.toml
|
||
|
|
@@ -111,9 +111,9 @@ string = []
|
||
|
|
sysfs = ["nix/dir"]
|
||
|
|
unistd = ["nix/user"]
|
||
|
|
unit_name = []
|
||
|
|
-uuid = ["bitflags"]
|
||
|
|
+uuid = ["bitflags", "random"]
|
||
|
|
murmurhash2 = []
|
||
|
|
strbuf = []
|
||
|
|
argv = []
|
||
|
|
exec_util = []
|
||
|
|
-random = []
|
||
|
|
+random = ["io"]
|
||
|
|
diff --git a/libs/basic/src/error.rs b/libs/basic/src/error.rs
|
||
|
|
index aead8ce7..d138f477 100644
|
||
|
|
--- a/libs/basic/src/error.rs
|
||
|
|
+++ b/libs/basic/src/error.rs
|
||
|
|
@@ -70,6 +70,42 @@ pub enum Error {
|
||
|
|
Other { msg: String },
|
||
|
|
}
|
||
|
|
|
||
|
|
+impl Error {
|
||
|
|
+ /// Translate the basic error to error number.
|
||
|
|
+ pub fn get_errno(&self) -> i32 {
|
||
|
|
+ match self {
|
||
|
|
+ Self::Syscall {
|
||
|
|
+ syscall: _,
|
||
|
|
+ ret: _,
|
||
|
|
+ errno,
|
||
|
|
+ } => *errno,
|
||
|
|
+ Error::Io { source } => source.raw_os_error().unwrap_or_default(),
|
||
|
|
+ Error::Caps { what: _ } => nix::errno::Errno::EINVAL as i32,
|
||
|
|
+ Error::Nix { source } => *source as i32,
|
||
|
|
+ Error::Var { source } => {
|
||
|
|
+ (match source {
|
||
|
|
+ std::env::VarError::NotPresent => nix::errno::Errno::ENOENT,
|
||
|
|
+ std::env::VarError::NotUnicode(_) => nix::errno::Errno::EINVAL,
|
||
|
|
+ }) as i32
|
||
|
|
+ }
|
||
|
|
+ Error::Proc { source } => match source {
|
||
|
|
+ procfs::ProcError::Incomplete(_) => nix::errno::Errno::EINVAL as i32,
|
||
|
|
+ procfs::ProcError::PermissionDenied(_) => nix::errno::Errno::EPERM as i32,
|
||
|
|
+ procfs::ProcError::NotFound(_) => nix::errno::Errno::ENOENT as i32,
|
||
|
|
+ procfs::ProcError::Io(_, _) => nix::errno::Errno::EIO as i32,
|
||
|
|
+ procfs::ProcError::Other(_) => nix::errno::Errno::EINVAL as i32,
|
||
|
|
+ procfs::ProcError::InternalError(_) => nix::errno::Errno::EINVAL as i32,
|
||
|
|
+ },
|
||
|
|
+ Error::NulError { source: _ } => nix::errno::Errno::EINVAL as i32,
|
||
|
|
+ Error::Parse { source: _ } => nix::errno::Errno::EINVAL as i32,
|
||
|
|
+ Error::ParseNamingScheme { what: _ } => nix::errno::Errno::EINVAL as i32,
|
||
|
|
+ Error::NotExisted { what: _ } => nix::errno::Errno::ENOENT as i32,
|
||
|
|
+ Error::Invalid { what: _ } => nix::errno::Errno::EINVAL as i32,
|
||
|
|
+ Error::Other { msg: _ } => nix::errno::Errno::EINVAL as i32,
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+}
|
||
|
|
+
|
||
|
|
#[allow(unused_macros)]
|
||
|
|
macro_rules! errfrom {
|
||
|
|
($($st:ty),* => $variant:ident) => (
|
||
|
|
--
|
||
|
|
2.33.0
|
||
|
|
|