mirror of
https://github.com/fleetdm/fleet
synced 2026-04-26 16:07:21 +00:00
33 lines
782 B
Go
33 lines
782 B
Go
|
|
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])
|
||
|
|
}
|