summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
authorPedro Giffuni <pfg@apache.org>2017-02-08 15:21:17 +0000
committerPedro Giffuni <pfg@apache.org>2017-02-08 15:21:17 +0000
commitda844070351493b0a4e60db14a1546fb346c1db7 (patch)
treec7f7e1c11213cf038189c442c95c32d4ee45896c /sal
parentf4d433e226052e82002ea7012047bf9f6297b0a3 (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.c40
-rw-r--r--sal/osl/unx/sockimpl.h6
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 {