...
1 package rifs
2
3 import (
4 "io"
5 "os"
6
7 "github.com/dsoprea/go-logging"
8 )
9
10
11
12 func CopyBytesBetweenPositions(rws io.ReadWriteSeeker, fromPosition, toPosition int64, count int) (n int, err error) {
13 defer func() {
14 if state := recover(); state != nil {
15 err = log.Wrap(state.(error))
16 }
17 }()
18
19 if fromPosition <= toPosition {
20 log.Panicf("from position (%d) must be larger than to position (%d)", fromPosition, toPosition)
21 }
22
23 br, err := NewBouncebackReader(rws)
24 log.PanicIf(err)
25
26 _, err = br.Seek(fromPosition, os.SEEK_SET)
27 log.PanicIf(err)
28
29 bw, err := NewBouncebackWriter(rws)
30 log.PanicIf(err)
31
32 _, err = bw.Seek(toPosition, os.SEEK_SET)
33 log.PanicIf(err)
34
35 written, err := io.CopyN(bw, br, int64(count))
36 log.PanicIf(err)
37
38 n = int(written)
39 return n, nil
40 }
41
View as plain text