diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2015-06-03 01:48:02 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2015-06-03 01:48:02 +0900 |
| commit | b00bcf506e0554b918e7aa75842277bc9a65dda8 (patch) | |
| tree | 1cd3af38f7c0612638d9da1df16d7f52ebeada89 /src | |
| parent | fdbfe36c0b882a4e948fafd1949956341607b1e5 (diff) | |
| download | fzf-b00bcf506e0554b918e7aa75842277bc9a65dda8.tar.gz | |
Fix #248 - Premature termination of Reader on long input
Diffstat (limited to 'src')
| -rw-r--r-- | src/reader.go | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/reader.go b/src/reader.go index d4764119..7496b775 100644 --- a/src/reader.go +++ b/src/reader.go @@ -30,9 +30,29 @@ func (r *Reader) ReadSource() { } func (r *Reader) feed(src io.Reader) { - if scanner := bufio.NewScanner(src); scanner != nil { - for scanner.Scan() { - r.pusher(scanner.Text()) + reader := bufio.NewReader(src) + eof := false +Loop: + for !eof { + buf := []byte{} + iter := 0 // TODO: max size? + for { + // "ReadLine either returns a non-nil line or it returns an error, never both" + line, isPrefix, err := reader.ReadLine() + eof = err == io.EOF + if eof { + break + } else if err != nil { + break Loop + } + iter++ + buf = append(buf, line...) + if !isPrefix { + break + } + } + if iter > 0 { + r.pusher(string(buf)) r.eventBox.Set(EvtReadNew, nil) } } |
