diff options
Diffstat (limited to 'verifysetup/cmd')
-rw-r--r-- | verifysetup/cmd/setup.go | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/verifysetup/cmd/setup.go b/verifysetup/cmd/setup.go index 3897903..c2676fc 100644 --- a/verifysetup/cmd/setup.go +++ b/verifysetup/cmd/setup.go @@ -1,10 +1,16 @@ package cmd import ( + "bytes" + "fmt" + verify "github.com/axtloss/fsverify/core" + "github.com/axtloss/fsverify/verifysetup/core" "github.com/spf13/cobra" + "math" + "os" ) -func NewVerifyCommand() *cobra.Command { +func NewSetupCommand() *cobra.Command { cmd := &cobra.Command{ Use: "setup", Short: "Set up fsverify", @@ -16,5 +22,56 @@ func NewVerifyCommand() *cobra.Command { } func SetupCommand(_ *cobra.Command, args []string) error { - return nil + if len(args) != 1 { + return fmt.Errorf("Usage: verifysetup setup [partition]") + } + fmt.Println("Using partition: ", args[0]) + disk, err := os.Open(args[0]) + if err != nil { + return err + } + defer disk.Close() + fmt.Println("Reading from disk") + diskInfo, err := disk.Stat() + if err != nil { + return err + } + diskSize := diskInfo.Size() + blockCount := math.Floor(float64(diskSize / 4000)) + lastBlockSize := float64(diskSize) - blockCount*4000.0 + fmt.Println(diskSize) + fmt.Println(blockCount) + fmt.Println(lastBlockSize) + node := verify.Node{} + block := make([]byte, 4000) + diskBytes := make([]byte, diskSize) + _, err = disk.Read(diskBytes) + if err != nil { + return err + } + reader := bytes.NewReader(diskBytes) + for i := 0; i < int(blockCount); i++ { + reader = bytes.NewReader(diskBytes) + block, err = core.ReadBlock(i*4000, (i*4000)+4000, reader) + if err != nil { + return err + } + node, err = core.CreateNode(i*4000, (i*4000)+4000, block, &node) + if err != nil { + return err + } + fmt.Println(node) + err = core.AddNode(node, nil, "./fsverify.db") + } + finalBlock, err := core.ReadBlock(int(blockCount*4000), int((blockCount*4000)+lastBlockSize), reader) + if err != nil { + return err + } + finalNode, err := core.CreateNode(int(blockCount*4000), int((blockCount*4000)+lastBlockSize), finalBlock, &node) + if err != nil { + return err + } + fmt.Println(finalNode) + err = core.AddNode(finalNode, nil, "./fsverify.db") + return err } |