[systemd-devel] [PATCH] sd-dhcp-client: shutup gcc aliasing warning
Lennart Poettering
lennart at poettering.net
Sun Apr 12 11:18:40 PDT 2015
On Sat, 11.04.15 18:39, Shawn Landden (shawn at churchofgit.com) wrote:
> we only access this as void* so there is no violation
> ---
> src/libsystemd-network/sd-dhcp-client.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
> index c44392e..bf57d4b 100644
> --- a/src/libsystemd-network/sd-dhcp-client.c
> +++ b/src/libsystemd-network/sd-dhcp-client.c
> @@ -1470,7 +1470,7 @@ static int client_receive_message_udp(sd_event_source *s, int fd,
> _cleanup_free_ DHCPMessage *message = NULL;
> int buflen = 0, len, r;
> const struct ether_addr zero_mac = { { 0, 0, 0, 0, 0, 0 } };
> - const struct ether_addr *expected_chaddr = NULL;
> + const void *expected_chaddr = NULL;
> uint8_t expected_hlen = 0;
>
> assert(s);
> @@ -1515,7 +1515,7 @@ static int client_receive_message_udp(sd_event_source *s, int fd,
>
> if (client->arp_type == ARPHRD_ETHER) {
> expected_hlen = ETH_ALEN;
> - expected_chaddr = (const struct ether_addr *) &client->mac_addr;
> + expected_chaddr = &client->mac_addr;
> } else {
> /* Non-ethernet links expect zero chaddr */
> expected_hlen = 0;
The right way to fix aliasing issues are unions. In this case, I
figure sd_dhcp_client should contain a union for the ethernet address,
containing the array for MAX_MAC_ADDR_LEN as well as a proper struct
ether_addr. it can even be an anonymous union. With that all aliasing
issues are gone, it would stay typesafe, and more elegant anyway.
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list