sbuf: linter fixes

This commit is contained in:
2025-11-15 19:53:18 -08:00
parent 3d9625b40b
commit fdff2e0afe
3 changed files with 34 additions and 35 deletions

View File

@@ -228,6 +228,8 @@ linters:
# Such cases aren't reported by default. # Such cases aren't reported by default.
# Default: false # Default: false
check-type-assertions: true check-type-assertions: true
exclude-functions:
- (*git.wntrmute.dev/kyle/goutils/sbuf.Buffer).Write
exhaustive: exhaustive:
# Program elements to check for exhaustiveness. # Program elements to check for exhaustiveness.

View File

@@ -15,7 +15,7 @@ func zero(in []byte, n int) {
stop = len(in) stop = len(in)
} }
for i := 0; i < stop; i++ { for i := range stop {
in[i] ^= in[i] in[i] ^= in[i]
} }
} }
@@ -37,7 +37,10 @@ func NewBuffer(n int) *Buffer {
// original data will be wiped. // original data will be wiped.
func NewBufferFrom(p []byte) *Buffer { func NewBufferFrom(p []byte) *Buffer {
buf := NewBuffer(len(p)) buf := NewBuffer(len(p))
buf.Write(p) _, err := buf.Write(p)
if err != nil {
return nil
}
zero(p, len(p)) zero(p, len(p))
return buf return buf
} }
@@ -54,10 +57,7 @@ func (buf *Buffer) Read(p []byte) (int, error) {
return 0, io.EOF return 0, io.EOF
} }
copyLength := len(p) copyLength := min(len(p), len(buf.buf))
if copyLength > len(buf.buf) {
copyLength = len(buf.buf)
}
copy(p, buf.buf) copy(p, buf.buf)
zero(buf.buf, len(p)) zero(buf.buf, len(p))
@@ -91,10 +91,7 @@ func (buf *Buffer) Write(p []byte) (int, error) {
r := len(buf.buf) + len(p) r := len(buf.buf) + len(p)
if cap(buf.buf) < r { if cap(buf.buf) < r {
l := r l := r
for { for l <= r {
if l > r {
break
}
l *= 2 l *= 2
} }
buf.grow(l - cap(buf.buf)) buf.grow(l - cap(buf.buf))
@@ -107,7 +104,7 @@ func (buf *Buffer) Write(p []byte) (int, error) {
func (buf *Buffer) WriteByte(c byte) error { func (buf *Buffer) WriteByte(c byte) error {
r := len(buf.buf) + 1 r := len(buf.buf) + 1
if cap(buf.buf) < r { if cap(buf.buf) < r {
l := r * 2 l := r << 1
buf.grow(l - cap(buf.buf)) buf.grow(l - cap(buf.buf))
} }
buf.buf = append(buf.buf, c) buf.buf = append(buf.buf, c)
@@ -138,7 +135,7 @@ func (buf *Buffer) Bytes() []byte {
} }
p := make([]byte, buf.Len()) p := make([]byte, buf.Len())
buf.Read(p) _, _ = buf.Read(p)
buf.Close() buf.Close()
return p return p
} }

View File

@@ -1,15 +1,16 @@
package sbuf package sbuf_test
import ( import (
"bytes" "bytes"
"crypto/rand" "crypto/rand"
"testing" "testing"
"git.wntrmute.dev/kyle/goutils/sbuf"
"golang.org/x/crypto/nacl/box" "golang.org/x/crypto/nacl/box"
) )
var ( var (
buf = &Buffer{} buf = &sbuf.Buffer{}
testMessage1 = []byte("round and round and round we go, where we stop, no one knows") testMessage1 = []byte("round and round and round we go, where we stop, no one knows")
testMessage2 = []byte("the deconstruction of falling stars") testMessage2 = []byte("the deconstruction of falling stars")
) )
@@ -113,23 +114,23 @@ func TestShortRead(t *testing.T) {
} }
func TestNewBuffer(t *testing.T) { func TestNewBuffer(t *testing.T) {
buf := NewBuffer(32) testBuffer := sbuf.NewBuffer(32)
if len(buf.buf) != 0 { if testBuffer.Len() != 0 {
t.Fatalf("expected new buffer length to be 0, have %d", t.Fatalf("expected new buffer length to be 0, have %d",
len(buf.buf)) testBuffer.Len())
} }
if cap(buf.buf) != 32 { if testBuffer.Cap() != 32 {
t.Fatalf("expected new buffer capacity to be 0, have %d", t.Fatalf("expected new buffer capacity to be 0, have %d",
cap(buf.buf)) testBuffer.Cap())
} }
} }
func TestNewBufferFrom(t *testing.T) { func TestNewBufferFrom(t *testing.T) {
p := make([]byte, len(testMessage1)) p := make([]byte, len(testMessage1))
copy(p, testMessage1) copy(p, testMessage1)
buf := NewBufferFrom(p) testBuffer := sbuf.NewBufferFrom(p)
if !bytes.Equal(buf.buf, testMessage1) { if !bytes.Equal(testBuffer.Bytes(), testMessage1) {
t.Fatal("new buffer wasn't constructed properly") t.Fatal("new buffer wasn't constructed properly")
} }
} }
@@ -137,10 +138,10 @@ func TestNewBufferFrom(t *testing.T) {
func TestBytes(t *testing.T) { func TestBytes(t *testing.T) {
p := make([]byte, len(testMessage1)) p := make([]byte, len(testMessage1))
copy(p, testMessage1) copy(p, testMessage1)
buf := NewBufferFrom(p) testBuffer := sbuf.NewBufferFrom(p)
out := buf.Bytes() out := testBuffer.Bytes()
if buf.buf != nil { if testBuffer.Len() != 0 {
t.Fatal("buffer was not closed") t.Fatal("buffer was not closed")
} }
@@ -148,21 +149,21 @@ func TestBytes(t *testing.T) {
t.Fatal("buffer did not return the right data") t.Fatal("buffer did not return the right data")
} }
out = buf.Bytes() out = testBuffer.Bytes()
if out != nil { if out != nil {
t.Fatal("a closed buffer should return nil for Bytes") t.Fatal("a closed buffer should return nil for Bytes")
} }
} }
func TestRWByte(t *testing.T) { func TestRWByte(t *testing.T) {
buf := NewBuffer(0) testBuffer := sbuf.NewBuffer(0)
c := byte(42) c := byte(42)
err := buf.WriteByte(c) err := testBuffer.WriteByte(c)
if err != nil { if err != nil {
t.Fatalf("%v", err) t.Fatalf("%v", err)
} }
c, err = buf.ReadByte() c, err = testBuffer.ReadByte()
if err != nil { if err != nil {
t.Fatalf("%v", err) t.Fatalf("%v", err)
} }
@@ -171,22 +172,21 @@ func TestRWByte(t *testing.T) {
t.Fatalf("Expected 42, have %d", c) t.Fatalf("Expected 42, have %d", c)
} }
_, err = buf.ReadByte() _, err = testBuffer.ReadByte()
if err == nil { if err == nil {
t.Fatal("Expected EOF") t.Fatal("Expected EOF")
} }
} }
func BenchmarkRead(b *testing.B) { func BenchmarkRead(b *testing.B) {
b.N = 2000
pub, priv, err := box.GenerateKey(rand.Reader) pub, priv, err := box.GenerateKey(rand.Reader)
if err != nil { if err != nil {
b.Fatalf("%v", err) b.Fatalf("%v", err)
} }
b.ReportAllocs() b.ReportAllocs()
for i := 0; i < b.N; i++ { for b.Loop() {
_, err := buf.Write(priv[:]) _, err = buf.Write(priv[:])
if err != nil { if err != nil {
b.Fatalf("%v", err) b.Fatalf("%v", err)
} }
@@ -204,11 +204,11 @@ func BenchmarkFixed(b *testing.B) {
b.Fatalf("%v", err) b.Fatalf("%v", err)
} }
buf = NewBuffer(64 * b.N) buf = sbuf.NewBuffer(64 * b.N)
b.ReportAllocs() b.ReportAllocs()
for i := 0; i < b.N; i++ { for b.Loop() {
_, err := buf.Write(priv[:]) _, err = buf.Write(priv[:])
if err != nil { if err != nil {
b.Fatalf("%v", err) b.Fatalf("%v", err)
} }