Re: [PATCH v2 01/16] rust/qobject: add basic bindings

Paolo Bonzini <[email protected]> Wed, 25 Feb 2026 09:05:20 +0100
Newsgroups org.nongnu.qemu-rust,org.nongnu.qemu-devel
Message-ID <[email protected]>
On 2/24/26 14:33, Markus Armbruster wrote:
> Paolo Bonzini <[email protected]> writes:
> 
>> On 2/24/26 11:03, Markus Armbruster wrote:
>>>> diff --git a/rust/util/wrapper.h b/rust/util/wrapper.h
>>>> index b9ed68a01d8..0907dd59142 100644
>>>> --- a/rust/util/wrapper.h
>>>> +++ b/rust/util/wrapper.h
>>>> @@ -30,3 +30,10 @@ typedef enum memory_order {
>>>>   #include "qemu/log.h"
>>>>   #include "qemu/module.h"
>>>>   #include "qemu/timer.h"
>>>> +#include "qobject/qnull.h"
>>>> +#include "qobject/qbool.h"
>>>> +#include "qobject/qnum.h"
>>>> +#include "qobject/qstring.h"
>>>> +#include "qobject/qobject.h"
>>>> +#include "qobject/qlist.h"
>>>> +#include "qobject/qdict.h"
>>>
>>> Is this file just for bindgen, and never actually fed to the C compiler?
>>
>> Yes.
> 
> Thanks!
> 
>>>> +impl From<()> for QObject {
>>>> +    fn from(_null: ()) -> Self {
>>>> +        // Conversion of the C inline `qnull` function
>>>> +        unsafe { QObject::cloned_from_base(addr_of!(bindings::qnull_.base)) }
>>>> +    }
>>>> +}
>>>
>>> Could we call C qnull() instead of using qnull_.base?
>>
>> See v1 review - no, because qnull() is inline.  I can make it not
>> inline, of course.
> 
> I feel making it inline was a bit silly.  Perhaps I had a non-silly
> reason back then, but I can't see it anymore.

Maybe it was, but qnull_ is also used by tests/unit/check-qnull.c; and 
it would also be silly to make qnull() extern while keeping the global 
qnull_.  In doubt, I'd leave it as is.

Paolo