]> git.ipfire.org Git - location/libloc.git/commitdiff
Refactor compating IP addresses
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 30 Jan 2018 23:28:21 +0000 (23:28 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 30 Jan 2018 23:28:21 +0000 (23:28 +0000)
memcmp does not seem to be the best choice here.

This function is a naive implementation
but does the job very well.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/loc/private.h

index 2788705ab6f20f903de0d86c4ac8a9988203f69e..7008fdf09e1f9ce9723dc7c0edea55926dcc7835 100644 (file)
@@ -58,7 +58,15 @@ void loc_log(struct loc_ctx *ctx,
        const char *format, ...) __attribute__((format(printf, 6, 7)));
 
 static inline int in6_addr_cmp(const struct in6_addr* a1, const struct in6_addr* a2) {
-       return memcmp(&a1->s6_addr, &a2->s6_addr, sizeof(a1->s6_addr));
+       for (unsigned int i = 0; i < 16; i++) {
+               if (a1->s6_addr[i] > a2->s6_addr[i])
+                       return 1;
+
+               else if (a1->s6_addr[i] < a2->s6_addr[i])
+                       return -1;
+       }
+
+       return 0;
 }
 
 static inline int in6_addr_get_bit(const struct in6_addr* address, unsigned int i) {