libXau/xau-1.0.4-local.patch
2023-07-10 13:22:56 +02:00

72 lines
2.0 KiB
Diff

diff -up libXau-1.0.6/AuGetBest.c.jx libXau-1.0.6/AuGetBest.c
--- libXau-1.0.6/AuGetBest.c.jx 2009-02-16 12:59:07.000000000 -0500
+++ libXau-1.0.6/AuGetBest.c 2011-10-12 11:19:41.259897224 -0400
@@ -168,6 +168,67 @@ XauGetBestAuthByAddr (
}
XauDisposeAuth (entry);
}
+ if (!best) {
+ rewind (auth_file);
+ for (;;) {
+ entry = XauReadAuth (auth_file);
+ if (!entry)
+ break;
+ /*
+ * Match when:
+ * either family or entry->family are FamilyWild or
+ * family and entry->family are the same and
+ * address and entry->address are the same or
+ * family is FamilyLocal
+ * and
+ * either number or entry->number are empty or
+ * 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;
}