Wrap access to errno, for use in the block layer and character device bindings.
This first version of errno.rs focuses on io::Result. Kevin suggested allowing conversion from io::Error to negative errno. For now, I'd rather avoid that to encourage separation between code that can propagate errors simply with "?", and code at the Rust/C boundary that needs errno::into_neg_errno(). Since Rust code rarely passes or returns Error objects that aren't part of a Result, it is plausible that the same is true of QEMU. However, if this turns out to be wrong, then it can be changed. Paolo Supersedes: <[email protected]> v2->v3: - add libc to subprojects/.gitignore - change subject to reflect the focus to be Result rather than Error - fix docs v1->v2: - use the libc crate - provide separate From<Errno> implementation for io::ErrorKind - hide GetErrno trait inside a submodule - add into_neg_errno() and corresponding tests - add more doctests - make Errno field public, so that Errno can have other From<...> implementations (e.g. going from *mut Error to Errno). Paolo Bonzini (2): rust: subprojects: add libc crate rust: add module to convert between success/-errno and io::Result docs/devel/rust.rst | 1 + rust/Cargo.lock | 7 + rust/qemu-api/Cargo.toml | 1 + rust/qemu-api/meson.build | 4 + rust/qemu-api/src/assertions.rs | 28 ++ rust/qemu-api/src/errno.rs | 343 ++++++++++++++++++ rust/qemu-api/src/lib.rs | 1 + rust/qemu-api/src/prelude.rs | 2 + scripts/archive-source.sh | 2 +- scripts/make-release | 2 +- subprojects/.gitignore | 1 + subprojects/libc-0.2-rs.wrap | 7 + .../packagefiles/libc-0.2-rs/meson.build | 37 ++ 13 files changed, 434 insertions(+), 2 deletions(-) create mode 100644 rust/qemu-api/src/errno.rs create mode 100644 subprojects/libc-0.2-rs.wrap create mode 100644 subprojects/packagefiles/libc-0.2-rs/meson.build -- 2.48.1
