pud: fix readIPAddress function
authorFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 21 Nov 2013 09:35:47 +0000 (10:35 +0100)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 21 Nov 2013 09:36:40 +0000 (10:36 +0100)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/pud/src/configTools.c
lib/pud/src/netTools.h

index 4a957d8..cb53b4e 100644 (file)
@@ -263,6 +263,7 @@ bool readULL(const char * parameterName, const char * str, unsigned long long *
                union olsr_sockaddr * dst, bool * dstSet) {
        union olsr_sockaddr ip;
        int conversion;
+       in_port_t port;
 
        assert(parameterName != NULL);
        assert(str != NULL);
@@ -288,10 +289,14 @@ bool readULL(const char * parameterName, const char * str, unsigned long long *
        }
 
        if (!*dstSet) {
-               setOlsrSockaddrPort(&ip, htons(portDefault));
+         port = htons(portDefault);
+       } else {
+         port = getOlsrSockaddrPort(dst, portDefault);
        }
 
-  setOlsrSockaddrAddr(dst, &ip);
+       dst->in.sa_family = ip.in.sa_family;
+       setOlsrSockaddrPort(dst, port);
+       setOlsrSockaddrAddr(dst, &ip);
        *dstSet = true;
        return true;
 }
index 8510d11..473d267 100644 (file)
@@ -68,15 +68,15 @@ static inline void setOlsrSockaddrPort(union olsr_sockaddr * addr, in_port_t por
  @param addr
  A pointer to the IP address (in network byte order)
  */
-static inline void setOlsrSockaddrAddr(union olsr_sockaddr * addr, void * ip) {
+static inline void setOlsrSockaddrAddr(union olsr_sockaddr * addr, union olsr_sockaddr * ip) {
        if (!addr) {
                return;
        }
 
        if (addr->in.sa_family == AF_INET) {
-               addr->in4.sin_addr = *((struct in_addr *)ip);
+         addr->in4.sin_addr = ip->in4.sin_addr;
        } else {
-               addr->in6.sin6_addr = *((struct in6_addr *)ip);
+         addr->in6.sin6_addr = ip->in6.sin6_addr;
        }
 }