diff --git a/cmd/stbak/cmd/archive.go b/cmd/stbak/cmd/archive.go index 9fcfbff..79e2c78 100644 --- a/cmd/stbak/cmd/archive.go +++ b/cmd/stbak/cmd/archive.go @@ -181,7 +181,7 @@ func archive( identity interface{}, ) ([]*tar.Header, error) { dirty := false - tw, isRegular, cleanup, err := openTapeWriter(tape) + tw, isRegular, cleanup, err := openTapeWriter(tape, recordSize, overwrite) if err != nil { return []*tar.Header{}, err } @@ -206,7 +206,7 @@ func archive( return []*tar.Header{}, err } - tw, isRegular, cleanup, err = openTapeWriter(tape) + tw, isRegular, cleanup, err = openTapeWriter(tape, recordSize, overwrite) if err != nil { return []*tar.Header{}, err } @@ -229,7 +229,7 @@ func archive( return []*tar.Header{}, err } - tw, isRegular, cleanup, err = openTapeWriter(tape) + tw, isRegular, cleanup, err = openTapeWriter(tape, recordSize, overwrite) if err != nil { return []*tar.Header{}, err } diff --git a/cmd/stbak/cmd/delete.go b/cmd/stbak/cmd/delete.go index a87002a..c9f2b49 100644 --- a/cmd/stbak/cmd/delete.go +++ b/cmd/stbak/cmd/delete.go @@ -68,6 +68,7 @@ var deleteCmd = &cobra.Command{ return delete( viper.GetString(driveFlag), + viper.GetInt(recordSizeFlag), viper.GetString(metadataFlag), viper.GetString(nameFlag), viper.GetString(encryptionFlag), @@ -80,6 +81,7 @@ var deleteCmd = &cobra.Command{ func delete( tape string, + recordSize int, metadata string, name string, encryptionFormat string, @@ -88,7 +90,7 @@ func delete( identity interface{}, ) error { dirty := false - tw, _, cleanup, err := openTapeWriter(tape) + tw, _, cleanup, err := openTapeWriter(tape, recordSize, false) if err != nil { return err } @@ -158,7 +160,7 @@ func delete( return nil } -func openTapeWriter(tape string) (tw *tar.Writer, isRegular bool, cleanup func(dirty *bool) error, err error) { +func openTapeWriter(tape string, recordSize int, overwrite bool) (tw *tar.Writer, isRegular bool, cleanup func(dirty *bool) error, err error) { stat, err := os.Stat(tape) if err == nil { isRegular = stat.Mode().IsRegular() @@ -184,9 +186,11 @@ func openTapeWriter(tape string) (tw *tar.Writer, isRegular bool, cleanup func(d return nil, false, nil, err } - // Go to end of tape - if err := controllers.GoToEndOfTape(f); err != nil { - return nil, false, nil, err + if !overwrite { + // Go to end of tape + if err := controllers.GoToEndOfTape(f); err != nil { + return nil, false, nil, err + } } } @@ -195,7 +199,7 @@ func openTapeWriter(tape string) (tw *tar.Writer, isRegular bool, cleanup func(d if isRegular { tw = tar.NewWriter(f) } else { - bw = bufio.NewWriterSize(f, controllers.BlockSize*viper.GetInt(recordSizeFlag)) + bw = bufio.NewWriterSize(f, controllers.BlockSize*recordSize) counter = &counters.CounterWriter{Writer: bw, BytesRead: 0} tw = tar.NewWriter(counter) } @@ -208,9 +212,9 @@ func openTapeWriter(tape string) (tw *tar.Writer, isRegular bool, cleanup func(d } if !isRegular { - if controllers.BlockSize*viper.GetInt(recordSizeFlag)-counter.BytesRead > 0 { + if controllers.BlockSize*recordSize-counter.BytesRead > 0 { // Fill the rest of the record with zeros - if _, err := bw.Write(make([]byte, controllers.BlockSize*viper.GetInt(recordSizeFlag)-counter.BytesRead)); err != nil { + if _, err := bw.Write(make([]byte, controllers.BlockSize*recordSize-counter.BytesRead)); err != nil { return err } } diff --git a/cmd/stbak/cmd/move.go b/cmd/stbak/cmd/move.go index 37a6958..c3ad29c 100644 --- a/cmd/stbak/cmd/move.go +++ b/cmd/stbak/cmd/move.go @@ -61,6 +61,7 @@ var moveCmd = &cobra.Command{ return move( viper.GetString(driveFlag), + viper.GetInt(recordSizeFlag), viper.GetString(metadataFlag), viper.GetString(fromFlag), viper.GetString(toFlag), @@ -74,6 +75,7 @@ var moveCmd = &cobra.Command{ func move( tape string, + recordSize int, metadata string, src string, dst string, @@ -83,7 +85,7 @@ func move( identity interface{}, ) error { dirty := false - tw, _, cleanup, err := openTapeWriter(tape) + tw, _, cleanup, err := openTapeWriter(tape, recordSize, false) if err != nil { return err } diff --git a/cmd/stbak/cmd/update.go b/cmd/stbak/cmd/update.go index 8b5dcb3..3e3c662 100644 --- a/cmd/stbak/cmd/update.go +++ b/cmd/stbak/cmd/update.go @@ -134,7 +134,7 @@ func update( identity interface{}, ) ([]*tar.Header, error) { dirty := false - tw, isRegular, cleanup, err := openTapeWriter(tape) + tw, isRegular, cleanup, err := openTapeWriter(tape, recordSize, false) if err != nil { return []*tar.Header{}, err }