Skip to content

Commit

Permalink
feat: add ability to support parsing 'raw' device tree bytes to `ipsw…
Browse files Browse the repository at this point in the history
… dtree` command
  • Loading branch information
blacktop committed May 28, 2024
1 parent baf6483 commit 2808e45
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
13 changes: 10 additions & 3 deletions cmd/ipsw/cmd/device_tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (

"github.com/apex/log"
"github.com/blacktop/ipsw/internal/download"
"github.com/blacktop/ipsw/internal/magic"
"github.com/blacktop/ipsw/internal/utils"
"github.com/blacktop/ipsw/pkg/devicetree"
"github.com/pkg/errors"
Expand Down Expand Up @@ -84,22 +85,28 @@ var deviceTreeCmd = &cobra.Command{
return errors.Wrap(err, "failed to extract DeviceTree")
}
} else {
var dtree *devicetree.DeviceTree

content, err := os.ReadFile(args[0])
if err != nil {
return errors.Wrap(err, "failed to read DeviceTree")
}

var dtree *devicetree.DeviceTree
if bytes.Contains(content[:4], []byte("3gmI")) {
if ok, _ := magic.IsImg3(args[0]); ok {
dtree, err = devicetree.ParseImg3Data(content)
if err != nil {
return errors.Wrap(err, "failed to extract DeviceTree")
}
} else {
} else if ok, _ := magic.IsIm4p(args[0]); ok {
dtree, err = devicetree.ParseImg4Data(content)
if err != nil {
return errors.Wrap(err, "failed to extract DeviceTree")
}
} else {
dtree, err = devicetree.ParseData(bytes.NewReader(content))
if err != nil {
return fmt.Errorf("failed to parse DeviceTree: %v", err)
}
}

dtrees[args[0]] = dtree
Expand Down
4 changes: 4 additions & 0 deletions pkg/devicetree/devicetree.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ func (dtree *DeviceTree) Summary() (*Summary, error) {

children := (*dtree)["device-tree"]["children"]

if children == nil {
return nil, fmt.Errorf("failed to get device tree node children")
}

switch reflect.TypeOf(children).Kind() {
case reflect.Slice:
s := reflect.ValueOf(children)
Expand Down

0 comments on commit 2808e45

Please sign in to comment.