diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-07-16 02:43:47 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-07-16 02:43:47 +0200 |
commit | e6be58c2322fab098466d66816d99f67ae5a210f (patch) | |
tree | 0d312815c73b5e61c2ea0a75dda84000a8809c5c /plugins | |
parent | 016c1490e180fa737815bf65f96cc60b1761ed89 (diff) | |
download | connman-e6be58c2322fab098466d66816d99f67ae5a210f.tar.gz connman-e6be58c2322fab098466d66816d99f67ae5a210f.tar.bz2 connman-e6be58c2322fab098466d66816d99f67ae5a210f.zip |
Fix handling of strict-aliasing rules
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/loopback.c | 16 | ||||
-rw-r--r-- | plugins/supplicant.c | 23 |
2 files changed, 23 insertions, 16 deletions
diff --git a/plugins/loopback.c b/plugins/loopback.c index 782853ef..59716c24 100644 --- a/plugins/loopback.c +++ b/plugins/loopback.c @@ -176,7 +176,7 @@ static int setup_hostname(void) static int setup_loopback(void) { struct ifreq ifr; - struct sockaddr_in *addr; + struct sockaddr_in addr; int sk, err; sk = socket(PF_INET, SOCK_DGRAM, 0); @@ -197,9 +197,10 @@ static int setup_loopback(void) goto done; } - addr = (struct sockaddr_in *) &ifr.ifr_addr; - addr->sin_family = AF_INET; - addr->sin_addr.s_addr = inet_addr("127.0.0.1"); + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr("127.0.0.1"); + memcpy(&ifr.ifr_addr, &addr, sizeof(ifr.ifr_addr)); err = ioctl(sk, SIOCSIFADDR, &ifr); if (err < 0) { @@ -208,9 +209,10 @@ static int setup_loopback(void) goto done; } - addr = (struct sockaddr_in *) &ifr.ifr_netmask; - addr->sin_family = AF_INET; - addr->sin_addr.s_addr = inet_addr("255.0.0.0"); + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr("255.0.0.0"); + memcpy(&ifr.ifr_netmask, &addr, sizeof(ifr.ifr_netmask)); err = ioctl(sk, SIOCSIFNETMASK, &ifr); if (err < 0) { diff --git a/plugins/supplicant.c b/plugins/supplicant.c index 987e0095..958200ef 100644 --- a/plugins/supplicant.c +++ b/plugins/supplicant.c @@ -185,6 +185,7 @@ struct supplicant_task { gboolean noscan; GSList *scan_results; struct iw_range *range; + gboolean connecting; gboolean disconnecting; }; @@ -981,7 +982,7 @@ static void extract_addr(DBusMessageIter *value, struct supplicant_result *result) { DBusMessageIter array; - struct ether_addr *eth; + struct ether_addr eth; unsigned char *addr; int addr_len; @@ -1002,15 +1003,14 @@ static void extract_addr(DBusMessageIter *value, if (result->path == NULL) return; - eth = (void *) addr; - + memcpy(ð, addr, sizeof(eth)); snprintf(result->path, 13, "%02x%02x%02x%02x%02x%02x", - eth->ether_addr_octet[0], - eth->ether_addr_octet[1], - eth->ether_addr_octet[2], - eth->ether_addr_octet[3], - eth->ether_addr_octet[4], - eth->ether_addr_octet[5]); + eth.ether_addr_octet[0], + eth.ether_addr_octet[1], + eth.ether_addr_octet[2], + eth.ether_addr_octet[3], + eth.ether_addr_octet[4], + eth.ether_addr_octet[5]); } static void extract_ssid(DBusMessageIter *value, @@ -1495,6 +1495,8 @@ static int task_connect(struct supplicant_task *task) if (g_str_equal(security, "none") == FALSE && passphrase == NULL) return -EINVAL; + task->connecting = TRUE; + add_network(task); select_network(task); @@ -1594,6 +1596,7 @@ static void state_change(struct supplicant_task *task, DBusMessage *msg) /* carrier on */ connman_network_set_connected(task->network, TRUE); connman_device_set_scanning(task->device, FALSE); + task->connecting = FALSE; break; case WPA_DISCONNECTED: @@ -1611,6 +1614,7 @@ static void state_change(struct supplicant_task *task, DBusMessage *msg) /* carrier off */ connman_network_set_connected(task->network, FALSE); connman_device_set_scanning(task->device, FALSE); + task->connecting = FALSE; } break; @@ -1690,6 +1694,7 @@ int supplicant_start(struct connman_device *device) task->created = FALSE; task->noscan = FALSE; task->state = WPA_INVALID; + task->connecting = FALSE; task->disconnecting = FALSE; task->pending_network = NULL; |