|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
From: Javier Martinez Canillas <javierm@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
Date: Mon, 4 Nov 2019 17:33:30 +0100
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
Subject: [PATCH] blscfg: Add support for sorting the plus ('+') higher than
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
base version
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
Handle plus separator. Concept is the same as tilde, except that if one of
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
the strings ends (base version), the other is considered as higher version.
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
A plus character is used for example by the Linux kernel build system to
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
denote that is the base version plus some changes on top of it.
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
Currently for example rpmvercmp("5.3.0", "5.3.0+") will return 0 even when
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
the two versions are not the same.
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
Resolves: rhbz#1767395
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
---
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
grub-core/commands/blscfg.c | 19 +++++++++++++++++--
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
1 file changed, 17 insertions(+), 2 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
index d78cff79f97..83b33c1cd93 100644
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
--- a/grub-core/commands/blscfg.c
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+++ b/grub-core/commands/blscfg.c
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
@@ -163,8 +163,8 @@ static int vercmp(const char * a, const char * b)
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
/* loop through each version segment of str1 and str2 and compare them */
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
while (*one || *two) {
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
- while (*one && !grub_isalnum(*one) && *one != '~') one++;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
- while (*two && !grub_isalnum(*two) && *two != '~') two++;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ while (*one && !grub_isalnum(*one) && *one != '~' && *one != '+') one++;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ while (*two && !grub_isalnum(*two) && *two != '~' && *two != '+') two++;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
/* handle the tilde separator, it sorts before everything else */
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
if (*one == '~' || *two == '~') {
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
@@ -175,6 +175,21 @@ static int vercmp(const char * a, const char * b)
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
continue;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
}
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ /*
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ * Handle plus separator. Concept is the same as tilde,
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ * except that if one of the strings ends (base version),
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ * the other is considered as higher version.
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ */
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ if (*one == '+' || *two == '+') {
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ if (!*one) return -1;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ if (!*two) return 1;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ if (*one != '+') goto_return (1);
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ if (*two != '+') goto_return (-1);
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ one++;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ two++;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ continue;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
/* If we ran to the end of either, we are finished with the loop */
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
if (!(*one && *two)) break;
|
|
![](https://seccdn.libravatar.org/avatar/1bbf13dbdb03dd0e61e012a83e85b17bd4c968d105745e8672273a6b98ac62df?s=16&d=retro) |
3f3dfd4 |
|