rpcbind: Remove a strict-aliasing warning
Subsystems (2)
PATCH 1/1 rpcbind: Remove a strict-aliasing warning
src/util.c: In function ‘in6_fillscopeid’:src/util.c:106:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
ifindex = ntohs(*(u_int16_t *)&sin6->sin6_addr.s6_addr[2]); ^
src/util.c:109:4: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
*(u_int16_t *)&sin6->sin6_addr.s6_addr[2] = 0;
Signed-off-by Steve Dickson <[email protected]>
--- src/util.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
src/util.c +4 -2
@@ -101,12 +101,14 @@ static void in6_fillscopeid(struct sockaddr_in6 *sin6) {u_int16_t ifindex; +u_int16_t *addr;if (IN6_IS_ADDR_LINKLOCAL (&sin6->sin6_addr)) { - ifindex =ntohs (*(u_int16_t *)&sin6->sin6_addr.s6_addr[2 ]); + addr = (u_int16_t *)&sin6->sin6_addr.s6_addr[2 ]; + ifindex =ntohs (*addr);if (sin6->sin6_scope_id ==0 && ifindex !=0 ) { sin6->sin6_scope_id = ifindex; - *(u_int16_t *)&sin6->sin6_addr.s6_addr[2 ] =0 ; + *addr =0 ; } } }
Signature · 1 line
1.9.3
Quoted 11 lines · Steve Dickson
src/util.c: In function ‘in6_fillscopeid’:src/util.c:106:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]ifindex = ntohs(*(u_int16_t *)&sin6->sin6_addr.s6_addr[2]); ^
src/util.c:109:4: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]*(u_int16_t *)&sin6->sin6_addr.s6_addr[2] = 0;Signed-off-by Steve Dickson <[email protected]>
Committed!
steved.
Quoted 26 lines
--- src/util.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)src/util.c +4
-2@@ -101,12 +101,14 @@ static void in6_fillscopeid(struct sockaddr_in6 *sin6) {u_int16_t ifindex; +u_int16_t *addr;if (IN6_IS_ADDR_LINKLOCAL (&sin6->sin6_addr)) { - ifindex =ntohs (*(u_int16_t *)&sin6->sin6_addr.s6_addr[2 ]); + addr = (u_int16_t *)&sin6->sin6_addr.s6_addr[2 ]; + ifindex =ntohs (*addr);if (sin6->sin6_scope_id ==0 && ifindex !=0 ) { sin6->sin6_scope_id = ifindex; - *(u_int16_t *)&sin6->sin6_addr.s6_addr[2 ] =0 ; + *addr =0 ; } } }