]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Disable cast-align warnings in various places
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 3 Apr 2013 14:52:40 +0000 (15:52 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 8 Apr 2013 09:03:21 +0000 (10:03 +0100)
There are a number of places which generate cast alignment
warnings, which are difficult or impossible to address. Use
pragmas to disable the warnings in these few places

conf/nwfilter_conf.c: In function 'virNWFilterRuleDetailsParse':
conf/nwfilter_conf.c:1806:16: warning: cast increases required alignment of target type [-Wcast-align]
         item = (nwItemDesc *)((char *)nwf + att[idx].dataIdx);
conf/nwfilter_conf.c: In function 'virNWFilterRuleDefDetailsFormat':
conf/nwfilter_conf.c:3238:16: warning: cast increases required alignment of target type [-Wcast-align]
         item = (nwItemDesc *)((char *)def + att[i].dataIdx);

storage/storage_backend_mpath.c: In function 'virStorageBackendCreateVols':
storage/storage_backend_mpath.c:247:17: warning: cast increases required alignment of target type [-Wcast-align]
         names = (struct dm_names *)(((char *)names) + next);

nwfilter/nwfilter_dhcpsnoop.c: In function 'virNWFilterSnoopDHCPDecode':
nwfilter/nwfilter_dhcpsnoop.c:994:15: warning: cast increases required alignment of target type [-Wcast-align]
         pip = (struct iphdr *) pep->eh_data;
nwfilter/nwfilter_dhcpsnoop.c:1004:11: warning: cast increases required alignment of target type [-Wcast-align]
     pup = (struct udphdr *) ((char *) pip + (pip->ihl << 2));

nwfilter/nwfilter_learnipaddr.c: In function 'procDHCPOpts':
nwfilter/nwfilter_learnipaddr.c:327:33: warning: cast increases required alignment of target type [-Wcast-align]
                 uint32_t *tmp = (uint32_t *)&dhcpopt->value;
nwfilter/nwfilter_learnipaddr.c: In function 'learnIPAddressThread':
nwfilter/nwfilter_learnipaddr.c:501:43: warning: cast increases required alignment of target type [-Wcast-align]
                     struct iphdr *iphdr = (struct iphdr*)(packet +
nwfilter/nwfilter_learnipaddr.c:538:43: warning: cast increases required alignment of target type [-Wcast-align]
                     struct iphdr *iphdr = (struct iphdr*)(packet +
nwfilter/nwfilter_learnipaddr.c:544:48: warning: cast increases required alignment of target type [-Wcast-align]
                         struct udphdr *udphdr= (struct udphdr *)

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
m4/virt-compile-warnings.m4
src/conf/nwfilter_conf.c
src/internal.h
src/nwfilter/nwfilter_dhcpsnoop.c
src/nwfilter/nwfilter_learnipaddr.c
src/storage/storage_backend_mpath.c

index a08fcac9f767b8e885019196cf050b6aff435cb1..e05491308c9b3254d2cfe01112e412bd2bfd3af1 100644 (file)
@@ -93,6 +93,7 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
     if test $lv_cv_gcc_pragma_push_works = no; then
       dontwarn="$dontwarn -Wmissing-prototypes"
       dontwarn="$dontwarn -Wmissing-declarations"
+      dontwarn="$dontwarn -Wcast-align"
     fi
 
     dnl Check whether strchr(s, char variable) causes a bogus compile
index e63a04b52ac1b60ad2b14a8d5baadca5cb4ce93e..b61010df69d472f82c91ce4d190af4eb7fd05f2b 100644 (file)
@@ -1803,7 +1803,9 @@ virNWFilterRuleDetailsParse(xmlNodePtr node,
     while (att[idx].name != NULL) {
         prop = virXMLPropString(node, att[idx].name);
 
+        VIR_WARNINGS_NO_CAST_ALIGN
         item = (nwItemDesc *)((char *)nwf + att[idx].dataIdx);
+        VIR_WARNINGS_RESET
         flags = &item->flags;
         flags_set = match_flag;
 
@@ -3235,7 +3237,9 @@ virNWFilterRuleDefDetailsFormat(virBufferPtr buf,
     nwItemDesc *item;
 
     while (att[i].name) {
+        VIR_WARNINGS_NO_CAST_ALIGN
         item = (nwItemDesc *)((char *)def + att[i].dataIdx);
+        VIR_WARNINGS_RESET
         enum virNWFilterEntryItemFlags flags = item->flags;
         if ((flags & NWFILTER_ENTRY_ITEM_FLAG_EXISTS)) {
             if (!typeShown) {
index 2cf4731919b8d5fc42a5f196c1573756db739940..d819aa39a2b8aecc8419f37b6052f63b7c4ead2a 100644 (file)
 #  endif
 # endif                                /* __GNUC__ */
 
+
+# if __GNUC_PREREQ (4, 6)
+#  define VIR_WARNINGS_NO_CAST_ALIGN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wcast-align\"")
+
+#  define VIR_WARNINGS_RESET \
+    _Pragma ("GCC diagnostic pop")
+# else
+#  define VIR_WARNINGS_NO_CAST_ALIGN
+#  define VIR_WARNINGS_RESET
+# endif
+
 /*
  * Use this when passing possibly-NULL strings to printf-a-likes.
  */
index 512406907843cee568d025cfbd227983ad65d1f2..5012b14d17b937a9052738c92516b79e49218cc7 100644 (file)
@@ -991,7 +991,9 @@ virNWFilterSnoopDHCPDecode(virNWFilterSnoopReqPtr req,
     /* go through the protocol headers */
     switch (ntohs(pep->eh_type)) {
     case ETHERTYPE_IP:
+        VIR_WARNINGS_NO_CAST_ALIGN;
         pip = (struct iphdr *) pep->eh_data;
+        VIR_WARNINGS_RESET;
         len -= offsetof(virNWFilterSnoopEthHdr, eh_data);
         break;
     default:
@@ -1001,7 +1003,9 @@ virNWFilterSnoopDHCPDecode(virNWFilterSnoopReqPtr req,
     if (len < 0)
         return -2;
 
+    VIR_WARNINGS_NO_CAST_ALIGN
     pup = (struct udphdr *) ((char *) pip + (pip->ihl << 2));
+    VIR_WARNINGS_RESET
     len -= pip->ihl << 2;
     if (len < 0)
         return -2;
index 7a4f98389186ac66d1316f0e2f9cb7741f75dd70..b399092ef043e0d0a1c09ca455b1c75edee6d791 100644 (file)
@@ -324,7 +324,9 @@ procDHCPOpts(struct dhcp *dhcp, int dhcp_opts_len,
 
         case DHCP_OPT_BCASTADDRESS: /* Broadcast address */
             if (dhcp_opts_len >= 6) {
+                VIR_WARNINGS_NO_CAST_ALIGN
                 uint32_t *tmp = (uint32_t *)&dhcpopt->value;
+                VIR_WARNINGS_RESET
                 (*bcastaddr) = ntohl(*tmp);
             }
         break;
@@ -498,8 +500,10 @@ learnIPAddressThread(void *arg)
                 if (etherType == ETHERTYPE_IP &&
                     (header.len >= ethHdrSize +
                                    sizeof(struct iphdr))) {
+                    VIR_WARNINGS_NO_CAST_ALIGN
                     struct iphdr *iphdr = (struct iphdr*)(packet +
                                                           ethHdrSize);
+                    VIR_WARNINGS_RESET
                     vmaddr = iphdr->saddr;
                     /* skip mcast addresses (224.0.0.0 - 239.255.255.255),
                      * class E (240.0.0.0 - 255.255.255.255, includes eth.
@@ -514,8 +518,10 @@ learnIPAddressThread(void *arg)
                 } else if (etherType == ETHERTYPE_ARP &&
                            (header.len >= ethHdrSize +
                                           sizeof(struct f_arphdr))) {
+                    VIR_WARNINGS_NO_CAST_ALIGN
                     struct f_arphdr *arphdr = (struct f_arphdr*)(packet +
                                                          ethHdrSize);
+                    VIR_WARNINGS_RESET
                     switch (ntohs(arphdr->arphdr.ar_op)) {
                     case ARPOP_REPLY:
                         vmaddr = arphdr->ar_sip;
@@ -535,14 +541,18 @@ learnIPAddressThread(void *arg)
                 if (etherType == ETHERTYPE_IP &&
                     (header.len >= ethHdrSize +
                                    sizeof(struct iphdr))) {
+                    VIR_WARNINGS_NO_CAST_ALIGN
                     struct iphdr *iphdr = (struct iphdr*)(packet +
                                                           ethHdrSize);
+                    VIR_WARNINGS_RESET
                     if ((iphdr->protocol == IPPROTO_UDP) &&
                         (header.len >= ethHdrSize +
                                        iphdr->ihl * 4 +
                                        sizeof(struct udphdr))) {
+                        VIR_WARNINGS_NO_CAST_ALIGN
                         struct udphdr *udphdr= (struct udphdr *)
                                           ((char *)iphdr + iphdr->ihl * 4);
+                        VIR_WARNINGS_RESET
                         if (ntohs(udphdr->source) == 67 &&
                             ntohs(udphdr->dest)   == 68 &&
                             header.len >= ethHdrSize +
index b12b81f0d10f104442059bc6b9b633389512374b..60490634f8b9ff822a608777efdaab3771a23fc4 100644 (file)
@@ -243,8 +243,10 @@ virStorageBackendCreateVols(virStoragePoolObjPtr pool,
 
         /* Given the way libdevmapper returns its data, I don't see
          * any way to avoid this series of casts. */
+        VIR_WARNINGS_NO_CAST_ALIGN
         next = names->next;
         names = (struct dm_names *)(((char *)names) + next);
+        VIR_WARNINGS_RESET
 
     } while (next);