diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-02-11 15:29:57 +0000 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2013-02-11 15:48:45 +0000 |
commit | 07c3bc01cb31b801a11421e1d41c49b3826d4c7a (patch) | |
tree | b750ca0afdedd72557eb9960f94eb7d154952575 /registry | |
parent | 7e2cae964edab85e43d7ce0141d46d962d0ccd4c (diff) |
WaE: strict-aliasing issues
Change-Id: I394b61fac90e1c2c26b1a4f073b87a5d3ae3e666
Reviewed-on: https://gerrit.libreoffice.org/2105
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Tested-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'registry')
-rw-r--r-- | registry/tools/reg2bin.cxx | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/registry/tools/reg2bin.cxx b/registry/tools/reg2bin.cxx index 2a1ca05152c3..3f42f28fb5bc 100644 --- a/registry/tools/reg2bin.cxx +++ b/registry/tools/reg2bin.cxx @@ -956,27 +956,34 @@ void write64(osl::File & file, sal_uInt64 value) { } void writeIso60599Binary32(osl::File & file, float value) { - unsigned char buf[4]; - *reinterpret_cast< float * >(buf) = value; + union { + unsigned char buf[4]; + float f; + } sa; + sa.f = value; // assuming float is ISO 60599 binary32 #if defined OSL_BIGENDIAN - std::swap(buf[0], buf[3]); - std::swap(buf[1], buf[2]); + std::swap(sa.buf[0], sa.buf[3]); + std::swap(sa.buf[1], sa.buf[2]); #endif - write(file, buf, SAL_N_ELEMENTS(buf)); + write(file, sa.buf, SAL_N_ELEMENTS(sa.buf)); } void writeIso60599Binary64(osl::File & file, double value) { - unsigned char buf[8]; - *reinterpret_cast< double * >(buf) = value; + union + { + unsigned char buf[8]; + float d; + } sa; + sa.d = value; // assuming double is ISO 60599 binary64 #if defined OSL_BIGENDIAN - std::swap(buf[0], buf[7]); - std::swap(buf[1], buf[6]); - std::swap(buf[2], buf[5]); - std::swap(buf[3], buf[4]); + std::swap(sa.buf[0], sa.buf[7]); + std::swap(sa.buf[1], sa.buf[6]); + std::swap(sa.buf[2], sa.buf[5]); + std::swap(sa.buf[3], sa.buf[4]); #endif - write(file, buf, SAL_N_ELEMENTS(buf)); + write(file, sa.buf, SAL_N_ELEMENTS(sa.buf)); } rtl::OString toAscii(rtl::OUString const & name) { |