When defining a format it helps to a) get the endianness right when you
explicitly state what it is and b) define things in terms of fields that
exist rather than fields that don't.
(A bunch of changes of names during implementation were not reflected in
these comments...)
Thanks to Jose "Eye of the Eagle" Marchesi for spotting these.
include/
* ctf.h (struct ctf_archive) [ctfa_ctfs]: The size element of
this is in little-endian byte order, not network byte order.
(struct ctf_archive_modent): This is positioned right after the
end fo the struct ctf_archive, not at the offset of a
nonexistent field. The number of elements in the array depends
on ctfa_ndicts, not another nonexistent field.
/* Offset of the name table. */
uint64_t ctfa_names;
- /* Offset of the CTF table. Each element starts with a size (a uint64_t
- in network byte order) then a ctf_dict_t of that size. */
+ /* Offset of the CTF table. Each element starts with a size (a little-
+ endian uint64_t) then a ctf_dict_t of that size. */
uint64_t ctfa_ctfs;
};
-/* An array of ctfa_nnamed of this structure lies at
- ctf_archive[ctf_archive->ctfa_modents] and gives the ctfa_ctfs or
+/* An array of ctfa_ndicts of this structure lies at
+ ctf_archive[sizeof(struct ctf_archive)] and gives the ctfa_ctfs or
ctfa_names-relative offsets of each name or ctf_dict_t. */
typedef struct ctf_archive_modent