diff options
| author | Than McIntosh <thanm@google.com> | 2023-05-11 16:09:38 -0400 |
|---|---|---|
| committer | Than McIntosh <thanm@google.com> | 2023-05-23 11:36:28 +0000 |
| commit | 5322e66a121abd65a5c19f4bdada12851e7f5857 (patch) | |
| tree | 71bd4b39d5775755f00c2f51fc1dcf90f4074a90 /src/internal/coverage/slicereader/slicereader.go | |
| parent | 0cd04724aaa180703244d7af1b67be906059206e (diff) | |
| download | go-5322e66a121abd65a5c19f4bdada12851e7f5857.tar.xz | |
internal/coverage: implement conforming Seek method in slicereader
Implement a real Seek() method in the slicereader helper (prior to
this it had a simplified SeekTo function), so that slicereader's will
satisfy the ReadSeeker interface (needed in a subsequent patch).
Change-Id: I832e3ec1e34d0f8c6b5edf390470f6f943c6ece0
Reviewed-on: https://go-review.googlesource.com/c/go/+/495438
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/internal/coverage/slicereader/slicereader.go')
| -rw-r--r-- | src/internal/coverage/slicereader/slicereader.go | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/internal/coverage/slicereader/slicereader.go b/src/internal/coverage/slicereader/slicereader.go index 3d117bae37..d9f2a7eac4 100644 --- a/src/internal/coverage/slicereader/slicereader.go +++ b/src/internal/coverage/slicereader/slicereader.go @@ -6,6 +6,8 @@ package slicereader import ( "encoding/binary" + "fmt" + "io" "unsafe" ) @@ -38,8 +40,31 @@ func (r *Reader) Read(b []byte) (int, error) { return amt, nil } -func (r *Reader) SeekTo(off int64) { - r.off = off +func (r *Reader) Seek(offset int64, whence int) (ret int64, err error) { + switch whence { + case io.SeekStart: + if offset < 0 || offset > int64(len(r.b)) { + return 0, fmt.Errorf("invalid seek: new offset %d (out of range [0 %d]", offset, len(r.b)) + } + r.off = offset + return offset, nil + case io.SeekCurrent: + newoff := r.off + offset + if newoff < 0 || newoff > int64(len(r.b)) { + return 0, fmt.Errorf("invalid seek: new offset %d (out of range [0 %d]", newoff, len(r.b)) + } + r.off = newoff + return r.off, nil + case io.SeekEnd: + newoff := int64(len(r.b)) + offset + if newoff < 0 || newoff > int64(len(r.b)) { + return 0, fmt.Errorf("invalid seek: new offset %d (out of range [0 %d]", newoff, len(r.b)) + } + r.off = newoff + return r.off, nil + } + // other modes are not supported + return 0, fmt.Errorf("unsupported seek mode %d", whence) } func (r *Reader) Offset() int64 { |
