diff --git a/cmd/bbolt/main.go b/cmd/bbolt/main.go index 7ba8c8a7f..e7f46988b 100644 --- a/cmd/bbolt/main.go +++ b/cmd/bbolt/main.go @@ -939,15 +939,10 @@ func (cmd *keysCommand) Run(args ...string) error { // Print keys. return db.View(func(tx *bolt.Tx) error { // Find bucket. - var lastbucket *bolt.Bucket = tx.Bucket([]byte(buckets[0])) - if lastbucket == nil { - return berrors.ErrBucketNotFound - } - for _, bucket := range buckets[1:] { - lastbucket = lastbucket.Bucket([]byte(bucket)) - if lastbucket == nil { - return berrors.ErrBucketNotFound - } + var lastbucket *bolt.Bucket + lastbucket, err = findLastBucket(tx, buckets) + if err != nil { + return err } // Iterate over each key. @@ -1030,15 +1025,10 @@ func (cmd *getCommand) Run(args ...string) error { // Print value. return db.View(func(tx *bolt.Tx) error { // Find bucket. - var lastbucket *bolt.Bucket = tx.Bucket([]byte(buckets[0])) - if lastbucket == nil { - return berrors.ErrBucketNotFound - } - for _, bucket := range buckets[1:] { - lastbucket = lastbucket.Bucket([]byte(bucket)) - if lastbucket == nil { - return berrors.ErrBucketNotFound - } + var lastbucket *bolt.Bucket + lastbucket, err = findLastBucket(tx, buckets) + if err != nil { + return err } // Find value for given key. @@ -1718,3 +1708,17 @@ func (_ cmdKvStringer) ValueToString(value []byte) string { func CmdKvStringer() bolt.KVStringer { return cmdKvStringer{} } + +func findLastBucket(tx *bolt.Tx, bucketNames []string) (*bolt.Bucket, error) { + var lastbucket *bolt.Bucket = tx.Bucket([]byte(bucketNames[0])) + if lastbucket == nil { + return nil, berrors.ErrBucketNotFound + } + for _, bucket := range bucketNames[1:] { + lastbucket = lastbucket.Bucket([]byte(bucket)) + if lastbucket == nil { + return nil, berrors.ErrBucketNotFound + } + } + return lastbucket, nil +}