diff options
author | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2011-12-14 15:52:06 +0059 |
---|---|---|
committer | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2011-12-14 15:52:06 +0059 |
commit | e494389d542f755a11a3dab66167efe547170f92 (patch) | |
tree | 514e02ac25f7ee68e2960e3a01e173b04171a45c | |
parent | 6971ffdb3487c7fbb777f24b926e64184b22da55 (diff) | |
download | base-e494389d542f755a11a3dab66167efe547170f92.tar.gz |
frameworks/base: Fix various aliasing violations
Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r-- | core/jni/Android.mk | 1 | ||||
-rw-r--r-- | libs/hwui/FontRenderer.cpp | 9 | ||||
-rw-r--r-- | libs/hwui/ShapeCache.h | 34 | ||||
-rw-r--r-- | libs/hwui/TextDropShadowCache.h | 4 | ||||
-rw-r--r-- | media/libstagefright/codecs/avc/enc/src/motion_comp.cpp | 8 | ||||
-rw-r--r-- | media/libstagefright/httplive/LiveSession.cpp | 5 | ||||
-rw-r--r-- | media/libstagefright/rtsp/ARTPConnection.cpp | 24 | ||||
-rw-r--r-- | media/libstagefright/rtsp/ARTSPConnection.cpp | 7 | ||||
-rw-r--r-- | media/libstagefright/rtsp/MyHandler.h | 16 |
9 files changed, 70 insertions, 38 deletions
diff --git a/core/jni/Android.mk b/core/jni/Android.mk index 59a03e7833c5..aa9c8e23ffb7 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -4,6 +4,7 @@ include $(CLEAR_VARS) LOCAL_CFLAGS += -DHAVE_CONFIG_H -DKHTML_NO_EXCEPTIONS -DGKWQ_NO_JAVA LOCAL_CFLAGS += -DNO_SUPPORT_JS_BINDING -DQT_NO_WHEELEVENT -DKHTML_NO_XBL LOCAL_CFLAGS += -U__APPLE__ +LOCAL_CFLAGS += -fno-strict-aliasing ifeq ($(TARGET_ARCH), arm) LOCAL_CFLAGS += -DPACKED="__attribute__ ((packed))" diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp index a077cbc55f34..08d31de2ed5c 100644 --- a/libs/hwui/FontRenderer.cpp +++ b/libs/hwui/FontRenderer.cpp @@ -692,12 +692,15 @@ void FontRenderer::setFont(SkPaint* paint, uint32_t fontId, float fontSize) { } const float skewX = paint->getTextSkewX(); - uint32_t italicStyle = *(uint32_t*) &skewX; + uint32_t italicStyle; + memcpy(&italicStyle, &skewX, sizeof(italicStyle)); const float scaleXFloat = paint->getTextScaleX(); - uint32_t scaleX = *(uint32_t*) &scaleXFloat; + uint32_t scaleX; + memcpy(&scaleX, &scaleXFloat, sizeof(scaleX)); SkPaint::Style style = paint->getStyle(); const float strokeWidthFloat = paint->getStrokeWidth(); - uint32_t strokeWidth = *(uint32_t*) &strokeWidthFloat; + uint32_t strokeWidth; + memcpy(&strokeWidth, &strokeWidthFloat, sizeof(strokeWidth)); mCurrentFont = Font::create(this, fontId, fontSize, flags, italicStyle, scaleX, style, strokeWidth); diff --git a/libs/hwui/ShapeCache.h b/libs/hwui/ShapeCache.h index 0660b690a1cd..0b37828f8dee 100644 --- a/libs/hwui/ShapeCache.h +++ b/libs/hwui/ShapeCache.h @@ -90,9 +90,9 @@ struct ShapeCacheEntry { cap = SkPaint::kDefault_Cap; style = SkPaint::kFill_Style; float v = 4.0f; - miter = *(uint32_t*) &v; + memcpy(&miter, &v, sizeof(miter)); v = 1.0f; - strokeWidth = *(uint32_t*) &v; + memcpy(&strokeWidth, &v, sizeof(strokeWidth)); pathEffect = NULL; } @@ -101,9 +101,9 @@ struct ShapeCacheEntry { join = paint->getStrokeJoin(); cap = paint->getStrokeCap(); float v = paint->getStrokeMiter(); - miter = *(uint32_t*) &v; + memcpy(&miter, &v, sizeof(miter)); v = paint->getStrokeWidth(); - strokeWidth = *(uint32_t*) &v; + memcpy(&strokeWidth, &v, sizeof(strokeWidth)); style = paint->getStyle(); pathEffect = paint->getPathEffect(); } @@ -148,10 +148,10 @@ protected: struct RoundRectShapeCacheEntry: public ShapeCacheEntry { RoundRectShapeCacheEntry(float width, float height, float rx, float ry, SkPaint* paint): ShapeCacheEntry(ShapeCacheEntry::kShapeRoundRect, paint) { - mWidth = *(uint32_t*) &width; - mHeight = *(uint32_t*) &height; - mRx = *(uint32_t*) ℞ - mRy = *(uint32_t*) &ry; + memcpy(&mWidth, &width, sizeof(mWidth)); + memcpy(&mHeight, &height, sizeof(mHeight)); + memcpy(&mRx, &rx, sizeof(mRx)); + memcpy(&mRy, &ry, sizeof(mRy)); } RoundRectShapeCacheEntry(): ShapeCacheEntry() { @@ -185,7 +185,7 @@ private: struct CircleShapeCacheEntry: public ShapeCacheEntry { CircleShapeCacheEntry(float radius, SkPaint* paint): ShapeCacheEntry(ShapeCacheEntry::kShapeCircle, paint) { - mRadius = *(uint32_t*) &radius; + memcpy(&mRadius, &radius, sizeof(mRadius)); } CircleShapeCacheEntry(): ShapeCacheEntry() { @@ -207,8 +207,8 @@ private: struct OvalShapeCacheEntry: public ShapeCacheEntry { OvalShapeCacheEntry(float width, float height, SkPaint* paint): ShapeCacheEntry(ShapeCacheEntry::kShapeOval, paint) { - mWidth = *(uint32_t*) &width; - mHeight = *(uint32_t*) &height; + memcpy(&mWidth, &width, sizeof(mWidth)); + memcpy(&mHeight, &height, sizeof(mHeight)); } OvalShapeCacheEntry(): ShapeCacheEntry() { @@ -233,8 +233,8 @@ private: struct RectShapeCacheEntry: public ShapeCacheEntry { RectShapeCacheEntry(float width, float height, SkPaint* paint): ShapeCacheEntry(ShapeCacheEntry::kShapeRect, paint) { - mWidth = *(uint32_t*) &width; - mHeight = *(uint32_t*) &height; + memcpy(&mWidth, &width, sizeof(mWidth)); + memcpy(&mHeight, &height, sizeof(mHeight)); } RectShapeCacheEntry(): ShapeCacheEntry() { @@ -260,10 +260,10 @@ struct ArcShapeCacheEntry: public ShapeCacheEntry { ArcShapeCacheEntry(float width, float height, float startAngle, float sweepAngle, bool useCenter, SkPaint* paint): ShapeCacheEntry(ShapeCacheEntry::kShapeArc, paint) { - mWidth = *(uint32_t*) &width; - mHeight = *(uint32_t*) &height; - mStartAngle = *(uint32_t*) &startAngle; - mSweepAngle = *(uint32_t*) &sweepAngle; + memcpy(&mWidth, &width, sizeof(mWidth)); + memcpy(&mHeight, &height, sizeof(mHeight)); + memcpy(&mStartAngle, &startAngle, sizeof(mStartAngle)); + memcpy(&mSweepAngle, &sweepAngle, sizeof(mSweepAngle)); mUseCenter = useCenter ? 1 : 0; } diff --git a/libs/hwui/TextDropShadowCache.h b/libs/hwui/TextDropShadowCache.h index e2bdde1eca89..35eb4cc9f571 100644 --- a/libs/hwui/TextDropShadowCache.h +++ b/libs/hwui/TextDropShadowCache.h @@ -49,10 +49,10 @@ struct ShadowText { } const float skewX = paint->getTextSkewX(); - italicStyle = *(uint32_t*) &skewX; + memcpy(&italicStyle, &skewX, sizeof(italicStyle)); const float scaleXFloat = paint->getTextScaleX(); - scaleX = *(uint32_t*) &scaleXFloat; + memcpy(&scaleX, &scaleXFloat, sizeof(scaleX)); } ~ShadowText() { diff --git a/media/libstagefright/codecs/avc/enc/src/motion_comp.cpp b/media/libstagefright/codecs/avc/enc/src/motion_comp.cpp index ac62d782c83d..fff65ebab0dc 100644 --- a/media/libstagefright/codecs/avc/enc/src/motion_comp.cpp +++ b/media/libstagefright/codecs/avc/enc/src/motion_comp.cpp @@ -1315,7 +1315,11 @@ void eDiagonalInterpMC(uint8 *in1, uint8 *in2, int inpitch, int result; uint8 *p_cur, *p_ref, *p_tmp8; int curr_offset, ref_offset; - uint8 tmp_res[24][24], tmp_in[24][24]; + union { + uint8 tmp_res[24][24]; + uint32 tmp_res32[24][24/4]; + }; + uint8 tmp_in[24][24]; uint32 *p_tmp; uint32 tmp, pkres, tmp_result; int32 r0, r1, r2, r3, r4, r5; @@ -1333,7 +1337,7 @@ void eDiagonalInterpMC(uint8 *in1, uint8 *in2, int inpitch, ref_offset = 24-blkwidth; }*/ - p_tmp = (uint32*) & (tmp_res[0][0]); + p_tmp = & (tmp_res32[0][0]); for (j = blkheight; j > 0; j--) { r13 = 0; diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp index f67cdace819c..a13ee0b35a0e 100644 --- a/media/libstagefright/httplive/LiveSession.cpp +++ b/media/libstagefright/httplive/LiveSession.cpp @@ -192,8 +192,9 @@ void LiveSession::onConnect(const sp<AMessage> &msg) { sp<AMessage> meta; playlist->itemAt(i, &item.mURI, &meta); - unsigned long bandwidth; - CHECK(meta->findInt32("bandwidth", (int32_t *)&item.mBandwidth)); + int32_t bandwidth; + CHECK(meta->findInt32("bandwidth", &bandwidth)); + item.mBandwidth = bandwidth; mBandwidthItems.push(item); } diff --git a/media/libstagefright/rtsp/ARTPConnection.cpp b/media/libstagefright/rtsp/ARTPConnection.cpp index 47de4e0938d0..a77878b3d5fa 100644 --- a/media/libstagefright/rtsp/ARTPConnection.cpp +++ b/media/libstagefright/rtsp/ARTPConnection.cpp @@ -120,21 +120,24 @@ void ARTPConnection::MakePortPair( start &= ~1; for (unsigned port = start; port < 65536; port += 2) { - struct sockaddr_in addr; + union { + struct sockaddr_in addr; + struct sockaddr addr_generic; + }; memset(addr.sin_zero, 0, sizeof(addr.sin_zero)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(port); if (bind(*rtpSocket, - (const struct sockaddr *)&addr, sizeof(addr)) < 0) { + &addr_generic, sizeof(addr)) < 0) { continue; } addr.sin_port = htons(port + 1); if (bind(*rtcpSocket, - (const struct sockaddr *)&addr, sizeof(addr)) == 0) { + &addr_generic, sizeof(addr)) == 0) { *rtpPort = port; return; } @@ -327,9 +330,14 @@ void ARTPConnection::onPollStreams() { if (buffer->size() > 0) { LOGV("Sending RR..."); + union { + sockaddr_in *sa_in; + sockaddr *sa; + }; + sa_in = &s->mRemoteRTCPAddr; ssize_t n = sendto( s->mRTCPSocket, buffer->data(), buffer->size(), 0, - (const struct sockaddr *)&s->mRemoteRTCPAddr, + sa, sizeof(s->mRemoteRTCPAddr)); CHECK_EQ(n, (ssize_t)buffer->size()); @@ -350,12 +358,18 @@ status_t ARTPConnection::receive(StreamInfo *s, bool receiveRTP) { (!receiveRTP && s->mNumRTCPPacketsReceived == 0) ? sizeof(s->mRemoteRTCPAddr) : 0; + union { + sockaddr_in *sa_in; + sockaddr *sa; + }; + sa_in = &s->mRemoteRTCPAddr; + ssize_t nbytes = recvfrom( receiveRTP ? s->mRTPSocket : s->mRTCPSocket, buffer->data(), buffer->capacity(), 0, - remoteAddrLen > 0 ? (struct sockaddr *)&s->mRemoteRTCPAddr : NULL, + remoteAddrLen > 0 ? sa : NULL, remoteAddrLen > 0 ? &remoteAddrLen : NULL); if (nbytes < 0) { diff --git a/media/libstagefright/rtsp/ARTSPConnection.cpp b/media/libstagefright/rtsp/ARTSPConnection.cpp index bd0e49158633..3deb9023ac5a 100644 --- a/media/libstagefright/rtsp/ARTSPConnection.cpp +++ b/media/libstagefright/rtsp/ARTSPConnection.cpp @@ -263,14 +263,17 @@ void ARTSPConnection::onConnect(const sp<AMessage> &msg) { MakeSocketBlocking(mSocket, false); - struct sockaddr_in remote; + union { + struct sockaddr_in remote; + struct sockaddr remote_generic; + }; memset(remote.sin_zero, 0, sizeof(remote.sin_zero)); remote.sin_family = AF_INET; remote.sin_addr.s_addr = *(in_addr_t *)ent->h_addr; remote.sin_port = htons(port); int err = ::connect( - mSocket, (const struct sockaddr *)&remote, sizeof(remote)); + mSocket, &remote_generic, sizeof(remote)); reply->setInt32("server-ip", ntohl(remote.sin_addr.s_addr)); diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h index 812881305787..e144b7a9a422 100644 --- a/media/libstagefright/rtsp/MyHandler.h +++ b/media/libstagefright/rtsp/MyHandler.h @@ -201,9 +201,12 @@ struct MyHandler : public AHandler { } static void addSDES(int s, const sp<ABuffer> &buffer) { - struct sockaddr_in addr; + union { + struct sockaddr_in addr; + struct sockaddr addr_generic; + }; socklen_t addrSize = sizeof(addr); - CHECK_EQ(0, getsockname(s, (sockaddr *)&addr, &addrSize)); + CHECK_EQ(0, getsockname(s, &addr_generic, &addrSize)); uint8_t *data = buffer->data() + buffer->size(); data[0] = 0x80 | 1; @@ -259,7 +262,10 @@ struct MyHandler : public AHandler { // rtp/rtcp ports to poke a hole into the firewall for future incoming // packets. We're going to send an RR/SDES RTCP packet to both of them. bool pokeAHole(int rtpSocket, int rtcpSocket, const AString &transport) { - struct sockaddr_in addr; + union { + struct sockaddr_in addr; + struct sockaddr addr_generic; + }; memset(addr.sin_zero, 0, sizeof(addr.sin_zero)); addr.sin_family = AF_INET; @@ -328,7 +334,7 @@ struct MyHandler : public AHandler { ssize_t n = sendto( rtpSocket, buf->data(), buf->size(), 0, - (const sockaddr *)&addr, sizeof(addr)); + &addr_generic, sizeof(addr)); if (n < (ssize_t)buf->size()) { LOGE("failed to poke a hole for RTP packets"); @@ -339,7 +345,7 @@ struct MyHandler : public AHandler { n = sendto( rtcpSocket, buf->data(), buf->size(), 0, - (const sockaddr *)&addr, sizeof(addr)); + &addr_generic, sizeof(addr)); if (n < (ssize_t)buf->size()) { LOGE("failed to poke a hole for RTCP packets"); |