aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2011-12-07 16:45:22 +0059
committerBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2011-12-07 16:45:22 +0059
commit747002d7fcd154af2cec58d66442f257dc8b0174 (patch)
tree54666c8d79dc0a22976be83b8806dc1931d40b20
parenta01d37870bbf9892d43e792e5de0683ca41c5497 (diff)
downloadwpa_supplicant-linaro_android_4.0.1.tar.gz
wpa_supplicant: Fix aliasing violationslinaro_android_4.0.1
This allows the code to build without -fno-strict-aliasing, enabling more compiler optimizations Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r--wpa_ctrl.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/wpa_ctrl.c b/wpa_ctrl.c
index 29a3705..f9c8445 100644
--- a/wpa_ctrl.c
+++ b/wpa_ctrl.c
@@ -51,14 +51,26 @@ static const char *local_socket_prefix = "wpa_ctrl_";
struct wpa_ctrl {
#ifdef CONFIG_CTRL_IFACE_UDP
int s;
- struct sockaddr_in local;
- struct sockaddr_in dest;
+ union {
+ struct sockaddr_in local;
+ struct sockaddr local_generic;
+ };
+ union {
+ struct sockaddr_in dest;
+ struct sockaddr dest_generic;
+ };
char *cookie;
#endif /* CONFIG_CTRL_IFACE_UDP */
#ifdef CONFIG_CTRL_IFACE_UNIX
int s;
- struct sockaddr_un local;
- struct sockaddr_un dest;
+ union {
+ struct sockaddr_un local;
+ struct sockaddr local_generic;
+ };
+ union {
+ struct sockaddr_un dest;
+ struct sockaddr dest_generic;
+ };
#endif /* CONFIG_CTRL_IFACE_UNIX */
#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE
HANDLE pipe;
@@ -92,7 +104,7 @@ struct wpa_ctrl * wpa_ctrl_open(const char *ctrl_path)
#else /* ANDROID */
"/tmp/wpa_ctrl_%d-%d", getpid(), counter++);
#endif
- if (bind(ctrl->s, (struct sockaddr *) &ctrl->local,
+ if (bind(ctrl->s, &ctrl->local_generic,
sizeof(ctrl->local)) < 0) {
close(ctrl->s);
os_free(ctrl);
@@ -126,7 +138,7 @@ struct wpa_ctrl * wpa_ctrl_open(const char *ctrl_path)
ctrl->dest.sun_family = AF_UNIX;
os_snprintf(ctrl->dest.sun_path, sizeof(ctrl->dest.sun_path), "%s",
ctrl_path);
- if (connect(ctrl->s, (struct sockaddr *) &ctrl->dest,
+ if (connect(ctrl->s, &ctrl->dest_generic,
sizeof(ctrl->dest)) < 0) {
close(ctrl->s);
unlink(ctrl->local.sun_path);