aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2024-12-18 07:42:44 -0600
committerPaolo Bonzini <pbonzini@redhat.com>2024-12-19 19:35:25 +0100
commit5f9976486970b0fec50ff4c07da7af620cd7d0a0 (patch)
tree3610a7293d0abe97f985047e5f3d1fa826db5bcb
parent662cede910b68d52c7a6c6c972070784f241c0d1 (diff)
downloadqemu-5f9976486970b0fec50ff4c07da7af620cd7d0a0.zip
qemu-5f9976486970b0fec50ff4c07da7af620cd7d0a0.tar.gz
qemu-5f9976486970b0fec50ff4c07da7af620cd7d0a0.tar.bz2
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>
-rw-r--r--rust/qemu-api/src/device_class.rs11
1 files changed, 6 insertions, 5 deletions
diff --git a/rust/qemu-api/src/device_class.rs b/rust/qemu-api/src/device_class.rs
index 03d03fe..c98f0b2 100644
--- a/rust/qemu-api/src/device_class.rs
+++ b/rust/qemu-api/src/device_class.rs
@@ -7,7 +7,6 @@ use std::{ffi::CStr, os::raw::c_void};
use crate::{
bindings::{self, DeviceClass, DeviceState, Error, ObjectClass, Property, VMStateDescription},
prelude::*,
- zeroable::Zeroable,
};
/// Trait providing the contents of [`DeviceClass`].
@@ -31,7 +30,7 @@ pub trait DeviceImpl {
/// device. Not a `const` because referencing statics in constants
/// is unstable until Rust 1.83.0.
fn properties() -> &'static [Property] {
- &[Zeroable::ZERO; 1]
+ &[]
}
/// 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() {
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 {
($ident:ident, $($prop:expr),*$(,)*) => {
pub static $ident: [$crate::bindings::Property; {
- let mut len = 1;
+ let mut len = 0;
$({
_ = stringify!($prop);
len += 1;
@@ -142,7 +144,6 @@ macro_rules! declare_properties {
len
}] = [
$($prop),*,
- $crate::zeroable::Zeroable::ZERO,
];
};
}