diff --git a/cmd/stbak/cmd/recovery_index.go b/cmd/stbak/cmd/recovery_index.go index 6b08c0b..c0103ee 100644 --- a/cmd/stbak/cmd/recovery_index.go +++ b/cmd/stbak/cmd/recovery_index.go @@ -5,6 +5,7 @@ import ( "bufio" "context" "io" + "io/ioutil" "math" "os" @@ -139,7 +140,16 @@ func index( return err } - nextTotalBlocks := math.Ceil(float64((curr + hdr.Size)) / float64(controllers.BlockSize)) + if _, err := io.Copy(ioutil.Discard, tr); err != nil { + return err + } + + currAndSize, err := f.Seek(0, io.SeekCurrent) + if err != nil { + return err + } + + nextTotalBlocks := math.Ceil(float64(curr+(currAndSize-curr)) / float64(controllers.BlockSize)) record = int64(nextTotalBlocks) / int64(recordSize) block = int64(nextTotalBlocks) - (record * int64(recordSize)) @@ -200,7 +210,13 @@ func index( curr = int64(counter.BytesRead) - nextTotalBlocks := math.Ceil(float64((curr + hdr.Size)) / float64(controllers.BlockSize)) + if _, err := io.Copy(ioutil.Discard, tr); err != nil { + return err + } + + currAndSize := int64(counter.BytesRead) + + nextTotalBlocks := math.Ceil(float64(curr+(currAndSize-curr)) / float64(controllers.BlockSize)) record = int64(nextTotalBlocks) / int64(recordSize) block = int64(nextTotalBlocks) - (record * int64(recordSize)) diff --git a/cmd/stbak/cmd/recovery_query.go b/cmd/stbak/cmd/recovery_query.go index 62a9f3a..4029a86 100644 --- a/cmd/stbak/cmd/recovery_query.go +++ b/cmd/stbak/cmd/recovery_query.go @@ -4,6 +4,7 @@ import ( "archive/tar" "bufio" "io" + "io/ioutil" "math" "github.com/pojntfx/stfs/pkg/controllers" @@ -100,7 +101,16 @@ var recoveryQueryCmd = &cobra.Command{ return err } - nextTotalBlocks := math.Ceil(float64((curr + hdr.Size)) / float64(controllers.BlockSize)) + if _, err := io.Copy(ioutil.Discard, tr); err != nil { + return err + } + + currAndSize, err := f.Seek(0, io.SeekCurrent) + if err != nil { + return err + } + + nextTotalBlocks := math.Ceil(float64(curr+(currAndSize-curr)) / float64(controllers.BlockSize)) record = int64(nextTotalBlocks) / int64(viper.GetInt(recordSizeFlag)) block = int64(nextTotalBlocks) - (record * int64(viper.GetInt(recordSizeFlag))) @@ -165,9 +175,13 @@ var recoveryQueryCmd = &cobra.Command{ return err } - curr = int64(counter.BytesRead) + if _, err := io.Copy(ioutil.Discard, tr); err != nil { + return err + } - nextTotalBlocks := math.Ceil(float64((curr + hdr.Size)) / float64(controllers.BlockSize)) + currAndSize := int64(counter.BytesRead) + + nextTotalBlocks := math.Ceil(float64(curr+(currAndSize-curr)) / float64(controllers.BlockSize)) record = int64(nextTotalBlocks) / int64(viper.GetInt(recordSizeFlag)) block = int64(nextTotalBlocks) - (record * int64(viper.GetInt(recordSizeFlag)))