mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
rust/qemu-api: Use device_class_set_props_n
This means we can update declare_properties to drop the zero terminator at the end of the array as well. Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Tested-by: Lei Yang <leiyang@redhat.com> Link: https://lore.kernel.org/r/20241218134251.4724-18-richard.henderson@linaro.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
662cede910
commit
5f99764869
1 changed files with 6 additions and 5 deletions
|
@ -7,7 +7,6 @@ use std::{ffi::CStr, os::raw::c_void};
|
||||||
use crate::{
|
use crate::{
|
||||||
bindings::{self, DeviceClass, DeviceState, Error, ObjectClass, Property, VMStateDescription},
|
bindings::{self, DeviceClass, DeviceState, Error, ObjectClass, Property, VMStateDescription},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
zeroable::Zeroable,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Trait providing the contents of [`DeviceClass`].
|
/// Trait providing the contents of [`DeviceClass`].
|
||||||
|
@ -31,7 +30,7 @@ pub trait DeviceImpl {
|
||||||
/// device. Not a `const` because referencing statics in constants
|
/// device. Not a `const` because referencing statics in constants
|
||||||
/// is unstable until Rust 1.83.0.
|
/// is unstable until Rust 1.83.0.
|
||||||
fn properties() -> &'static [Property] {
|
fn properties() -> &'static [Property] {
|
||||||
&[Zeroable::ZERO; 1]
|
&[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A `VMStateDescription` providing the migration format for the device
|
/// A `VMStateDescription` providing the migration format for the device
|
||||||
|
@ -87,7 +86,10 @@ pub unsafe extern "C" fn rust_device_class_init<T: DeviceImpl>(
|
||||||
if let Some(vmsd) = <T as DeviceImpl>::vmsd() {
|
if let Some(vmsd) = <T as DeviceImpl>::vmsd() {
|
||||||
dc.vmsd = vmsd;
|
dc.vmsd = vmsd;
|
||||||
}
|
}
|
||||||
bindings::device_class_set_props(dc, <T as DeviceImpl>::properties().as_ptr());
|
let prop = <T as DeviceImpl>::properties();
|
||||||
|
if !prop.is_empty() {
|
||||||
|
bindings::device_class_set_props_n(dc, prop.as_ptr(), prop.len());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +136,7 @@ macro_rules! define_property {
|
||||||
macro_rules! declare_properties {
|
macro_rules! declare_properties {
|
||||||
($ident:ident, $($prop:expr),*$(,)*) => {
|
($ident:ident, $($prop:expr),*$(,)*) => {
|
||||||
pub static $ident: [$crate::bindings::Property; {
|
pub static $ident: [$crate::bindings::Property; {
|
||||||
let mut len = 1;
|
let mut len = 0;
|
||||||
$({
|
$({
|
||||||
_ = stringify!($prop);
|
_ = stringify!($prop);
|
||||||
len += 1;
|
len += 1;
|
||||||
|
@ -142,7 +144,6 @@ macro_rules! declare_properties {
|
||||||
len
|
len
|
||||||
}] = [
|
}] = [
|
||||||
$($prop),*,
|
$($prop),*,
|
||||||
$crate::zeroable::Zeroable::ZERO,
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue