diff options
author | Pedro Giffuni <pfg@apache.org> | 2017-02-08 15:21:17 +0000 |
---|---|---|
committer | Pedro Giffuni <pfg@apache.org> | 2017-02-08 15:21:17 +0000 |
commit | da844070351493b0a4e60db14a1546fb346c1db7 (patch) | |
tree | c7f7e1c11213cf038189c442c95c32d4ee45896c /sal | |
parent | f4d433e226052e82002ea7012047bf9f6297b0a3 (diff) |
i101100 - Fix some aliasing issues.
This is a very small part of a patch submitted by Caolan McNamara on
2009 to help OOo work with -fstrict-aliasing. It is not complete and for
now I omitted adding -fno-strict-aliasing to many makefiles.
This does require a lot more attention and will have to be completed at
some point because newer versions of GCC enable strict-aliasing with most
optimization levels.
Notes
Notes:
prefer: 11513ddf5b05cb7b3c1e91f9728159b9be3a5da2
Diffstat (limited to 'sal')
-rw-r--r-- | sal/osl/unx/pipe.c | 40 | ||||
-rw-r--r-- | sal/osl/unx/sockimpl.h | 6 |
2 files changed, 29 insertions, 17 deletions
diff --git a/sal/osl/unx/pipe.c b/sal/osl/unx/pipe.c index eb48daea299e..298ce8528296 100644 --- a/sal/osl/unx/pipe.c +++ b/sal/osl/unx/pipe.c @@ -163,7 +163,11 @@ oslPipe SAL_CALL osl_psz_createPipe(const sal_Char *pszPipeName, oslPipeOptions { int Flags; size_t len; - struct sockaddr_un addr; + union + { + struct sockaddr addr; + struct sockaddr_un addr_un; + } s; sal_Char name[PATH_MAX + 1]; const sal_Char *pPath; @@ -218,16 +222,16 @@ oslPipe SAL_CALL osl_psz_createPipe(const sal_Char *pszPipeName, oslPipeOptions } } - memset(&addr, 0, sizeof(addr)); + memset(&s.addr_un, 0, sizeof(s.addr_un)); OSL_TRACE("osl_createPipe : Pipe Name '%s'",name); - addr.sun_family = AF_UNIX; - strncpy(addr.sun_path, name, sizeof(addr.sun_path)); + s.addr_un.sun_family = AF_UNIX; + strncpy(s.addr_un.sun_path, name, sizeof(s.addr_un.sun_path)); #if defined(FREEBSD) - len = SUN_LEN(&addr); + len = SUN_LEN(&s.addr_un); #else - len = sizeof(addr); + len = sizeof(s.addr_un); #endif if ( Options & osl_Pipe_CREATE ) @@ -238,7 +242,7 @@ oslPipe SAL_CALL osl_psz_createPipe(const sal_Char *pszPipeName, oslPipeOptions if ( ( stat(name, &status) == 0) && ( S_ISSOCK(status.st_mode) || S_ISFIFO(status.st_mode) ) ) { - if ( connect(pPipe->m_Socket,(struct sockaddr *)&addr,len) >= 0 ) + if ( connect(pPipe->m_Socket,&s.addr,len) >= 0 ) { OSL_TRACE("osl_createPipe : Pipe already in use. Errno: %d; %s\n",errno,strerror(errno)); close (pPipe->m_Socket); @@ -250,7 +254,7 @@ oslPipe SAL_CALL osl_psz_createPipe(const sal_Char *pszPipeName, oslPipeOptions } /* ok, fs clean */ - if ( bind(pPipe->m_Socket, (struct sockaddr *)&addr, len) < 0 ) + if ( bind(pPipe->m_Socket, &s.addr, len) < 0 ) { OSL_TRACE("osl_createPipe : failed to bind socket. Errno: %d; %s\n",errno,strerror(errno)); close (pPipe->m_Socket); @@ -282,7 +286,7 @@ oslPipe SAL_CALL osl_psz_createPipe(const sal_Char *pszPipeName, oslPipeOptions { /* osl_pipe_OPEN */ if ( access(name, F_OK) != -1 ) { - if ( connect( pPipe->m_Socket, (struct sockaddr *)&addr, len) >= 0 ) + if ( connect( pPipe->m_Socket, &s.addr, len) >= 0 ) { return (pPipe); } @@ -321,7 +325,11 @@ void SAL_CALL osl_closePipe( oslPipe pPipe ) int nRet; #if CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT size_t len; - struct sockaddr_un addr; + union + { + struct sockaddr_un addr_un; + struct sockaddr addr; + } s; int fd; #endif int ConnFD; @@ -348,19 +356,19 @@ void SAL_CALL osl_closePipe( oslPipe pPipe ) pPipe->m_bIsInShutdown = sal_True; pPipe->m_Socket = -1; fd = socket(AF_UNIX, SOCK_STREAM, 0); - memset(&addr, 0, sizeof(addr)); + memset(&s.addr_un, 0, sizeof(s.addr_un)); OSL_TRACE("osl_destroyPipe : Pipe Name '%s'",pPipe->m_Name); - addr.sun_family = AF_UNIX; - strncpy(addr.sun_path, pPipe->m_Name, sizeof(addr.sun_path)); + s.addr_un.sun_family = AF_UNIX; + strncpy(s.addr_un.sun_path, pPipe->m_Name, sizeof(s.addr_un.sun_path)); #if defined(FREEBSD) - len = SUN_LEN(&addr); + len = SUN_LEN(&s.addr_un); #else - len = sizeof(addr); + len = sizeof(s.addr_un); #endif - nRet = connect( fd, (struct sockaddr *)&addr, len); + nRet = connect( fd, &s.addr, len); #if OSL_DEBUG_LEVEL > 1 if ( nRet < 0 ) { diff --git a/sal/osl/unx/sockimpl.h b/sal/osl/unx/sockimpl.h index 2e80c9f9a921..7af97330343f 100644 --- a/sal/osl/unx/sockimpl.h +++ b/sal/osl/unx/sockimpl.h @@ -55,7 +55,11 @@ struct oslSocketImpl { struct oslSocketAddrImpl { sal_Int32 m_nRefCount; - struct sockaddr m_sockaddr; + union + { + struct sockaddr m_sockaddr; + struct sockaddr_in m_sockaddr_in; + }; }; struct oslPipeImpl { |