On 10/7/19 4:12 PM, Nick Rosbrook wrote:
> From: Nick Rosbrook <[email protected]>
>
> Define Mac as [6]byte and implement fromC, toC, and String functions.
>
> Signed-off-by: Nick Rosbrook <[email protected]>
> ---
> Cc: George Dunlap <[email protected]>
> Cc: Ian Jackson <[email protected]>
> Cc: Wei Liu <[email protected]>
>
> tools/golang/xenlight/xenlight.go | 35 +++++++++++++++++++++++++++++++
> 1 file changed, 35 insertions(+)
>
> diff --git a/tools/golang/xenlight/xenlight.go
> b/tools/golang/xenlight/xenlight.go
> index a3a1836d31..3b7824b284 100644
> --- a/tools/golang/xenlight/xenlight.go
> +++ b/tools/golang/xenlight/xenlight.go
> @@ -181,6 +181,41 @@ func (d *Defbool) toC() (C.libxl_defbool, error) {
> return c, nil
> }
>
> +// Mac represents a libxl_mac, or simply a MAC address.
> +type Mac [6]byte
> +
> +// String formats a Mac address to string representation.
> +func (mac Mac) String() string {
> + s := "%x:%x:%x:%x:%x:%x"
> + opts := make([]interface{}, 6)
> +
> + for i, v := range mac {
> + opts[i] = v
> + }
What's the point of this?
I realize it's slightly annoying to have to type `mac[0], mac[1], ...`,
but I'd rather do that once than make the runtime copy everything over
into a slice of interfaces every String() call.
Also, I guess the format should be "%02x".
> +
> + return fmt.Sprintf(s, opts...)
> +}
> +
> +func (mac *Mac) fromC(cmac *C.libxl_mac) error {
> + b := (*[6]C.uint8_t)(unsafe.Pointer(cmac))
> +
> + for i, v := range b {
> + mac[i] = byte(v)
> + }
> +
> + return nil
> +}
> +
> +func (mac *Mac) toC() (C.libxl_mac, error) {
Conversely, shouldn't this be a value receiver, since we're don't want
this function to change the contents of mac?
Thanks,
-George
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel