fix
This commit is contained in:
53
pkg/finder/reader.go
Normal file
53
pkg/finder/reader.go
Normal file
@@ -0,0 +1,53 @@
|
||||
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]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user