|
@@ -7,7 +7,6 @@
|
|
|
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 @@ fn vmsd() -> Option<&'static VMStateDescription> {
|
|
|
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,
|
|
|
];
|
|
|
};
|
|
|
}
|