Просмотр исходного кода

Try to fix bug #53952 (ip4_addr_debug_print_val unaligned structure reference compiler warning)

Simon Goldschmidt 7 лет назад
Родитель
Сommit
b1ffb3a8d3
2 измененных файлов с 25 добавлено и 13 удалено
  1. 5 5
      src/core/ipv4/igmp.c
  2. 20 8
      src/include/lwip/ip4_addr.h

+ 5 - 5
src/core/ipv4/igmp.c

@@ -169,7 +169,7 @@ igmp_stop(struct netif *netif)
     /* disable the group at the MAC level */
     /* disable the group at the MAC level */
     if (netif->igmp_mac_filter != NULL) {
     if (netif->igmp_mac_filter != NULL) {
       LWIP_DEBUGF(IGMP_DEBUG, ("igmp_stop: igmp_mac_filter(DEL "));
       LWIP_DEBUGF(IGMP_DEBUG, ("igmp_stop: igmp_mac_filter(DEL "));
-      ip4_addr_debug_print(IGMP_DEBUG, &group->group_address);
+      ip4_addr_debug_print_val(IGMP_DEBUG, group->group_address);
       LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", (void *)netif));
       LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", (void *)netif));
       netif->igmp_mac_filter(netif, &(group->group_address), NETIF_DEL_MAC_FILTER);
       netif->igmp_mac_filter(netif, &(group->group_address), NETIF_DEL_MAC_FILTER);
     }
     }
@@ -337,9 +337,9 @@ igmp_input(struct pbuf *p, struct netif *inp, const ip4_addr_t *dest)
   }
   }
 
 
   LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: message from "));
   LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: message from "));
-  ip4_addr_debug_print(IGMP_DEBUG, &(ip4_current_header()->src));
+  ip4_addr_debug_print_val(IGMP_DEBUG, ip4_current_header()->src);
   LWIP_DEBUGF(IGMP_DEBUG, (" to address "));
   LWIP_DEBUGF(IGMP_DEBUG, (" to address "));
-  ip4_addr_debug_print(IGMP_DEBUG, &(ip4_current_header()->dest));
+  ip4_addr_debug_print_val(IGMP_DEBUG, ip4_current_header()->dest);
   LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", (void *)inp));
   LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", (void *)inp));
 
 
   /* Now calculate and check the checksum */
   /* Now calculate and check the checksum */
