diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c index 9ed8daed42e..e5399f37282 100644 --- a/src/boot/efi/boot.c +++ b/src/boot/efi/boot.c @@ -1683,10 +1683,10 @@ static INTN config_entry_compare(const ConfigEntry *a, const ConfigEntry *b) { return r; } - /* Now order by ID (the version is likely part of the ID, thus note that this might put the oldest - * version last, not first, i.e. specifying a sort key explicitly is thus generally preferable, to - * take benefit of the explicit sorting above.) */ - r = strverscmp_improved(a->id, b->id); + /* Now order by ID. The version is likely part of the ID, thus note that this will generatelly put + * the newer versions earlier. Specifying a sort key explicitly is preferable, because it gives an + * explicit sort order. */ + r = -strverscmp_improved(a->id, b->id); if (r != 0) return r; diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c index 96ec6ecb9eb..a87cce4ea57 100644 --- a/src/shared/bootspec.c +++ b/src/shared/bootspec.c @@ -272,6 +272,7 @@ static int boot_entry_compare(const BootEntry *a, const BootEntry *b) { r = CMP(!a->sort_key, !b->sort_key); if (r != 0) return r; + if (a->sort_key && b->sort_key) { r = strcmp(a->sort_key, b->sort_key); if (r != 0) @@ -286,7 +287,7 @@ static int boot_entry_compare(const BootEntry *a, const BootEntry *b) { return r; } - return strverscmp_improved(a->id, b->id); + return -strverscmp_improved(a->id, b->id); } static int boot_entries_find( diff --git a/src/test/test-bootspec.c b/src/test/test-bootspec.c index 47d0f58c965..7ba44744ba6 100644 --- a/src/test/test-bootspec.c +++ b/src/test/test-bootspec.c @@ -86,9 +86,9 @@ TEST_RET(bootspec_sort) { assert_se(streq(config.entries[2].id, "c.conf")); /* The following ones have no sort key, hence order by version compared ids, lowest first */ - assert_se(streq(config.entries[3].id, "a-5.conf")); + assert_se(streq(config.entries[3].id, "b.conf")); assert_se(streq(config.entries[4].id, "a-10.conf")); - assert_se(streq(config.entries[5].id, "b.conf")); + assert_se(streq(config.entries[5].id, "a-5.conf")); return 0; }