mirror of
https://github.com/muun/recovery.git
synced 2025-02-24 03:49:13 -05:00
39 lines
1.0 KiB
Go
39 lines
1.0 KiB
Go
// +build !windows
|
|
|
|
package headerfs
|
|
|
|
import "fmt"
|
|
|
|
// singleTruncate truncates a single header from the end of the header file.
|
|
// This can be used in the case of a re-org to remove the last header from the
|
|
// end of the main chain.
|
|
//
|
|
// TODO(roasbeef): define this and the two methods above on a headerFile
|
|
// struct?
|
|
func (h *headerStore) singleTruncate() error {
|
|
// In order to truncate the file, we'll need to grab the absolute size
|
|
// of the file as it stands currently.
|
|
fileInfo, err := h.file.Stat()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fileSize := fileInfo.Size()
|
|
|
|
// Next, we'll determine the number of bytes we need to truncate from
|
|
// the end of the file.
|
|
var truncateLength int64
|
|
switch h.indexType {
|
|
case Block:
|
|
truncateLength = 80
|
|
case RegularFilter:
|
|
truncateLength = 32
|
|
default:
|
|
return fmt.Errorf("unknown index type: %v", h.indexType)
|
|
}
|
|
|
|
// Finally, we'll use both of these values to calculate the new size of
|
|
// the file and truncate it accordingly.
|
|
newSize := fileSize - truncateLength
|
|
return h.file.Truncate(newSize)
|
|
}
|