1
0
mirror of https://github.com/zu1k/nali.git synced 2025-02-02 10:22:41 +08:00
nali/pkg/common/scan.go

29 lines
658 B
Go
Raw Normal View History

package common
import (
"bytes"
"regexp"
)
var newlineReg = regexp.MustCompile(`\r?\n|\r\n?`)
func ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error) {
if atEOF && len(data) == 0 {
return 0, nil, nil
}
if loc := newlineReg.FindIndex(data); len(loc) > 0 {
delimiterLen := 1
i := loc[0]
2022-08-14 22:37:48 +08:00
if i+1 < len(data) && data[i] == '\r' && data[i+1] == '\n' {
delimiterLen = 2
}
2022-08-14 22:54:24 +08:00
return i + delimiterLen, data[:i+delimiterLen], nil
}
// If we're at EOF, we have a final, non-terminated line. Return it.
if atEOF {
return len(data), bytes.TrimSuffix(data, []byte{'\r'}), nil
}
// Request more data.
return 0, nil, nil
}