mirror of
https://github.com/Xpl0itU/WiiUDownloader.git
synced 2025-05-29 14:35:25 -04:00
Simplify tmd parsing
This commit is contained in:
parent
91d88dc58e
commit
fdff675462
2 changed files with 62 additions and 37 deletions
50
tmd.go
Normal file
50
tmd.go
Normal file
|
@ -0,0 +1,50 @@
|
|||
package wiiudownloader
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"io"
|
||||
)
|
||||
|
||||
type TMD struct {
|
||||
TitleVersion uint16
|
||||
ContentCount uint16
|
||||
Contents []Content
|
||||
}
|
||||
|
||||
func parseTMD(data []byte) (*TMD, error) {
|
||||
tmd := &TMD{}
|
||||
reader := bytes.NewReader(data)
|
||||
|
||||
reader.Seek(476, io.SeekStart)
|
||||
|
||||
if err := binary.Read(reader, binary.BigEndian, &tmd.TitleVersion); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := binary.Read(reader, binary.BigEndian, &tmd.ContentCount); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
tmd.Contents = make([]Content, tmd.ContentCount)
|
||||
|
||||
for i := 0; i < int(tmd.ContentCount); i++ {
|
||||
offset := 0xB04 + (0x30 * i)
|
||||
|
||||
reader.Seek(int64(offset), io.SeekStart)
|
||||
if err := binary.Read(reader, binary.BigEndian, &tmd.Contents[i].ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
reader.Seek(2, io.SeekCurrent)
|
||||
|
||||
if err := binary.Read(reader, binary.BigEndian, &tmd.Contents[i].Type); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := binary.Read(reader, binary.BigEndian, &tmd.Contents[i].Size); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return tmd, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue