From: Yu Watanabe Date: Tue, 16 Jan 2018 16:53:00 +0000 (+0900) Subject: dhcp6: fix warnings by clang with -Waddress-of-packed-member X-Git-Tag: v237~92^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=976fade6c122130017d8f340f477db1aa06360bf;p=thirdparty%2Fsystemd.git dhcp6: fix warnings by clang with -Waddress-of-packed-member This fixes the following warnings: ``` [194/1521] Compiling C object 'src/libsystemd-network/systemd-network@sta/dhcp6-option.c.o'. ../../git/systemd/src/libsystemd-network/dhcp6-option.c:110:25: warning: taking address of packed member 'id' of class or structure 'ia_na' may result in an unaligned pointer value [-Waddress-of-packed-member] iaid = &ia->ia_na.id; ^~~~~~~~~~~~ ../../git/systemd/src/libsystemd-network/dhcp6-option.c:115:25: warning: taking address of packed member 'id' of class or structure 'ia_ta' may result in an unaligned pointer value [-Waddress-of-packed-member] iaid = &ia->ia_ta.id; ^~~~~~~~~~~~ 2 warnings generated. ``` --- diff --git a/src/libsystemd-network/dhcp6-option.c b/src/libsystemd-network/dhcp6-option.c index 7c6a6c4e080..df96ad739df 100644 --- a/src/libsystemd-network/dhcp6-option.c +++ b/src/libsystemd-network/dhcp6-option.c @@ -96,9 +96,8 @@ int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code, int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, DHCP6IA *ia) { uint16_t len; - be32_t *iaid; uint8_t *ia_hdr; - size_t ia_buflen, ia_addrlen = 0; + size_t iaid_offset, ia_buflen, ia_addrlen = 0; DHCP6Address *addr; int r; @@ -107,12 +106,12 @@ int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, DHCP6IA *ia) { switch (ia->type) { case SD_DHCP6_OPTION_IA_NA: len = DHCP6_OPTION_IA_NA_LEN; - iaid = &ia->ia_na.id; + iaid_offset = offsetof(DHCP6IA, ia_na); break; case SD_DHCP6_OPTION_IA_TA: len = DHCP6_OPTION_IA_TA_LEN; - iaid = &ia->ia_ta.id; + iaid_offset = offsetof(DHCP6IA, ia_ta); break; default: @@ -128,7 +127,7 @@ int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, DHCP6IA *ia) { *buf += sizeof(DHCP6Option); *buflen -= sizeof(DHCP6Option); - memcpy(*buf, iaid, len); + memcpy(*buf, (char*) ia + iaid_offset, len); *buf += len; *buflen -= len;