@@ -394,7 +394,7 @@ igmp_input(struct pbuf *p, struct netif *inp, const ip4_addr_t *dest)
         /* IGMP_MEMB_QUERY to a specific group ? */
         /* IGMP_MEMB_QUERY to a specific group ? */
         if (!ip4_addr_isany(&igmp->igmp_group_address)) {
         if (!ip4_addr_isany(&igmp->igmp_group_address)) {
           LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_MEMB_QUERY to a specific group "));
           LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_MEMB_QUERY to a specific group "));
-          ip4_addr_debug_print(IGMP_DEBUG, &igmp->igmp_group_address);
+          ip4_addr_debug_print_val(IGMP_DEBUG, igmp->igmp_group_address);
           if (ip4_addr_cmp(dest, &allsystems)) {
           if (ip4_addr_cmp(dest, &allsystems)) {
             ip4_addr_t groupaddr;
             ip4_addr_t groupaddr;
             LWIP_DEBUGF(IGMP_DEBUG, (" using \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp)));
             LWIP_DEBUGF(IGMP_DEBUG, (" using \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp)));
@@ -671,7 +671,7 @@ igmp_timeout(struct netif *netif, struct igmp_group *group)
   if ((group->group_state == IGMP_GROUP_DELAYING_MEMBER) &&
   if ((group->group_state == IGMP_GROUP_DELAYING_MEMBER) &&
       (!(ip4_addr_cmp(&(group->group_address), &allsystems)))) {
       (!(ip4_addr_cmp(&(group->group_address), &allsystems)))) {
     LWIP_DEBUGF(IGMP_DEBUG, ("igmp_timeout: report membership for group with address "));
     LWIP_DEBUGF(IGMP_DEBUG, ("igmp_timeout: report membership for group with address "));
-    ip4_addr_debug_print(IGMP_DEBUG, &(group->group_address));
+    ip4_addr_debug_print_val(IGMP_DEBUG, group->group_address);
     LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", (void *)netif));
     LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", (void *)netif));
 
 
     group->group_state = IGMP_GROUP_IDLE_MEMBER;
     group->group_state = IGMP_GROUP_IDLE_MEMBER;

+ 20 - 8
src/include/lwip/ip4_addr.h

@@ -167,22 +167,34 @@ u8_t ip4_addr_netmask_valid(u32_t netmask);
                       (u16_t)((ipaddr) != NULL ? ip4_addr4_16(ipaddr) : 0))
                       (u16_t)((ipaddr) != NULL ? ip4_addr4_16(ipaddr) : 0))
 #define ip4_addr_debug_print_val(debug, ipaddr) \
 #define ip4_addr_debug_print_val(debug, ipaddr) \
   ip4_addr_debug_print_parts(debug, \
   ip4_addr_debug_print_parts(debug, \
-                      ip4_addr1_16(&(ipaddr)),       \
-                      ip4_addr2_16(&(ipaddr)),       \
-                      ip4_addr3_16(&(ipaddr)),       \
-                      ip4_addr4_16(&(ipaddr)))
+                      ip4_addr1_16_val(ipaddr),       \
+                      ip4_addr2_16_val(ipaddr),       \
+                      ip4_addr3_16_val(ipaddr),       \
+                      ip4_addr4_16_val(ipaddr))
 
 
 /* Get one byte from the 4-byte address */
 /* Get one byte from the 4-byte address */
-#define ip4_addr1(ipaddr) (((const u8_t*)(&(ipaddr)->addr))[0])
-#define ip4_addr2(ipaddr) (((const u8_t*)(&(ipaddr)->addr))[1])
-#define ip4_addr3(ipaddr) (((const u8_t*)(&(ipaddr)->addr))[2])
-#define ip4_addr4(ipaddr) (((const u8_t*)(&(ipaddr)->addr))[3])
+#define ip4_addr_get_byte(ipaddr, idx) (((const u8_t*)(&(ipaddr)->addr))[idx])
+#define ip4_addr1(ipaddr) ip4_addr_get_byte(ipaddr, 0)
+#define ip4_addr2(ipaddr) ip4_addr_get_byte(ipaddr, 1)
+#define ip4_addr3(ipaddr) ip4_addr_get_byte(ipaddr, 2)
+#define ip4_addr4(ipaddr) ip4_addr_get_byte(ipaddr, 3)
+/* Get one byte from the 4-byte address, but argument is 'ip4_addr_t',
+ * not a pointer */
+#define ip4_addr_get_byte_val(ipaddr, idx) ((u8_t)(((ipaddr).addr >> (idx * 8)) & 0xff))
+#define ip4_addr1_val(ipaddr) ip4_addr_get_byte_val(ipaddr, 0)
+#define ip4_addr2_val(ipaddr) ip4_addr_get_byte_val(ipaddr, 1)
+#define ip4_addr3_val(ipaddr) ip4_addr_get_byte_val(ipaddr, 2)
+#define ip4_addr4_val(ipaddr) ip4_addr_get_byte_val(ipaddr, 3)
 /* These are cast to u16_t, with the intent that they are often arguments
 /* These are cast to u16_t, with the intent that they are often arguments
  * to printf using the U16_F format from cc.h. */
  * to printf using the U16_F format from cc.h. */
 #define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr))
 #define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr))
 #define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr))
 #define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr))
 #define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr))
 #define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr))
 #define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr))
 #define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr))
+#define ip4_addr1_16_val(ipaddr) ((u16_t)ip4_addr1_val(ipaddr))
+#define ip4_addr2_16_val(ipaddr) ((u16_t)ip4_addr2_val(ipaddr))
+#define ip4_addr3_16_val(ipaddr) ((u16_t)ip4_addr3_val(ipaddr))
+#define ip4_addr4_16_val(ipaddr) ((u16_t)ip4_addr4_val(ipaddr))
 
 
 #define IP4ADDR_STRLEN_MAX  16
 #define IP4ADDR_STRLEN_MAX  16