always define config_directory and config_file as full pathname
If configfile is relative pathname, extend it with current ($root) so its interpretation does not change if $root is changed later. Suggested by Vladimir Serbienko.
This commit is contained in:
parent
dd73313cba
commit
9f2f979bcf
1 changed files with 19 additions and 7 deletions
|
@ -190,14 +190,26 @@ read_config_file (const char *config)
|
||||||
ctmp = grub_env_get ("config_directory");
|
ctmp = grub_env_get ("config_directory");
|
||||||
if (ctmp)
|
if (ctmp)
|
||||||
old_dir = grub_strdup (ctmp);
|
old_dir = grub_strdup (ctmp);
|
||||||
|
if (*config == '(')
|
||||||
|
{
|
||||||
grub_env_set ("config_file", config);
|
grub_env_set ("config_file", config);
|
||||||
config_dir = grub_strdup (config);
|
config_dir = grub_strdup (config);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* $root is guranteed to be defined, otherwise open above would fail */
|
||||||
|
config_dir = grub_xasprintf ("(%s)%s", grub_env_get ("root"), config);
|
||||||
if (config_dir)
|
if (config_dir)
|
||||||
|
grub_env_set ("config_file", config_dir);
|
||||||
|
}
|
||||||
|
if (config_dir)
|
||||||
|
{
|
||||||
ptr = grub_strrchr (config_dir, '/');
|
ptr = grub_strrchr (config_dir, '/');
|
||||||
if (ptr)
|
if (ptr)
|
||||||
*ptr = 0;
|
*ptr = 0;
|
||||||
grub_env_set ("config_directory", config_dir);
|
grub_env_set ("config_directory", config_dir);
|
||||||
grub_free (config_dir);
|
grub_free (config_dir);
|
||||||
|
}
|
||||||
|
|
||||||
grub_env_export ("config_file");
|
grub_env_export ("config_file");
|
||||||
grub_env_export ("config_directory");
|
grub_env_export ("config_directory");
|
||||||
|
|
Loading…
Reference in a new issue