1
0
mirror of https://github.com/google/uuid.git synced 2025-07-03 00:56:49 +02:00

Change a UUID from []byte to [16]byte along with other API changes.

This commit is contained in:
Paul Borman
2016-02-19 12:30:25 -08:00
parent 82d3e379a2
commit 9e951e1b07
18 changed files with 401 additions and 359 deletions

48
node.go
View File

@ -1,4 +1,4 @@
// Copyright 2011 Google Inc. All rights reserved.
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@ -13,7 +13,8 @@ var (
nodeMu sync.Mutex
interfaces []net.Interface // cached list of interfaces
ifname string // name of interface being used
nodeID []byte // hardware for version 1 UUIDs
nodeID [6]byte // hardware for version 1 UUIDs
zeroID [6]byte // nodeID with only 0's
)
// NodeInterface returns the name of the interface from which the NodeID was
@ -48,10 +49,9 @@ func setNodeInterface(name string) bool {
for _, ifs := range interfaces {
if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) {
if setNodeID(ifs.HardwareAddr) {
ifname = ifs.Name
return true
}
copy(nodeID[:], ifs.HardwareAddr)
ifname = ifs.Name
return true
}
}
@ -59,10 +59,7 @@ func setNodeInterface(name string) bool {
// does not specify a specific interface generate a random Node ID
// (section 4.1.6)
if name == "" {
if nodeID == nil {
nodeID = make([]byte, 6)
}
randomBits(nodeID)
randomBits(nodeID[:])
return true
}
return false
@ -73,35 +70,24 @@ func setNodeInterface(name string) bool {
func NodeID() []byte {
defer nodeMu.Unlock()
nodeMu.Lock()
if nodeID == nil {
if nodeID == zeroID {
setNodeInterface("")
}
nid := make([]byte, 6)
copy(nid, nodeID)
return nid
nid := nodeID
return nid[:]
}
// SetNodeID sets the Node ID to be used for Version 1 UUIDs. The first 6 bytes
// of id are used. If id is less than 6 bytes then false is returned and the
// Node ID is not set.
func SetNodeID(id []byte) bool {
defer nodeMu.Unlock()
nodeMu.Lock()
if setNodeID(id) {
ifname = "user"
return true
}
return false
}
func setNodeID(id []byte) bool {
if len(id) < 6 {
return false
}
if nodeID == nil {
nodeID = make([]byte, 6)
}
copy(nodeID, id)
defer nodeMu.Unlock()
nodeMu.Lock()
copy(nodeID[:], id)
ifname = "user"
return true
}
@ -111,7 +97,7 @@ func (uuid UUID) NodeID() []byte {
if len(uuid) != 16 {
return nil
}
node := make([]byte, 6)
copy(node, uuid[10:])
return node
var node [6]byte
copy(node[:], uuid[10:])
return node[:]
}