Mercurial > crates > systemd-socket
comparison src/error.rs @ 24:1941e9d9819c
Fix unsound manipulation of env vars
Modifying env vars in multi-threaded process is unsound but this crate
was neither checking the number of threads nor mark its functions as
`unsafe`. This change fixes it by both adding a check and adding an
`unsafe` function that can bypass that check if needed.
author | Martin Habovstiak <martin.habovstiak@gmail.com> |
---|---|
date | Fri, 28 Feb 2025 13:52:31 +0100 |
parents | f6334887e3c8 |
children | cfef4593e207 |
comparison
equal
deleted
inserted
replaced
23:729392c49b46 | 24:1941e9d9819c |
---|---|
2 //! | 2 //! |
3 //! This module separates the error types from root module to avoid clutter. | 3 //! This module separates the error types from root module to avoid clutter. |
4 | 4 |
5 | 5 |
6 use thiserror::Error; | 6 use thiserror::Error; |
7 use std::fmt; | |
7 use std::io; | 8 use std::io; |
9 | |
10 /// Error returned when the library initialization fails. | |
11 #[derive(Debug)] | |
12 pub struct InitError(pub(crate) InitErrorInner); | |
13 | |
14 #[cfg(all(target_os = "linux", feature = "enable_systemd"))] | |
15 type InitErrorInner = super::systemd_sockets::InitError; | |
16 | |
17 #[cfg(not(all(target_os = "linux", feature = "enable_systemd")))] | |
18 type InitErrorInner = std::convert::Infallible; | |
19 | |
20 impl fmt::Display for InitError { | |
21 #[inline] | |
22 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | |
23 fmt::Display::fmt(&self.0, f) | |
24 } | |
25 } | |
26 | |
27 impl std::error::Error for InitError { | |
28 #[inline] | |
29 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { | |
30 self.0.source() | |
31 } | |
32 } | |
8 | 33 |
9 /// Error that can occur during parsing of `SocketAddr` from a string | 34 /// Error that can occur during parsing of `SocketAddr` from a string |
10 /// | 35 /// |
11 /// This encapsulates possible errors that can occur when parsing the input. | 36 /// This encapsulates possible errors that can occur when parsing the input. |
12 /// It is currently opaque because the representation is not certain yet. | 37 /// It is currently opaque because the representation is not certain yet. |