Skip to content

Commit

Permalink
decode: apple_bookmark: simplifies flag decoding
Browse files Browse the repository at this point in the history
  • Loading branch information
dgmcdona committed Dec 8, 2022
1 parent a162e07 commit 330d5f7
Showing 1 changed file with 4 additions and 20 deletions.
24 changes: 4 additions & 20 deletions format/applebookmark/apple_bookmark.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,22 +150,12 @@ func decodeFlagDataObject(d *decode.D, flagFn func(d *decode.D)) {
d.FieldU32("length", d.AssertU(dataObjectLen))
d.FieldU32("raw_type", dataTypeMap, d.AssertU(dataTypeData))
d.FieldValueStr("type", "flag_data")
decodePropertyFlags(d, flagFn)
d.FieldStruct("property_flags", flagFn)
d.FieldStruct("enabled_property_flags", flagFn)
d.FieldRawLen("reserved", 64)
})
}

type dataObjectDecoder struct {
flagFn func(d *decode.D)
}

func (dod *dataObjectDecoder) decode(d *decode.D) {
decodeFlagDataObject(d, dod.flagFn)
}

var resourcePropDecoder = &dataObjectDecoder{decodeTgtPropertyFlagBits}
var volumePropDecoder = &dataObjectDecoder{decodeVolPropertyFlagBits}

func decodeTgtPropertyFlagBits(d *decode.D) {
start := d.Pos()
d.FieldBool("is_hidden")
Expand Down Expand Up @@ -251,12 +241,6 @@ func decodeVolPropertyFlagBits(d *decode.D) {
d.FieldBool("supports_volume_sizes")
}

func decodePropertyFlags(d *decode.D, bitFn func(d *decode.D)) {
d.FieldStruct("property_flags", bitFn)

d.FieldStruct("enabled_property_flags", bitFn)
}

var cocoaTimeEpochDate = time.Date(2001, time.January, 1, 0, 0, 0, 0, time.UTC)

type tocHeader struct {
Expand Down Expand Up @@ -286,9 +270,9 @@ func (hdr *tocHeader) decodeEntries(d *decode.D) {

switch entry.key {
case elementTypeTargetFlags:
d.SeekAbs(entry.recordOffset, resourcePropDecoder.decode)
d.SeekAbs(entry.recordOffset, func(d *decode.D) { decodeFlagDataObject(d, decodeTgtPropertyFlagBits) })
case elementTypeVolumeFlags:
d.SeekAbs(entry.recordOffset, volumePropDecoder.decode)
d.SeekAbs(entry.recordOffset, func(d *decode.D) { decodeFlagDataObject(d, decodeVolPropertyFlagBits) })
default:
d.SeekAbs(entry.recordOffset, makeDecodeRecord())
}
Expand Down

0 comments on commit 330d5f7

Please sign in to comment.