1use std::io;
2
3use crate::IoctlFlags;
4use nix::errno::Errno;
5use thiserror::Error;
6
7pub type Result<T> = std::result::Result<T, Error>;
8
9#[derive(Debug, Error)]
16pub enum Error {
17 #[error("Copy failed")]
19 CopyFailed(Errno),
20
21 #[error("Copy partially succeeded")]
23 PartiallyCopied(usize),
24
25 #[error("Incomplete uffd_msg; read only {read}/{expected} bytes")]
27 IncompleteMsg { read: usize, expected: usize },
28
29 #[error("System error")]
31 SystemError(#[source] nix::Error),
32
33 #[error("EOF when reading file descriptor")]
35 ReadEof,
36
37 #[error("Unrecognized event in uffd_msg: {0}")]
39 UnrecognizedEvent(u8),
40
41 #[error("Requested ioctls unsupported; supported: {0:?}")]
43 UnsupportedIoctls(IoctlFlags),
44
45 #[error("Zeropage failed: {0}")]
47 ZeropageFailed(Errno),
48
49 #[error("Error accessing /dev/userfaultfd: {0}")]
51 OpenDevUserfaultfd(io::Error),
52}
53
54impl From<nix::Error> for Error {
55 fn from(e: nix::Error) -> Error {
56 Error::SystemError(e)
57 }
58}