...

Source file src/github.com/dsoprea/go-utility/v2/filesystem/copy_bytes_between_positions.go

Documentation: github.com/dsoprea/go-utility/v2/filesystem

     1  package rifs
     2  
     3  import (
     4  	"io"
     5  	"os"
     6  
     7  	"github.com/dsoprea/go-logging"
     8  )
     9  
    10  // CopyBytesBetweenPositions will copy bytes from one position in the given RWS
    11  // to an earlier position in the same RWS.
    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