refactor: Use manual size calculation instead of trusting the tar header size

This commit is contained in:
Felix Pojtinger
2021-11-30 15:44:15 +01:00
parent d39e4e1e92
commit 39221d5b90
2 changed files with 35 additions and 5 deletions

View File

@@ -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))

View File

@@ -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)))