Module: xenomai-forge
Branch: master
Commit: 9522fe784a99f2551d20eb59d3daadde01dac5d8
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=9522fe784a99f2551d20eb59d3daadde01dac5d8

Author: Philippe Gerum <r...@xenomai.org>
Date:   Thu Dec  1 19:02:42 2011 +0100

utils/rtcanconfig: fix aliasing

---

 utils/can/rtcanconfig.c |   28 +++++++++++++++++-----------
 1 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/utils/can/rtcanconfig.c b/utils/can/rtcanconfig.c
index dc15c32..9fab73d 100644
--- a/utils/can/rtcanconfig.c
+++ b/utils/can/rtcanconfig.c
@@ -88,10 +88,16 @@ int main(int argc, char *argv[])
     int     new_ctrlmode = 0, set_ctrlmode = 0;
     int     verbose = 0;
     int     bittime_count = 0, bittime_data[6];
-    struct  ifreq ifr;
     can_baudrate_t *baudrate;
     can_ctrlmode_t *ctrlmode;
     can_mode_t *mode;
+    union {
+      struct ifreq ifr;
+      struct can_bittime bittime;
+      can_baudrate_t baudrate;
+      can_ctrlmode_t ctrlmode;
+      can_mode_t mode;
+    } u;
     struct can_bittime *bittime;
     int opt, ret;
     char* ptr;
@@ -163,7 +169,7 @@ int main(int argc, char *argv[])
     }
 
     strncpy(ifname, argv[optind], IFNAMSIZ);
-    strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+    strncpy(u.ifr.ifr_name, ifname, IFNAMSIZ);
 
     if (optind == argc - 2) {   /* Get mode setting */
        new_mode = string_to_mode(argv[optind + 1]);
@@ -181,7 +187,7 @@ int main(int argc, char *argv[])
        return can_fd;
     }
 
-    ret = rt_dev_ioctl(can_fd, SIOCGIFINDEX, &ifr);
+    ret = rt_dev_ioctl(can_fd, SIOCGIFINDEX, &u.ifr);
     if (ret) {
        fprintf(stderr,"Can't get interface index for %s, code = %d\n", ifname, 
ret);
        return ret;
@@ -191,16 +197,16 @@ int main(int argc, char *argv[])
     if (new_baudrate != -1) {
        if (verbose)
            printf("baudrate: %d\n", new_baudrate);
-       baudrate = (can_baudrate_t *)&ifr.ifr_ifru;
+       baudrate = &u.baudrate;
        *baudrate = new_baudrate;
-       ret = rt_dev_ioctl(can_fd, SIOCSCANBAUDRATE, &ifr);
+       ret = rt_dev_ioctl(can_fd, SIOCSCANBAUDRATE, &u.ifr);
        if (ret) {
            goto abort;
        }
     }
 
     if (bittime_count) {
-       bittime = (struct can_bittime *)&ifr.ifr_ifru;
+       bittime = &u.bittime;
        if (bittime_count == 2) {
            bittime->type = CAN_BITTIME_BTR;
            bittime->btr.btr0 = bittime_data[0];
@@ -227,7 +233,7 @@ int main(int argc, char *argv[])
                       bittime->std.sam);
        }
 
-       ret = rt_dev_ioctl(can_fd, SIOCSCANCUSTOMBITTIME, &ifr);
+       ret = rt_dev_ioctl(can_fd, SIOCSCANCUSTOMBITTIME, &u.ifr);
        if (ret) {
            goto abort;
        }
@@ -235,20 +241,20 @@ int main(int argc, char *argv[])
     }
 
     if (set_ctrlmode != 0) {
-       ctrlmode = (can_ctrlmode_t *)&ifr.ifr_ifru;
+       ctrlmode = &u.ctrlmode;
        *ctrlmode = new_ctrlmode;
        if (verbose)
            printf("ctrlmode: %#x\n", new_ctrlmode);
-       ret = rt_dev_ioctl(can_fd, SIOCSCANCTRLMODE, &ifr);
+       ret = rt_dev_ioctl(can_fd, SIOCSCANCTRLMODE, &u.ifr);
        if (ret) {
            goto abort;
        }
     }
 
     if (new_mode != -1) {
-       mode = (can_mode_t *)&ifr.ifr_ifru;
+       mode = &u.mode;
        *mode = new_mode;
-       ret = rt_dev_ioctl(can_fd, SIOCSCANMODE, &ifr);
+       ret = rt_dev_ioctl(can_fd, SIOCSCANMODE, &u.ifr);
        if (ret) {
            goto abort;
        }


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to