mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 04:55:31 +00:00
logtail: reduce PublicID.UnmarshalText from 2 allocs to 0
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
bb0710d51d
commit
b34fbb24e8
@ -121,14 +121,17 @@ func (id PublicID) MarshalText() ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (id *PublicID) UnmarshalText(s []byte) error {
|
func (id *PublicID) UnmarshalText(s []byte) error {
|
||||||
b, err := hex.DecodeString(string(s))
|
if len(s) != len(id)*2 {
|
||||||
if err != nil {
|
return fmt.Errorf("logtail.PublicID.UnmarshalText: invalid hex length: %d", len(s))
|
||||||
return fmt.Errorf("logtail.PublicID.UnmarshalText: %v", err)
|
|
||||||
}
|
}
|
||||||
if len(b) != len(id) {
|
for i := range id {
|
||||||
return fmt.Errorf("logtail.PublicID.UnmarshalText: invalid hex length: %d", len(b))
|
a, ok1 := fromHexChar(s[i*2+0])
|
||||||
|
b, ok2 := fromHexChar(s[i*2+1])
|
||||||
|
if !ok1 || !ok2 {
|
||||||
|
return errors.New("invalid hex character")
|
||||||
|
}
|
||||||
|
id[i] = (a << 4) | b
|
||||||
}
|
}
|
||||||
copy(id[:], b)
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,3 +303,26 @@ func TestParseAndRemoveLogLevel(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPublicIDUnmarshalText(t *testing.T) {
|
||||||
|
const hexStr = "6c60a9e0e7af57170bb1347b2d477e4cbc27d4571a4923b21651456f931e3d55"
|
||||||
|
x := []byte(hexStr)
|
||||||
|
|
||||||
|
var id PublicID
|
||||||
|
if err := id.UnmarshalText(x); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if id.String() != hexStr {
|
||||||
|
t.Errorf("String = %q; want %q", id.String(), hexStr)
|
||||||
|
}
|
||||||
|
|
||||||
|
n := int(testing.AllocsPerRun(1000, func() {
|
||||||
|
var id PublicID
|
||||||
|
if err := id.UnmarshalText(x); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
if n != 0 {
|
||||||
|
t.Errorf("allocs = %v; want 0", n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user