test local fallback heuristic

This commit is contained in:
Adam Jackson 2011-10-12 11:21:01 -04:00
parent 186e4309f6
commit bdfc287eca

View File

@ -1,22 +1,71 @@
diff --git a/AuGetBest.c b/AuGetBest.c diff -up libXau-1.0.6/AuGetBest.c.jx libXau-1.0.6/AuGetBest.c
index ae2b748..5d92dad 100644 --- libXau-1.0.6/AuGetBest.c.jx 2009-02-16 12:59:07.000000000 -0500
--- a/AuGetBest.c +++ libXau-1.0.6/AuGetBest.c 2011-10-12 11:19:41.259897224 -0400
+++ b/AuGetBest.c @@ -168,6 +168,67 @@ XauGetBestAuthByAddr (
@@ -120,7 +120,8 @@ XauGetBestAuthByAddr ( }
* Match when: XauDisposeAuth (entry);
* either family or entry->family are FamilyWild or }
* family and entry->family are the same and + if (!best) {
- * address and entry->address are the same + rewind (auth_file);
+ * address and entry->address are the same or + for (;;) {
+ * family is FamilyLocal + entry = XauReadAuth (auth_file);
* and + if (!entry)
* either number or entry->number are empty or + break;
* number and entry->number are the same + /*
@@ -139,6 +140,7 @@ XauGetBestAuthByAddr ( + * Match when:
binaryEqual (entry->address, fully_qual_address, + * either family or entry->family are FamilyWild or
(int) fully_qual_address_length)) + * family and entry->family are the same and
#endif + * address and entry->address are the same or
+ || (family == FamilyLocal) + * family is FamilyLocal
))) && + * and
(number_length == 0 || entry->number_length == 0 || + * either number or entry->number are empty or
(number_length == entry->number_length && + * number and entry->number are the same
+ * and
+ * either name or entry->name are empty or
+ * name and entry->name are the same
+ */
+
+ if ((family == FamilyWild || entry->family == FamilyWild ||
+ (entry->family == family &&
+ ((address_length == entry->address_length &&
+ binaryEqual (entry->address, address, (int)address_length))
+#ifdef hpux
+ || (family == FamilyLocal &&
+ fully_qual_address_length == entry->address_length &&
+ binaryEqual (entry->address, fully_qual_address,
+ (int) fully_qual_address_length))
+#endif
+ || (family == FamilyLocal)
+ ))) &&
+ (number_length == 0 || entry->number_length == 0 ||
+ (number_length == entry->number_length &&
+ binaryEqual (entry->number, number, (int)number_length))))
+ {
+ if (best_type == 0)
+ {
+ best = entry;
+ break;
+ }
+ for (type = 0; type < best_type; type++)
+ if (type_lengths[type] == entry->name_length &&
+ !(strncmp (types[type], entry->name, entry->name_length)))
+ {
+ break;
+ }
+ if (type < best_type)
+ {
+ if (best)
+ XauDisposeAuth (best);
+ best = entry;
+ best_type = type;
+ if (type == 0)
+ break;
+ continue;
+ }
+ }
+ XauDisposeAuth (entry);
+ }
+ }
(void) fclose (auth_file);
return best;
}