[Libguestfs] [libnbd PATCH 1/3] generator: Introduce REnum/RFlags return types

Eric Blake eblake at redhat.com
Mon Sep 7 14:38:15 UTC 2020


On 9/7/20 9:13 AM, Richard W.M. Jones wrote:

>> +++ b/generator/C.ml
>> @@ -66,15 +66,15 @@ let errcode_of_ret =
>>     function
>>     | RBool | RErr | RFd | RInt | RInt64 | RCookie -> Some "-1"
>>     | RStaticString | RString -> Some "NULL"
>> -  | RUInt -> None (* errors not possible *)
>> +  | RUInt | REnum (_) | RFlags (_) -> None (* errors not possible *)
>>
>>   let type_of_ret =
>>     function
>> -  | RBool | RErr | RFd | RInt -> "int"
>> +  | RBool | RErr | RFd | RInt | REnum (_) -> "int"
> 
> This is good because Enum is passed as int.
> 
>> [...]
> 
> You used unsigned for RFlags, but shouldn't it be this instead?
> 
> +  | RFlags (_) -> "uint32_t"

Hmm.  For Flags as input, we take uint32_t, but for get_handshake_flags 
which used to return RUint, we returned unsigned; as written, my patch 
preserved generated code in its entirety.  Changing it to return 
uint32_t makes sense, but is a minor API change.  Fortunately, it would 
not be an ABI change on any of the platforms we compile on.  So I can go 
ahead and return the smarter type unless we have a strong reason not to 
(the API change might affect anyone that was storing a function pointer 
to nbd_get_handshake_flags, and more so in C++ than C).

> 
> The rest of the patch looks fine.
> 
> Rich.
> 

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org




More information about the Libguestfs mailing list