summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2017-06-27 11:18:48 -0400
committerAdam Jackson <ajax@redhat.com>2017-07-31 10:57:22 -0400
commit3050d277616ef472a24d8ccd24afcbf8e31ed80e (patch)
treef311fa33f7e5b83dab96b1cb400293be66f33e5a
parent6f9939525c31f1f2d8d6c137a46404278384b4bf (diff)
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>
-rw-r--r--hw/xfree86/common/xf86Configure.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 5f9643a52..07d3c6319 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -554,15 +554,15 @@ driver_sort(const void *_l, const void *_r)
if (left == -1 && right == -1)
return strcmp(l, r);
- /* left is a fallback */
- if (left >= 0)
+ /* left is a fallback, right is not */
+ if (left >= 0 && right == -1)
return 1;
- /* right is a fallback */
- if (right >= 0)
+ /* right is a fallback, left is not */
+ if (right >= 0 && left == -1)
return -1;
- /* both are fallbacks, which is worse */
+ /* both are fallbacks, decide which is worse */
return left - right;
}
@@ -573,7 +573,6 @@ fixup_video_driver_list(const char **drivers)
/* walk to the end of the list */
for (end = drivers; *end && **end; end++);
- end--;
qsort(drivers, end - drivers, sizeof(const char *), driver_sort);
}