xfree86: Fix X -configure driver sort yet again
There were two bugs here: The comparison function was not stable when one or more of the drivers being compared is a fallback, and the last driver in the list would never be moved. Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
6f9939525c
commit
3050d27761
|
@ -554,15 +554,15 @@ driver_sort(const void *_l, const void *_r)
|
||||||
if (left == -1 && right == -1)
|
if (left == -1 && right == -1)
|
||||||
return strcmp(l, r);
|
return strcmp(l, r);
|
||||||
|
|
||||||
/* left is a fallback */
|
/* left is a fallback, right is not */
|
||||||
if (left >= 0)
|
if (left >= 0 && right == -1)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* right is a fallback */
|
/* right is a fallback, left is not */
|
||||||
if (right >= 0)
|
if (right >= 0 && left == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* both are fallbacks, which is worse */
|
/* both are fallbacks, decide which is worse */
|
||||||
return left - right;
|
return left - right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -573,7 +573,6 @@ fixup_video_driver_list(const char **drivers)
|
||||||
|
|
||||||
/* walk to the end of the list */
|
/* walk to the end of the list */
|
||||||
for (end = drivers; *end && **end; end++);
|
for (end = drivers; *end && **end; end++);
|
||||||
end--;
|
|
||||||
|
|
||||||
qsort(drivers, end - drivers, sizeof(const char *), driver_sort);
|
qsort(drivers, end - drivers, sizeof(const char *), driver_sort);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue