diff options
author | Marti Maria <info@littlecms.com> | 2016-12-12 22:57:56 +0100 |
---|---|---|
committer | Marti Maria <info@littlecms.com> | 2016-12-12 22:57:56 +0100 |
commit | 58e1bd7e06f8c98e7d304e4b3ac6c76248be8a1f (patch) | |
tree | b2d175002ef5b77e50910a187319d4cea5f4e428 /src/cmsnamed.c | |
parent | f4a958ec4a7623bf56a10ea46a9163d4bbcb6f64 (diff) | |
download | lcms2-58e1bd7e06f8c98e7d304e4b3ac6c76248be8a1f.tar.gz |
Hopefully fix endianess of MLU
Previous bug caused by several factors, not well identified.
Diffstat (limited to 'src/cmsnamed.c')
-rw-r--r-- | src/cmsnamed.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/cmsnamed.c b/src/cmsnamed.c index a8ed7ff..1b75181 100644 --- a/src/cmsnamed.c +++ b/src/cmsnamed.c @@ -178,31 +178,32 @@ cmsBool AddMLUBlock(cmsMLU* mlu, cmsUInt32Number size, const wchar_t *Block, return TRUE; } -// Convert from a 3-char code to a cmsUInt16Number. It is done inthis way because some +// Convert from a 3-char code to a cmsUInt16Number. It is done in this way because some // compilers don't properly align beginning of strings static cmsUInt16Number strTo16(const char str[3]) { - cmsUInt16Number n = ((cmsUInt16Number) str[0] << 8) | str[1]; + const cmsUInt8Number* ptr8 = (const cmsUInt8Number*)str; + cmsUInt16Number n = ((cmsUInt16Number) ptr8[1] << 8) | ptr8[0]; - return n; // Always big endian in this case + return _cmsAdjustEndianess16(n); } static void strFrom16(char str[3], cmsUInt16Number n) { - // Assiming this would be aligned + // Assuming this would be aligned union { cmsUInt16Number n; - char str[2]; + cmsUInt8Number str[2]; } c; - c.n = n; // Always big endian in this case + c.n = _cmsAdjustEndianess16(n); - str[0] = c.str[0]; str[1] = c.str[1]; str[2] = 0; + str[0] = (char) c.str[0]; str[1] = (char) c.str[1]; str[2] = (char) 0; } |