chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
shared: dns-name - use the canonical dns name ordering
[elogind.git]
/
src
/
shared
/
dns-domain.c
diff --git
a/src/shared/dns-domain.c
b/src/shared/dns-domain.c
index e716d333e4b031b60b989c6699af5b7581e1992e..a2b9124a9fd9cde60e32524da2ef408ba4a1d4b6 100644
(file)
--- 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) {
}
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);
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];
for (;;) {
char la[DNS_LABEL_MAX+1], lb[DNS_LABEL_MAX+1];
- if (
*x == 0 && *y == 0
)
+ if (
x == NULL && y == NULL
)
return 0;
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;
if (r < 0 || q < 0)
return r - q;