diff options
| author | Giulio Iotti <dullgiulio@gmail.com> | 2015-06-08 06:36:21 +0000 |
|---|---|---|
| committer | Giulio Iotti <dullgiulio@gmail.com> | 2015-06-08 08:38:40 +0000 |
| commit | f6dd32046eabfc31671c39d98581bbc3899d6b27 (patch) | |
| tree | 0875374f7e6e2535ba2c76bd1b9074621ab21b09 /src/reader.go | |
| parent | 443a80f254c8a21c17de910533bb11fcd253eb02 (diff) | |
| download | fzf-f6dd32046eabfc31671c39d98581bbc3899d6b27.tar.gz | |
add support to nil-byte separated input strings, closes #121
Diffstat (limited to 'src/reader.go')
| -rw-r--r-- | src/reader.go | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/src/reader.go b/src/reader.go index 7496b775..356c2db8 100644 --- a/src/reader.go +++ b/src/reader.go @@ -13,6 +13,7 @@ import ( type Reader struct { pusher func(string) eventBox *util.EventBox + delimNil bool } // ReadSource reads data from the default command or from standard input @@ -30,31 +31,24 @@ func (r *Reader) ReadSource() { } func (r *Reader) feed(src io.Reader) { + delim := byte('\n') + if r.delimNil { + delim = '\000' + } 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 + for { + line, err := reader.ReadString(delim) + if line != "" { + // "ReadString returns err != nil if and only if the returned data does not end in delim." + if err == nil { + line = line[:len(line)-1] } - } - if iter > 0 { - r.pusher(string(buf)) + r.pusher(line) r.eventBox.Set(EvtReadNew, nil) } + if err != nil { + break + } } } |
