mbox series

[v3,0/2] rust: add module to convert between success/-errno and io::Result conventions

Message ID 20250220113659.863332-1-pbonzini@redhat.com (mailing list archive)
Headers show
Series rust: add module to convert between success/-errno and io::Result conventions | expand

Message

Paolo Bonzini Feb. 20, 2025, 11:36 a.m. UTC
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: <20250212093958.3703269-1-pbonzini@redhat.com>

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