Message ID | 20241216035109.3486070-18-richard.henderson@linaro.org |
---|---|
State | New |
Headers | show |
Series | More Property cleanups | expand |
On Mon, Dec 16, 2024 at 4:54 AM Richard Henderson <richard.henderson@linaro.org> wrote: > This means we can update declare_properties to drop the > zero terminator at the end of the array as well. > > Cc: qemu-rust@nongnu.org > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> > --- > rust/qemu-api/src/device_class.rs | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/rust/qemu-api/src/device_class.rs b/rust/qemu-api/src/device_class.rs > index 03d03feee8..cca51fe1a9 100644 > --- a/rust/qemu-api/src/device_class.rs > +++ b/rust/qemu-api/src/device_class.rs > @@ -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.len() != 0 { > + 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, > ]; > }; > } > -- > 2.43.0 > >
diff --git a/rust/qemu-api/src/device_class.rs b/rust/qemu-api/src/device_class.rs index 03d03feee8..cca51fe1a9 100644 --- a/rust/qemu-api/src/device_class.rs +++ b/rust/qemu-api/src/device_class.rs @@ -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.len() != 0 { + 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, ]; }; }
This means we can update declare_properties to drop the zero terminator at the end of the array as well. Cc: qemu-rust@nongnu.org Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- rust/qemu-api/src/device_class.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)