diff mbox series

[17/24] rust/qemu-api: Use device_class_set_props_n

Message ID 20241216035109.3486070-18-richard.henderson@linaro.org
State New
Headers show
Series More Property cleanups | expand

Commit Message

Richard Henderson Dec. 16, 2024, 3:51 a.m. UTC
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(-)

Comments

Paolo Bonzini Dec. 16, 2024, 2:34 p.m. UTC | #1
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 mbox series

Patch

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,
         ];
     };
 }