The code that loads ICNS_ICON_VERSION is not portable to platforms where the C type float is not using the IEEE 754 single-precision binary32 floating-point format. Currently it is just reinterpreting the on-disk bits (after endianness conversion) as a native float:
iconVersionNumber = *((float *)(&iconVersion));
Instead it should extract the sign, exponent and mantissa from the on-disk IEEE 754 binary32 format and use C code to create the appropriate float value.
http://en.wikipedia.org/wiki/Single-precision_floating-point_format
The code was changed to use a union between a float and a 32-bit int, in order to avoid a GCC warning, but this doesn't not make it portable.