fleet/orbit/pkg/execuser/transient_writer.go

33 lines
782 B
Go
Raw Normal View History

package execuser
const bufSize = 4096
// TransientWriter keeps the last bufSize bytes written to it.
type TransientWriter struct {
buf [bufSize]byte
len int
}
// Write writes p to the buffer. If the buffer is full, it will overwrite the oldest bytes.
func (w *TransientWriter) Write(p []byte) (n int, err error) {
lenToWrite := len(p)
switch {
case lenToWrite >= bufSize:
copy(w.buf[:], p[lenToWrite-bufSize:])
w.len = bufSize
case bufSize-w.len < lenToWrite:
remainingLen := bufSize - lenToWrite
copy(w.buf[0:remainingLen], w.buf[w.len-remainingLen:w.len])
copy(w.buf[remainingLen:], p)
w.len = bufSize
default:
n = copy(w.buf[w.len:], p)
w.len += n
}
return lenToWrite, nil
}
func (w TransientWriter) String() string {
return string(w.buf[:w.len])
}