mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 14:53:54 -06:00
rust: qemu-api: add bindings to Error
Provide an implementation of std::error::Error that bridges the Rust anyhow::Error and std::panic::Location types with QEMU's Error*. It also has several utility methods, analogous to error_propagate(), that convert a Result into a return value + Error** pair. One important difference is that these propagation methods *panic* if *errp is NULL, unlike error_propagate() which eats subsequent errors[1]. The reason for this is that in C you have an error_set*() call at the site where the error is created, and calls to error_propagate() are relatively rare. In Rust instead, even though these functions do "propagate" a qemu_api::Error into a C Error**, there is no error_setg() anywhere that could check for non-NULL errp and call abort(). error_propagate()'s behavior of ignoring subsequent errors is generally considered weird, and there would be a bigger risk of triggering it from Rust code. [1] This is actually a violation of the preconditions of error_propagate(), so it should not happen. But you never know... Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
e8fb9c91a3
commit
b4ff3cf34f
7 changed files with 341 additions and 0 deletions
|
@ -96,6 +96,11 @@ are missing:
|
|||
architecture (VMState). Right now, VMState lacks type safety because
|
||||
it is hard to place the ``VMStateField`` definitions in traits.
|
||||
|
||||
* NUL-terminated file names with ``#[track_caller]`` are scheduled for
|
||||
inclusion as ``#![feature(location_file_nul)]``, but it will be a while
|
||||
before QEMU can use them. For now, there is special code in
|
||||
``util/error.c`` to support non-NUL-terminated file names.
|
||||
|
||||
* associated const equality would be nice to have for some users of
|
||||
``callbacks::FnCall``, but is still experimental. ``ASSERT_IS_SOME``
|
||||
replaces it.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue