summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-07-16 02:43:47 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-07-16 02:43:47 +0200
commite6be58c2322fab098466d66816d99f67ae5a210f (patch)
tree0d312815c73b5e61c2ea0a75dda84000a8809c5c /plugins
parent016c1490e180fa737815bf65f96cc60b1761ed89 (diff)
downloadconnman-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.c16
-rw-r--r--plugins/supplicant.c23
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(&eth, 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;