From 8ed40e211856f10be38dcf3f55acf6aef497d368 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Tue, 10 Dec 2002 23:48:46 +0000 Subject: [PATCH] fixed code that no longer works with gcc 3.2 agressive alias analysis --- src/ca/udpiiu.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/ca/udpiiu.cpp b/src/ca/udpiiu.cpp index 5dc5a80b2..e06e5caea 100644 --- a/src/ca/udpiiu.cpp +++ b/src/ca/udpiiu.cpp @@ -591,10 +591,6 @@ bool udpiiu::searchRespAction ( // X aCC 361 epicsGuard < callbackMutex > & cbLocker, const caHdr &msg, const osiSockAddr &addr, const epicsTime & currentTime ) { - osiSockAddr serverAddr; - unsigned minorVersion; - ca_uint16_t *pMinorVersion; - if ( addr.sa.sa_family != AF_INET ) { return false; } @@ -604,9 +600,16 @@ bool udpiiu::searchRespAction ( // X aCC 361 * is appended to the end of each search reply. * This value is ignored by earlier clients. */ - if ( msg.m_postsize >= sizeof (*pMinorVersion) ){ - pMinorVersion = (ca_uint16_t *) ( &msg + 1 ); - minorVersion = epicsNTOH16 ( *pMinorVersion ); + unsigned minorVersion; + if ( msg.m_postsize >= sizeof (minorVersion) ){ + /* + * care is taken here not to break gcc 3.2 aggressive alias + * analysis rules + */ + ca_uint8_t * pPayLoad = ( ca_uint8_t *) ( &msg + 1 ); + unsigned byte1 = pPayLoad[0]; + unsigned byte2 = pPayLoad[1]; + minorVersion = ( byte1 << 8u ) | byte2; } else { minorVersion = CA_UKN_MINOR_VERSION; @@ -616,6 +619,7 @@ bool udpiiu::searchRespAction ( // X aCC 361 * the type field is abused to carry the port number * so that we can have multiple servers on one host */ + osiSockAddr serverAddr; serverAddr.ia.sin_family = AF_INET; if ( CA_V48 ( minorVersion ) ) { if ( msg.m_cid != INADDR_BROADCAST ) {