Limit slice range

This commit is contained in:
Gregor Riepl 2021-05-05 23:35:49 +02:00
parent ddb626ac4f
commit 2ca9c28c5c

View file

@ -6,6 +6,22 @@ import (
"golang.org/x/text/encoding/charmap" "golang.org/x/text/encoding/charmap"
) )
// min returns the smaller of two integers {
func min(x, y int) int {
if x < y {
return x
}
return y
}
// max returns the larger of two integers {
func max(x, y int) int {
if x > y {
return x
}
return y
}
// encodeString encodes a Unicode string into a given charmap. // encodeString encodes a Unicode string into a given charmap.
// Unsupported characters are replaced by the default replacement symbol. // Unsupported characters are replaced by the default replacement symbol.
// Mysteriously, this functionality is missing from x/text/encoding. // Mysteriously, this functionality is missing from x/text/encoding.
@ -30,8 +46,8 @@ func (c *Can) DisplayWrite(line int, a []byte) error {
} }
// print in separate chunks, as one frame payload is limited to 7 bytes // print in separate chunks, as one frame payload is limited to 7 bytes
// the display has only 16 characters per line, so we truncate there // the display has only 16 characters per line, so we truncate there
for i := 0; i < len(a) && i < 16; i += 7 { for i := 0; i < min(len(a), 16); i += 7 {
err := c.bus.Publish(DisplayCommand{addr, a[i:i+7]}.Encode()) err := c.bus.Publish(DisplayCommand{addr, a[i:min(i+7,len(a))]}.Encode())
if err != nil { if err != nil {
return err return err
} }