On 10/7/19 4:12 PM, Nick Rosbrook wrote: > From: Nick Rosbrook <rosbro...@ainfosec.com> > > Define Mac as [6]byte and implement fromC, toC, and String functions. > > Signed-off-by: Nick Rosbrook <rosbro...@ainfosec.com> > --- > Cc: George Dunlap <george.dun...@citrix.com> > Cc: Ian Jackson <ian.jack...@eu.citrix.com> > Cc: Wei Liu <w...@xen.org> > > 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 Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel