mirror of
https://github.com/samba-team/samba.git
synced 2025-02-08 05:57:51 +03:00
s3-libsmb: use TYPESAFE_QSORT() in namequery code
This one was a bit trickier. I'd appreciate it if someone else can look over this.
This commit is contained in:
parent
007f24f29d
commit
7347ca359d
@ -433,16 +433,16 @@ bool name_status_find(const char *q_name,
|
|||||||
comparison function used by sort_addr_list
|
comparison function used by sort_addr_list
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int addr_compare(const struct sockaddr *ss1,
|
static int addr_compare(const struct sockaddr_storage *ss1,
|
||||||
const struct sockaddr *ss2)
|
const struct sockaddr_storage *ss2)
|
||||||
{
|
{
|
||||||
int max_bits1=0, max_bits2=0;
|
int max_bits1=0, max_bits2=0;
|
||||||
int num_interfaces = iface_count();
|
int num_interfaces = iface_count();
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Sort IPv4 addresses first. */
|
/* Sort IPv4 addresses first. */
|
||||||
if (ss1->sa_family != ss2->sa_family) {
|
if (ss1->ss_family != ss2->ss_family) {
|
||||||
if (ss2->sa_family == AF_INET) {
|
if (ss2->ss_family == AF_INET) {
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
@ -460,7 +460,7 @@ static int addr_compare(const struct sockaddr *ss1,
|
|||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
int bits1, bits2;
|
int bits1, bits2;
|
||||||
|
|
||||||
if (pss->ss_family != ss1->sa_family) {
|
if (pss->ss_family != ss1->ss_family) {
|
||||||
/* Ignore interfaces of the wrong type. */
|
/* Ignore interfaces of the wrong type. */
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -494,15 +494,15 @@ static int addr_compare(const struct sockaddr *ss1,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Bias towards directly reachable IPs */
|
/* Bias towards directly reachable IPs */
|
||||||
if (iface_local(ss1)) {
|
if (iface_local((struct sockaddr *)ss1)) {
|
||||||
if (ss1->sa_family == AF_INET) {
|
if (ss1->ss_family == AF_INET) {
|
||||||
max_bits1 += 32;
|
max_bits1 += 32;
|
||||||
} else {
|
} else {
|
||||||
max_bits1 += 128;
|
max_bits1 += 128;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (iface_local(ss2)) {
|
if (iface_local((struct sockaddr *)ss2)) {
|
||||||
if (ss2->sa_family == AF_INET) {
|
if (ss2->ss_family == AF_INET) {
|
||||||
max_bits2 += 32;
|
max_bits2 += 32;
|
||||||
} else {
|
} else {
|
||||||
max_bits2 += 128;
|
max_bits2 += 128;
|
||||||
@ -519,7 +519,7 @@ int ip_service_compare(struct ip_service *ss1, struct ip_service *ss2)
|
|||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
if ((result = addr_compare((struct sockaddr *)&ss1->ss, (struct sockaddr *)&ss2->ss)) != 0) {
|
if ((result = addr_compare(&ss1->ss, &ss2->ss)) != 0) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -546,8 +546,7 @@ static void sort_addr_list(struct sockaddr_storage *sslist, int count)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qsort(sslist, count, sizeof(struct sockaddr_storage),
|
TYPESAFE_QSORT(sslist, count, addr_compare);
|
||||||
QSORT_CAST addr_compare);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sort_service_list(struct ip_service *servlist, int count)
|
static void sort_service_list(struct ip_service *servlist, int count)
|
||||||
@ -556,8 +555,7 @@ static void sort_service_list(struct ip_service *servlist, int count)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qsort(servlist, count, sizeof(struct ip_service),
|
TYPESAFE_QSORT(servlist, count, ip_service_compare);
|
||||||
QSORT_CAST ip_service_compare);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
Loading…
x
Reference in New Issue
Block a user