fix(payload): switch raw payload metadata fields from u32 to u64

This commit is contained in:
vxtls 2026-03-15 13:31:19 -04:00
parent b8785e3742
commit c742563d3b
4 changed files with 73 additions and 60 deletions

View file

@ -43,10 +43,10 @@ The flow is:
### Format
- Magic: `LBPAYLD1` (8 bytes)
- Then: little-endian `u32` file count
- Then: little-endian `u64` file count
- Repeated entries:
- little-endian `u32` name length
- little-endian `u32` file size
- little-endian `u64` name length
- little-endian `u64` file size
- file name bytes (no terminator)
- file bytes
@ -69,21 +69,21 @@ set -e
out="${1:-external.img}"
list="${2:-external.list}"
write_u32le() {
write_u64le() {
v="$1"
printf '%08x' "$v" | sed -E 's/(..)(..)(..)(..)/\4\3\2\1/' | xxd -r -p
printf '%016x' "$v" | sed -E 's/(..)(..)(..)(..)(..)(..)(..)(..)/\8\7\6\5\4\3\2\1/' | xxd -r -p
}
count="$(wc -l < "${list}" | tr -d ' ')"
: > "${out}"
printf 'LBPAYLD1' >> "${out}"
write_u32le "${count}" >> "${out}"
write_u64le "${count}" >> "${out}"
while read -r name path; do
[ -n "${name}" ] || continue
size="$(wc -c < "${path}" | tr -d ' ')"
write_u32le "${#name}" >> "${out}"
write_u32le "${size}" >> "${out}"
write_u64le "${#name}" >> "${out}"
write_u64le "${size}" >> "${out}"
printf '%s' "${name}" >> "${out}"
cat "${path}" >> "${out}"
done < "${list}"