X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fdns-domain.c;h=a2b9124a9fd9cde60e32524da2ef408ba4a1d4b6;hp=e716d333e4b031b60b989c6699af5b7581e1992e;hb=b22f231c1eb04e77ca79df676d5989ae1061fbaf;hpb=9fc688865394518a68539070e10d8c9eb1f0dd6e diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c index e716d333e..a2b9124a9 100644 --- a/src/shared/dns-domain.c +++ b/src/shared/dns-domain.c @@ -338,20 +338,23 @@ unsigned long dns_name_hash_func(const void *s, const uint8_t hash_key[HASH_KEY_ } int dns_name_compare_func(const void *a, const void *b) { - const char *x = a, *y = b; + const char *x, *y; int r, q, k, w; assert(a); assert(b); + x = (const char *) a + strlen(a); + y = (const char *) b + strlen(b); + for (;;) { char la[DNS_LABEL_MAX+1], lb[DNS_LABEL_MAX+1]; - if (*x == 0 && *y == 0) + if (x == NULL && y == NULL) return 0; - r = dns_label_unescape(&x, la, sizeof(la)); - q = dns_label_unescape(&y, lb, sizeof(lb)); + r = dns_label_unescape_suffix(a, &x, la, sizeof(la)); + q = dns_label_unescape_suffix(b, &y, lb, sizeof(lb)); if (r < 0 || q < 0) return r - q;