diff options
author | Adam Jackson <ajax@redhat.com> | 2017-06-27 11:18:48 -0400 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2017-07-31 10:57:22 -0400 |
commit | 3050d277616ef472a24d8ccd24afcbf8e31ed80e (patch) | |
tree | f311fa33f7e5b83dab96b1cb400293be66f33e5a | |
parent | 6f9939525c31f1f2d8d6c137a46404278384b4bf (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.c | 11 |
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); } |