Files
jiacrontab/pkg/finder/reader.go
jiazhizhong 1279635d7f fix
2022-03-10 17:09:03 +08:00

54 lines
693 B
Go

package finder
import (
"io"
"os"
)
type TailReader struct {
f *os.File
curr int64
isEOF bool
}
func (t *TailReader) Read(b []byte) (n int, err error) {
if t.isEOF {
return 0, io.EOF
}
off := t.curr - int64(len(b))
if off < 0 {
off = 0
n, err = t.f.ReadAt(b[0:t.curr], off)
} else {
t.curr = off
n, err = t.f.ReadAt(b, off)
}
if err != nil && err != io.EOF {
return n, err
}
invert(b[0:n])
if off == 0 {
t.isEOF = true
}
return
}
func NewTailReader(f *os.File, offset int64) io.Reader {
return &TailReader{
f: f,
curr: offset,
}
}
func invert(b []byte) {
for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
b[i], b[j] = b[j], b[i]
}
}