A couple BLS fixes and various grub2 cleanups
- Various grub2 cleanups (pbrobinson) - Another fix for blscfg variable expansion support - blscfg: Add support for sorting the plus ('+') higher than base version Resolves: rhbz#1767395 Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
This commit is contained in:
parent
8733281382
commit
3f3dfd4006
@ -15,14 +15,27 @@ Resolves: rhbz#1669252
|
|||||||
|
|
||||||
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||||
---
|
---
|
||||||
grub-core/commands/blscfg.c | 19 +++++++++----------
|
grub-core/commands/blscfg.c | 31 ++++++++++++++++++-------------
|
||||||
1 file changed, 9 insertions(+), 10 deletions(-)
|
1 file changed, 18 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c
|
diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c
|
||||||
index 471975fd2e5..32d3252502e 100644
|
index 471975fd2e5..d78cff79f97 100644
|
||||||
--- a/grub-core/commands/blscfg.c
|
--- a/grub-core/commands/blscfg.c
|
||||||
+++ b/grub-core/commands/blscfg.c
|
+++ b/grub-core/commands/blscfg.c
|
||||||
@@ -602,17 +602,16 @@ static char *field_append(bool is_var, char *buffer, char *start, char *end)
|
@@ -593,26 +593,29 @@ static char **bls_make_list (struct bls_entry *entry, const char *key, int *num)
|
||||||
|
|
||||||
|
static char *field_append(bool is_var, char *buffer, char *start, char *end)
|
||||||
|
{
|
||||||
|
- char *temp = grub_strndup(start, end - start + 1);
|
||||||
|
- const char *field = temp;
|
||||||
|
+ char *tmp = grub_strndup(start, end - start + 1);
|
||||||
|
+ const char *field = tmp;
|
||||||
|
+ int term = is_var ? 2 : 1;
|
||||||
|
|
||||||
|
if (is_var) {
|
||||||
|
- field = grub_env_get (temp);
|
||||||
|
+ field = grub_env_get (tmp);
|
||||||
|
if (!field)
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,17 +48,29 @@ index 471975fd2e5..32d3252502e 100644
|
|||||||
- if (!buffer)
|
- if (!buffer)
|
||||||
- return NULL;
|
- return NULL;
|
||||||
+ if (!buffer)
|
+ if (!buffer)
|
||||||
+ buffer = grub_zalloc (grub_strlen(field) + 1);
|
+ buffer = grub_zalloc (grub_strlen(field) + term);
|
||||||
+ else
|
+ else
|
||||||
+ buffer = grub_realloc (buffer, grub_strlen(buffer) + grub_strlen(field) + 1);
|
+ buffer = grub_realloc (buffer, grub_strlen(buffer) + grub_strlen(field) + term);
|
||||||
|
|
||||||
- grub_stpcpy (buffer + grub_strlen(buffer), field);
|
- grub_stpcpy (buffer + grub_strlen(buffer), field);
|
||||||
- }
|
- }
|
||||||
+ if (!buffer)
|
+ if (!buffer)
|
||||||
+ return NULL;
|
+ return NULL;
|
||||||
+
|
+
|
||||||
+ grub_stpcpy (buffer + grub_strlen(buffer), field);
|
+ tmp = buffer + grub_strlen(buffer);
|
||||||
+ grub_stpcpy (buffer + grub_strlen(buffer), " ");
|
+ tmp = grub_stpcpy (tmp, field);
|
||||||
|
+
|
||||||
|
+ if (is_var)
|
||||||
|
+ tmp = grub_stpcpy (tmp, " ");
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
@@ -642,6 +645,8 @@ static char *expand_val(char *value)
|
||||||
|
buffer = field_append(is_var, buffer, start, end);
|
||||||
|
is_var = false;
|
||||||
|
start = value;
|
||||||
|
+ if (*start == ' ')
|
||||||
|
+ start++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||||
|
Date: Mon, 4 Nov 2019 17:33:30 +0100
|
||||||
|
Subject: [PATCH] blscfg: Add support for sorting the plus ('+') higher than
|
||||||
|
base version
|
||||||
|
|
||||||
|
Handle plus separator. Concept is the same as tilde, except that if one of
|
||||||
|
the strings ends (base version), the other is considered as higher version.
|
||||||
|
|
||||||
|
A plus character is used for example by the Linux kernel build system to
|
||||||
|
denote that is the base version plus some changes on top of it.
|
||||||
|
|
||||||
|
Currently for example rpmvercmp("5.3.0", "5.3.0+") will return 0 even when
|
||||||
|
the two versions are not the same.
|
||||||
|
|
||||||
|
Resolves: rhbz#1767395
|
||||||
|
|
||||||
|
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||||
|
---
|
||||||
|
grub-core/commands/blscfg.c | 19 +++++++++++++++++--
|
||||||
|
1 file changed, 17 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c
|
||||||
|
index d78cff79f97..83b33c1cd93 100644
|
||||||
|
--- a/grub-core/commands/blscfg.c
|
||||||
|
+++ b/grub-core/commands/blscfg.c
|
||||||
|
@@ -163,8 +163,8 @@ static int vercmp(const char * a, const char * b)
|
||||||
|
|
||||||
|
/* loop through each version segment of str1 and str2 and compare them */
|
||||||
|
while (*one || *two) {
|
||||||
|
- while (*one && !grub_isalnum(*one) && *one != '~') one++;
|
||||||
|
- while (*two && !grub_isalnum(*two) && *two != '~') two++;
|
||||||
|
+ while (*one && !grub_isalnum(*one) && *one != '~' && *one != '+') one++;
|
||||||
|
+ while (*two && !grub_isalnum(*two) && *two != '~' && *two != '+') two++;
|
||||||
|
|
||||||
|
/* handle the tilde separator, it sorts before everything else */
|
||||||
|
if (*one == '~' || *two == '~') {
|
||||||
|
@@ -175,6 +175,21 @@ static int vercmp(const char * a, const char * b)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * Handle plus separator. Concept is the same as tilde,
|
||||||
|
+ * except that if one of the strings ends (base version),
|
||||||
|
+ * the other is considered as higher version.
|
||||||
|
+ */
|
||||||
|
+ if (*one == '+' || *two == '+') {
|
||||||
|
+ if (!*one) return -1;
|
||||||
|
+ if (!*two) return 1;
|
||||||
|
+ if (*one != '+') goto_return (1);
|
||||||
|
+ if (*two != '+') goto_return (-1);
|
||||||
|
+ one++;
|
||||||
|
+ two++;
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* If we ran to the end of either, we are finished with the loop */
|
||||||
|
if (!(*one && *two)) break;
|
||||||
|
|
@ -187,3 +187,4 @@ Patch0186: 0186-grub-set-bootflag-Update-comment-about-running-as-ro.patch
|
|||||||
Patch0187: 0187-grub-set-bootflag-Write-new-env-to-tmpfile-and-then-.patch
|
Patch0187: 0187-grub-set-bootflag-Write-new-env-to-tmpfile-and-then-.patch
|
||||||
Patch0188: 0188-blscfg-add-a-space-char-when-appending-fields-for-va.patch
|
Patch0188: 0188-blscfg-add-a-space-char-when-appending-fields-for-va.patch
|
||||||
Patch0189: 0189-grub.d-Fix-boot_indeterminate-getting-set-on-boot_su.patch
|
Patch0189: 0189-grub.d-Fix-boot_indeterminate-getting-set-on-boot_su.patch
|
||||||
|
Patch0190: 0190-blscfg-Add-support-for-sorting-the-plus-higher-than-.patch
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
Name: grub2
|
Name: grub2
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 2.04
|
Version: 2.04
|
||||||
Release: 5%{?dist}
|
Release: 6%{?dist}
|
||||||
Summary: Bootloader with support for Linux, Multiboot and more
|
Summary: Bootloader with support for Linux, Multiboot and more
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
URL: http://www.gnu.org/software/grub/
|
URL: http://www.gnu.org/software/grub/
|
||||||
@ -513,6 +513,12 @@ rm -r /boot/grub2.tmp/ || :
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Dec 05 2019 Javier Martinez Canillas <javierm@redhat.com> - 2.04-6
|
||||||
|
- Various grub2 cleanups (pbrobinson)
|
||||||
|
- Another fix for blscfg variable expansion support
|
||||||
|
- blscfg: Add support for sorting the plus ('+') higher than base version
|
||||||
|
Resolves: rhbz#1767395
|
||||||
|
|
||||||
* Wed Nov 27 2019 Javier Martinez Canillas <javierm@redhat.com> - 2.04-5
|
* Wed Nov 27 2019 Javier Martinez Canillas <javierm@redhat.com> - 2.04-5
|
||||||
- blscfg: add a space char when appending fields for variable expansion
|
- blscfg: add a space char when appending fields for variable expansion
|
||||||
- grub.d: Fix boot_indeterminate getting set on boot_success=0 boot
|
- grub.d: Fix boot_indeterminate getting set on boot_success=0 boot
|
||||||
|
Loading…
Reference in New Issue
Block a user