summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorGravatar Julien BLACHE2010-04-18 15:17:58 +0200
committerGravatar Jonathan Beck2010-04-18 15:17:58 +0200
commit33b8a1281f6fdaa9602956ae20e629b58a2e31ae (patch)
tree230505465f1eebbdd25efb80db1e6b863fde7650 /main.c
parenteb618a0c5c7a3893fc18a8f1e5d39854aa25c597 (diff)
downloadlibplist-33b8a1281f6fdaa9602956ae20e629b58a2e31ae.tar.gz
libplist-33b8a1281f6fdaa9602956ae20e629b58a2e31ae.tar.bz2
Endianness, alignment and type-punning fixes for binary plist support
- endianness issues: on big endian machines, writing out only part of an integer was broken (get_needed_bytes(x) < sizeof(x)) -> shift integer before memcpy() on big endian machines - alignment issues: unaligned reads when loading binary plist. Leads to slow runtime performance (kernel trapping and fixing things up), SIGBUS (kernel not helping us out) -> introduce get_unaligned() and have the compiler generate the code needed for the unaligned access (note that there remains unaligned accesses that I haven't been able to track down - I've seen 2 of them with test #2) - type-punning issues: breaking strict aliasing rules can lead to unexpected results as the compiler takes full advantage of the aliasing while optimizing -> introduce the plist_uint_ptr union instead of casting pointers Tested on amd64, alpha and hppa.
Diffstat (limited to 'main.c')
0 files changed, 0 insertions, 0 deletions