libgocryptfs/contrib/findholes/main.go
Jakob Unterwurzacher c1d7e38761 findholes: add --create, --verify
Also, change the logic for the segment walk to not
rely on the total size. cp does not use the total
size either, and we miss bugs by cheating!
2021-05-29 16:00:40 +02:00

58 lines
1014 B
Go

// Find and pretty-print holes & data sections of a file.
package main
import (
"flag"
"fmt"
"os"
"github.com/rfjakob/gocryptfs/contrib/findholes/holes"
)
func main() {
flags := struct {
verify *bool
create *bool
}{}
flags.verify = flag.Bool("verify", false, "Verify results using full file scan")
flags.create = flag.Bool("create", false, "Create test file with random holes")
flag.Parse()
if flag.NArg() != 1 {
fmt.Printf("Usage: findholes FILE\n")
os.Exit(1)
}
path := flag.Arg(0)
if *flags.create {
holes.Create(path)
}
f, err := os.Open(path)
if err != nil {
// os.Open() gives nicer error messages than syscall.Open()
fmt.Println(err)
os.Exit(1)
}
defer f.Close()
segments, err := holes.Find(int(f.Fd()))
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println(holes.PrettyPrint(segments))
if *flags.verify {
err = holes.Verify(int(f.Fd()), segments)
if err != nil {
fmt.Println(err)
os.Exit(1)
} else {
fmt.Println("verify ok")
}
}
}