diff --git a/internal/toreader/offsetreader.go b/internal/toreader/offsetreader.go new file mode 100644 index 0000000..0192177 --- /dev/null +++ b/internal/toreader/offsetreader.go @@ -0,0 +1,19 @@ +package toreader + +import "io" + +type OffsetReader struct { + r io.ReaderAt + off int64 +} + +func NewOffsetReader(r io.ReaderAt, off int64) *OffsetReader { + return &OffsetReader{ + r: r, + off: off, + } +} + +func (r OffsetReader) ReadAt(p []byte, off int64) (n int, e error) { + return r.r.ReadAt(p, off+r.off) +} diff --git a/reader.go b/reader.go index 647cd58..a31a6be 100644 --- a/reader.go +++ b/reader.go @@ -4,6 +4,7 @@ import ( "io" "time" + "github.com/CalebQ42/squashfs/internal/toreader" squashfslow "github.com/CalebQ42/squashfs/low" ) @@ -27,6 +28,10 @@ func NewReader(r io.ReaderAt) (*Reader, error) { return out, nil } +func NewReaderAtOffset(r io.ReaderAt, offset int64) (*Reader, error) { + return NewReader(toreader.NewOffsetReader(r, offset)) +} + func (r *Reader) ModTime() time.Time { return time.Unix(int64(r.Low.Superblock.ModTime), 0) }