summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-07-01 00:00:19 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-07-01 00:00:19 -0600
commitaee0fa4cf09ef5af90e28441d673ce440e4c2c16 (patch)
tree5a87486e5bd4f0af400d633d3040edd5ed03bf5c /cmd
parentdf3e7ef9c5fd0ceb2e89d5afd4e981652f9a8bdd (diff)
add open/close utility functions
Diffstat (limited to 'cmd')
-rw-r--r--cmd/btrfs-dbg/main.go33
-rw-r--r--cmd/btrfs-dump-tree/main.go9
-rw-r--r--cmd/btrfs-fsck/main.go17
-rw-r--r--cmd/btrfs-fsck/pass0.go18
4 files changed, 33 insertions, 44 deletions
diff --git a/cmd/btrfs-dbg/main.go b/cmd/btrfs-dbg/main.go
index 3f30915..4b4a7a2 100644
--- a/cmd/btrfs-dbg/main.go
+++ b/cmd/btrfs-dbg/main.go
@@ -25,20 +25,13 @@ func Main(imgfilename string) (err error) {
}
}
- fh, err := os.Open(imgfilename)
+ fs, err := btrfsmisc.Open(os.O_RDONLY, imgfilename)
if err != nil {
return err
}
defer func() {
- maybeSetErr(fh.Close())
+ maybeSetErr(fs.Close())
}()
- dev := &btrfs.Device{
- File: fh,
- }
- fs := new(btrfs.FS)
- if err := fs.AddDevice(dev); err != nil {
- return err
- }
superblocks, err := fs.Superblocks()
if err != nil {
@@ -61,17 +54,19 @@ func Main(imgfilename string) (err error) {
}
spew.Dump(syschunks)
- if err := btrfsmisc.ScanForNodes(dev, superblocks[0].Data, func(nodeRef *util.Ref[btrfs.PhysicalAddr, btrfs.Node], err error) {
- if err != nil {
- fmt.Println(err)
- } else {
- fmt.Printf("node@%v: physical_addr=%v logical_addr=%v generation=%v owner=%v level=%v\n",
- nodeRef.Addr,
- nodeRef.Addr, nodeRef.Data.Head.Addr,
- nodeRef.Data.Head.Generation, nodeRef.Data.Head.Owner, nodeRef.Data.Head.Level)
+ for _, dev := range fs.LV.PhysicalVolumes() {
+ if err := btrfsmisc.ScanForNodes(dev, superblocks[0].Data, func(nodeRef *util.Ref[btrfs.PhysicalAddr, btrfs.Node], err error) {
+ if err != nil {
+ fmt.Println(err)
+ } else {
+ fmt.Printf("node@%v: physical_addr=%v logical_addr=%v generation=%v owner=%v level=%v\n",
+ nodeRef.Addr,
+ nodeRef.Addr, nodeRef.Data.Head.Addr,
+ nodeRef.Data.Head.Generation, nodeRef.Data.Head.Owner, nodeRef.Data.Head.Level)
+ }
+ }, nil); err != nil {
+ return err
}
- }, nil); err != nil {
- return err
}
return nil
diff --git a/cmd/btrfs-dump-tree/main.go b/cmd/btrfs-dump-tree/main.go
index ded7a39..b226af3 100644
--- a/cmd/btrfs-dump-tree/main.go
+++ b/cmd/btrfs-dump-tree/main.go
@@ -25,19 +25,14 @@ func Main(imgfilename string) (err error) {
}
}
- fh, err := os.Open(imgfilename)
+ fs, err := btrfsmisc.Open(os.O_RDONLY, imgfilename)
if err != nil {
return err
}
defer func() {
- maybeSetErr(fh.Close())
+ maybeSetErr(fs.Close())
}()
- fs := new(btrfs.FS)
- if err := fs.AddDevice(&btrfs.Device{File: fh}); err != nil {
- fmt.Printf("(error) %v\n", err)
- }
-
superblock, err := fs.Superblock()
if err != nil {
return err
diff --git a/cmd/btrfs-fsck/main.go b/cmd/btrfs-fsck/main.go
index e51aae9..ebbaff7 100644
--- a/cmd/btrfs-fsck/main.go
+++ b/cmd/btrfs-fsck/main.go
@@ -19,22 +19,13 @@ func Main(imgfilenames ...string) (err error) {
}
}
- var imgfiles []*os.File
- for _, imgfilename := range imgfilenames {
- fh, err := os.OpenFile(imgfilename, os.O_RDWR, 0)
- if err != nil {
- return err
- }
- defer func() {
- maybeSetErr(fh.Close())
- }()
- imgfiles = append(imgfiles, fh)
- }
-
- fs, sb, err := pass0(imgfiles...)
+ fs, sb, err := pass0(imgfilenames...)
if err != nil {
return err
}
+ defer func() {
+ maybeSetErr(fs.Close())
+ }()
foundNodes, err := pass1(fs, sb)
if err != nil {
diff --git a/cmd/btrfs-fsck/pass0.go b/cmd/btrfs-fsck/pass0.go
index 2a8e20a..c0c872b 100644
--- a/cmd/btrfs-fsck/pass0.go
+++ b/cmd/btrfs-fsck/pass0.go
@@ -8,19 +8,27 @@ import (
"lukeshu.com/btrfs-tools/pkg/util"
)
-func pass0(imgfiles ...*os.File) (*btrfs.FS, *util.Ref[btrfs.PhysicalAddr, btrfs.Superblock], error) {
+func pass0(filenames ...string) (*btrfs.FS, *util.Ref[btrfs.PhysicalAddr, btrfs.Superblock], error) {
fmt.Printf("\nPass 0: init and superblocks...\n")
fs := new(btrfs.FS)
- for _, imgfile := range imgfiles {
- fmt.Printf("Pass 0: ... adding device %q...\n", imgfile.Name())
- if err := fs.AddDevice(&btrfs.Device{File: imgfile}); err != nil {
- fmt.Printf("Pass 0: ... add device %q: error: %v\n", imgfile.Name(), err)
+ for _, filename := range filenames {
+ fmt.Printf("Pass 0: ... adding device %q...\n", filename)
+
+ fh, err := os.OpenFile(filename, os.O_RDWR, 0)
+ if err != nil {
+ _ = fs.Close()
+ return nil, nil, fmt.Errorf("device %q: %w", filename, err)
+ }
+
+ if err := fs.AddDevice(&btrfs.Device{File: fh}); err != nil {
+ fmt.Printf("Pass 0: ... add device %q: error: %v\n", filename, err)
}
}
sb, err := fs.Superblock()
if err != nil {
+ _ = fs.Close()
return nil, nil, err
}