]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
kernel-pfroute: Alignment of sockaddrs is not always the same
authorTobias Brunner <tobias@strongswan.org>
Tue, 18 Jun 2013 15:50:51 +0000 (17:50 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 21 Jun 2013 15:03:22 +0000 (17:03 +0200)
src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c

index 0dfb2957adbf8b7366d4e335fd2c724b3d8b72cb..f8eed57750e0ee70c1c81e7aeeffabc1405508a2 100644 (file)
 #endif
 
 /** properly align sockaddrs */
+#ifdef __APPLE__
+/* Apple always uses 4 bytes */
 #define SA_ALIGN 4
+#else
+/* while on other platforms like FreeBSD it depends on the architecture */
+#define SA_ALIGN sizeof(long)
+#endif
 #define SA_LEN(len) ((len) > 0 ? (((len)+SA_ALIGN-1) & ~(SA_ALIGN-1)) : SA_ALIGN)
 
 /** delay before firing roam events (ms) */
@@ -349,7 +355,8 @@ METHOD(enumerator_t, rt_enumerate, bool,
                        *addr = this->addr;
                        *xtype = i;
                        this->remaining -= SA_LEN(this->addr->sa_len);
-                       this->addr = (char*)this->addr + SA_LEN(this->addr->sa_len);
+                       this->addr = (struct sockaddr*)((char*)this->addr +
+                                                                                       SA_LEN(this->addr->sa_len));
                        return TRUE;
                }
        }