From: Leo Sandoval <lsandova@redhat.com>
To: grub-devel@gnu.org
Subject: [PATCH v3 16/16] normal/main: Try $prefix if $fw_path doesn't work.
Date: Thu, 10 Oct 2024 15:43:34 -0600 [thread overview]
Message-ID: <20241010214334.1749167-17-lsandova@redhat.com> (raw)
In-Reply-To: <20241010214334.1749167-1-lsandova@redhat.com>
From: Peter Jones <pjones@redhat.com>
Related: rhbz#1148652
Signed-off-by: Peter Jones <pjones@redhat.com>
---
grub-core/kern/ieee1275/init.c | 28 +++----
grub-core/net/net.c | 2 +-
grub-core/normal/main.c | 132 ++++++++++++++++-----------------
3 files changed, 81 insertions(+), 81 deletions(-)
diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
index 50c65b2f6..51c1e1c9d 100644
--- a/grub-core/kern/ieee1275/init.c
+++ b/grub-core/kern/ieee1275/init.c
@@ -170,23 +170,25 @@ grub_machine_get_bootlocation (char **device, char **path)
grub_free (canon);
}
else
- *device = grub_ieee1275_encode_devname (bootpath);
- grub_free (type);
-
- filename = grub_ieee1275_get_filename (bootpath);
- if (filename)
{
- char *lastslash = grub_strrchr (filename, '\\');
-
- /* Truncate at last directory. */
- if (lastslash)
+ filename = grub_ieee1275_get_filename (bootpath);
+ if (filename)
{
- *lastslash = '\0';
- grub_translate_ieee1275_path (filename);
+ char *lastslash = grub_strrchr (filename, '\\');
- *path = filename;
- }
+ /* Truncate at last directory. */
+ if (lastslash)
+ {
+ *lastslash = '\0';
+ grub_translate_ieee1275_path (filename);
+
+ *path = filename;
+ }
+ }
+ *device = grub_ieee1275_encode_devname (bootpath);
}
+
+ grub_free (type);
grub_free (bootpath);
}
diff --git a/grub-core/net/net.c b/grub-core/net/net.c
index 8cad4fb6d..54451cea2 100644
--- a/grub-core/net/net.c
+++ b/grub-core/net/net.c
@@ -2005,7 +2005,7 @@ grub_net_search_config_file (char *config)
/* Remove the remaining minus sign at the end. */
config[config_len] = '\0';
- return GRUB_ERR_NONE;
+ return GRUB_ERR_FILE_NOT_FOUND;
}
static struct grub_preboot *fini_hnd;
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
index 973e7d733..750c6c20c 100644
--- a/grub-core/normal/main.c
+++ b/grub-core/normal/main.c
@@ -329,81 +329,79 @@ grub_enter_normal_mode (const char *config)
grub_boot_time ("Exiting normal mode");
}
+static grub_err_t
+grub_try_normal (const char *variable)
+{
+ char *config;
+ const char *prefix;
+ grub_err_t err = GRUB_ERR_FILE_NOT_FOUND;
+ const char *net_search_cfg;
+ int disable_net_search = 0;
+
+ prefix = grub_env_get (variable);
+ if (!prefix)
+ return GRUB_ERR_FILE_NOT_FOUND;
+
+ net_search_cfg = grub_env_get ("feature_net_search_cfg");
+ if (net_search_cfg && net_search_cfg[0] == 'n')
+ disable_net_search = 1;
+
+ if (grub_strncmp (prefix + 1, "tftp", sizeof ("tftp") - 1) == 0 &&
+ !disable_net_search)
+ {
+ grub_size_t config_len;
+ config_len = grub_strlen (prefix) +
+ sizeof ("/grub.cfg-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
+ config = grub_malloc (config_len);
+
+ if (! config)
+ return GRUB_ERR_FILE_NOT_FOUND;
+
+ grub_snprintf (config, config_len, "%s/grub.cfg", prefix);
+ err = grub_net_search_config_file (config);
+ }
+
+ if (err != GRUB_ERR_NONE)
+ {
+ config = grub_xasprintf ("%s/grub.cfg", prefix);
+ if (config)
+ {
+ grub_file_t file;
+ file = grub_file_open (config, GRUB_FILE_TYPE_CONFIG);
+ if (file)
+ {
+ grub_file_close (file);
+ err = GRUB_ERR_NONE;
+ }
+ }
+ }
+
+ if (err == GRUB_ERR_NONE)
+ grub_enter_normal_mode (config);
+
+ grub_errno = 0;
+ grub_free (config);
+ return err;
+}
+
/* Enter normal mode from rescue mode. */
static grub_err_t
grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)),
int argc, char *argv[])
{
- if (argc == 0)
+ if (argc)
+ grub_enter_normal_mode (argv[0]);
+ else
{
- /* Guess the config filename. It is necessary to make CONFIG static,
- so that it won't get broken by longjmp. */
- char *config;
- const char *prefix;
- const char *net_search_cfg;
- int disable_net_search = 0;
-
- prefix = grub_env_get ("fw_path");
- if (! prefix)
- prefix = grub_env_get ("prefix");
-
- net_search_cfg = grub_env_get ("feature_net_search_cfg");
- if (net_search_cfg && net_search_cfg[0] == 'n')
- disable_net_search = 1;
-
- if (prefix)
- {
- if (grub_strncmp (prefix + 1, "tftp", sizeof ("tftp") - 1) == 0 &&
- !disable_net_search)
- {
- grub_size_t config_len;
- config_len = grub_strlen (prefix) +
- sizeof ("/grub.cfg-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
- config = grub_malloc (config_len);
-
- if (! config)
- goto quit;
-
- grub_snprintf (config, config_len, "%s/grub.cfg", prefix);
-
- grub_net_search_configfile (config);
-
- grub_enter_normal_mode (config);
- grub_free (config);
- config = NULL;
- }
-
- if (!config)
- {
- config = grub_xasprintf ("%s/grub.cfg", prefix);
- if (config)
- {
- grub_file_t file;
-
- file = grub_file_open (config, GRUB_FILE_TYPE_CONFIG);
- if (file)
- {
- grub_file_close (file);
- grub_enter_normal_mode (config);
- }
- else
- {
- /* Ignore all errors. */
- grub_errno = 0;
- }
- grub_free (config);
- }
- }
- }
- else
- {
- grub_enter_normal_mode (0);
- }
+ /* Guess the config filename. */
+ grub_err_t err;
+ err = grub_try_normal ("fw_path");
+ if (err == GRUB_ERR_FILE_NOT_FOUND)
+ err = grub_try_normal ("prefix");
+ if (err == GRUB_ERR_FILE_NOT_FOUND)
+ grub_enter_normal_mode (0);
}
- else
- grub_enter_normal_mode (argv[0]);
-quit:
return 0;
}
--
2.46.2
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel
next prev parent reply other threads:[~2024-10-10 21:45 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-10 21:43 [PATCH v3 00/16] First Distro-agnostic series taken from Fedora Rawhide Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 01/16] ieee1275/openfw: IBM client architecture (CAS) reboot support Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 02/16] term/terminfo: for ppc, reset console display attr when clear screen Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 03/16] ieee1275: Disable GRUB video support for IBM power machines Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 04/16] configure.ac: Move bash completion script Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 05/16] misc: Make "exit" take a return code Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 06/16] efi/init: Make efi machines load an env block from a variable Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 07/16] 20_ppc_terminfo.in: Migrate ieee1275/PPC from Yaboot to Grub2 Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 08/16] normal: Add fw_path variable (revised) Leo Sandoval
2024-10-15 5:23 ` Michael Chang via Grub-devel
2024-10-15 9:01 ` Vladimir 'phcoder' Serbinenko
2024-10-10 21:43 ` [PATCH v3 09/16] commands: Pass "\x[[:hex:]][[:hex:]]" straight through unmolested Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 10/16] 10_linux.in: Add devicetree loading Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 11/16] Makefile.common: Add .eh_frame to list of relocations stripped Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 12/16] 10_linux.in: Don't require a password to boot entries generated by grub-mkconfig Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 13/16] normal/main: fw_path prefix when fallback searching for grub config Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 14/16] normal/main: Try mac/guid/etc before grub.cfg on tftp config files Leo Sandoval
2024-10-10 21:43 ` [PATCH v3 15/16] 10_linux.in: Generate OS and CLASS in 10_linux from /etc/os-release Leo Sandoval
2024-10-10 21:43 ` Leo Sandoval [this message]
2024-10-30 16:39 ` [PATCH v3 00/16] First Distro-agnostic series taken from Fedora Rawhide Daniel Kiper
2024-10-30 17:03 ` Leo Sandoval
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241010214334.1749167-17-lsandova@redhat.com \
--to=lsandova@redhat.com \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.