|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] golang/xenlight: Fix handling of marshalling of empty elements for keyed unions
> Keyed types in libxl_types.idl can have elements of type 'None'. The
> golang type generator (correctly) don't implement any union types for
> these empty elements. However, the toC and fromC helper generators
> incorrectly treat these elements as invalid.
>
> Consider for example, libxl_channelinfo. The idl contains the
> following keyed element:
>
> ("u", KeyedUnion(None, libxl_channel_connection, "connection",
> [("unknown", None),
> ("pty", Struct(None, [("path", string),])),
> ("socket", None),
> ])),
>
> But the toC marshaller currently looks like this:
>
> switch x.Connection {
> case ChannelConnectionPty:
> tmp, ok := x.ConnectionUnion.(ChannelinfoConnectionUnionPty)
> if !ok {
> return errors.New("wrong type for union key
> connection")
> }
> var pty C.libxl_channelinfo_connection_union_pty
> if tmp.Path != "" {
> pty.path = C.CString(tmp.Path)
> }
> ptyBytes := C.GoBytes(unsafe.Pointer(&pty),
> C.sizeof_libxl_channelinfo_connection_union_pty)
> copy(xc.u[:], ptyBytes)
> default:
> return fmt.Errorf("invalid union key '%v'", x.Connection)
> }
>
> Which means toC() will fail for ChannelConnectionUnknown or
> ChannelConnectionSocket.
>
> Modify the generator to handle keyed union elements of type 'None'.
> For fromC, set the value to 'nil'; for toC, leave things as-is.
>
> Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxx>
Reviewed-by: Nick Rosbrook <rosbrookn@xxxxxxxxxxxx>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |