You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.5 KiB
78 lines
2.5 KiB
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
|
From: Chris Coulson <chris.coulson@canonical.com> |
|
Date: Wed, 16 Nov 2022 14:40:04 +0000 |
|
Subject: [PATCH] font: Try opening fonts from the bundled memdisk |
|
|
|
Signed-off-by: Robbie Harwood <rharwood@redhat.com> |
|
--- |
|
grub-core/font/font.c | 48 +++++++++++++++++++++++++++++++----------------- |
|
1 file changed, 31 insertions(+), 17 deletions(-) |
|
|
|
diff --git a/grub-core/font/font.c b/grub-core/font/font.c |
|
index e6616e610c..e421d1ae6f 100644 |
|
--- a/grub-core/font/font.c |
|
+++ b/grub-core/font/font.c |
|
@@ -409,6 +409,27 @@ read_section_as_short (struct font_file_section *section, |
|
return 0; |
|
} |
|
|
|
+static grub_file_t |
|
+try_open_from_prefix (const char *prefix, const char *filename) |
|
+{ |
|
+ grub_file_t file; |
|
+ char *fullname, *ptr; |
|
+ |
|
+ fullname = grub_malloc (grub_strlen (prefix) + grub_strlen (filename) + 1 |
|
+ + sizeof ("/fonts/") + sizeof (".pf2")); |
|
+ if (!fullname) |
|
+ return 0; |
|
+ ptr = grub_stpcpy (fullname, prefix); |
|
+ ptr = grub_stpcpy (ptr, "/fonts/"); |
|
+ ptr = grub_stpcpy (ptr, filename); |
|
+ ptr = grub_stpcpy (ptr, ".pf2"); |
|
+ *ptr = 0; |
|
+ |
|
+ file = grub_buffile_open (fullname, GRUB_FILE_TYPE_FONT, 1024); |
|
+ grub_free (fullname); |
|
+ return file; |
|
+} |
|
+ |
|
/* Load a font and add it to the beginning of the global font list. |
|
Returns 0 upon success, nonzero upon failure. */ |
|
grub_font_t |
|
@@ -427,25 +448,18 @@ grub_font_load (const char *filename) |
|
file = grub_buffile_open (filename, GRUB_FILE_TYPE_FONT, 1024); |
|
else |
|
{ |
|
- const char *prefix = grub_env_get ("prefix"); |
|
- char *fullname, *ptr; |
|
- if (!prefix) |
|
+ file = try_open_from_prefix ("(memdisk)", filename); |
|
+ if (!file) |
|
{ |
|
- grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), |
|
- "prefix"); |
|
- goto fail; |
|
+ const char *prefix = grub_env_get ("prefix"); |
|
+ if (!prefix) |
|
+ { |
|
+ grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), |
|
+ "prefix"); |
|
+ goto fail; |
|
+ } |
|
+ file = try_open_from_prefix (prefix, filename); |
|
} |
|
- fullname = grub_malloc (grub_strlen (prefix) + grub_strlen (filename) + 1 |
|
- + sizeof ("/fonts/") + sizeof (".pf2")); |
|
- if (!fullname) |
|
- goto fail; |
|
- ptr = grub_stpcpy (fullname, prefix); |
|
- ptr = grub_stpcpy (ptr, "/fonts/"); |
|
- ptr = grub_stpcpy (ptr, filename); |
|
- ptr = grub_stpcpy (ptr, ".pf2"); |
|
- *ptr = 0; |
|
- file = grub_buffile_open (fullname, GRUB_FILE_TYPE_FONT, 1024); |
|
- grub_free (fullname); |
|
} |
|
if (!file) |
|
goto fail;
|
|
|