Skip to content

Commit

Permalink
Reimplemented EOF in C-like emulation
Browse files Browse the repository at this point in the history
  • Loading branch information
GreyCat committed Apr 16, 2018
1 parent 188dc63 commit 0b90208
Showing 1 changed file with 18 additions and 12 deletions.
30 changes: 18 additions & 12 deletions kaitai/stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,24 @@ func NewStream(r io.ReadSeeker) (s *Stream) {
return
}

func (k *Stream) EOF() bool {
// Not sure about this one. In Go, an io.EOF is returned as
// an error from a Read() when the EOF is reached. EOF
// handling can then be done like this:
//
// v, err := k.ReadU1()
// if err == io.EOF {
// // Handle EOF error
// } else if err != nil {
// // Handle all other errors
// }
return false
func (k *Stream) EOF() (bool, error) {
curPos, err := k.Pos()
if err != nil {
return false, err
}

isEOF := false
_, err = k.ReadU1()
if err == io.EOF {
isEOF = true
err = nil
}
if err != nil {
return false, err
}

_, err = k.Seek(curPos, io.SeekStart)
return isEOF, err
}

func (k *Stream) Size() (int64, error) {
Expand Down

0 comments on commit 0b90208

Please sign in to comment.