ieee1275: split up grub_machine_get_bootlocation
Split up some of the functionality in grub_machine_get_bootlocation into grub_ieee1275_get_boot_dev. This will allow for code reuse in a follow on patch. Signed-off-by: Eric Snowberg <eric.snowberg@oracle.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
c225298038
commit
e2faabacff
3 changed files with 31 additions and 18 deletions
|
@ -94,28 +94,12 @@ void
|
||||||
grub_machine_get_bootlocation (char **device, char **path)
|
grub_machine_get_bootlocation (char **device, char **path)
|
||||||
{
|
{
|
||||||
char *bootpath;
|
char *bootpath;
|
||||||
grub_ssize_t bootpath_size;
|
|
||||||
char *filename;
|
char *filename;
|
||||||
char *type;
|
char *type;
|
||||||
|
|
||||||
if (grub_ieee1275_get_property_length (grub_ieee1275_chosen, "bootpath",
|
bootpath = grub_ieee1275_get_boot_dev ();
|
||||||
&bootpath_size)
|
|
||||||
|| bootpath_size <= 0)
|
|
||||||
{
|
|
||||||
/* Should never happen. */
|
|
||||||
grub_printf ("/chosen/bootpath property missing!\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bootpath = (char *) grub_malloc ((grub_size_t) bootpath_size + 64);
|
|
||||||
if (! bootpath)
|
if (! bootpath)
|
||||||
{
|
return;
|
||||||
grub_print_error ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
grub_ieee1275_get_property (grub_ieee1275_chosen, "bootpath", bootpath,
|
|
||||||
(grub_size_t) bootpath_size + 1, 0);
|
|
||||||
bootpath[bootpath_size] = '\0';
|
|
||||||
|
|
||||||
/* Transform an OF device path to a GRUB path. */
|
/* Transform an OF device path to a GRUB path. */
|
||||||
|
|
||||||
|
|
|
@ -561,3 +561,30 @@ grub_ieee1275_canonicalise_devname (const char *path)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
grub_ieee1275_get_boot_dev (void)
|
||||||
|
{
|
||||||
|
char *bootpath;
|
||||||
|
grub_ssize_t bootpath_size;
|
||||||
|
|
||||||
|
if (grub_ieee1275_get_property_length (grub_ieee1275_chosen, "bootpath",
|
||||||
|
&bootpath_size)
|
||||||
|
|| bootpath_size <= 0)
|
||||||
|
{
|
||||||
|
/* Should never happen. */
|
||||||
|
grub_printf ("/chosen/bootpath property missing!\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bootpath = (char *) grub_malloc ((grub_size_t) bootpath_size + 64);
|
||||||
|
if (! bootpath)
|
||||||
|
{
|
||||||
|
grub_print_error ();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
grub_ieee1275_get_property (grub_ieee1275_chosen, "bootpath", bootpath,
|
||||||
|
(grub_size_t) bootpath_size + 1, 0);
|
||||||
|
bootpath[bootpath_size] = '\0';
|
||||||
|
|
||||||
|
return bootpath;
|
||||||
|
}
|
||||||
|
|
|
@ -253,6 +253,8 @@ void EXPORT_FUNC(grub_ieee1275_children_peer) (struct grub_ieee1275_devalias *al
|
||||||
void EXPORT_FUNC(grub_ieee1275_children_first) (const char *devpath,
|
void EXPORT_FUNC(grub_ieee1275_children_first) (const char *devpath,
|
||||||
struct grub_ieee1275_devalias *alias);
|
struct grub_ieee1275_devalias *alias);
|
||||||
|
|
||||||
|
char *EXPORT_FUNC(grub_ieee1275_get_boot_dev) (void);
|
||||||
|
|
||||||
#define FOR_IEEE1275_DEVALIASES(alias) for (grub_ieee1275_devalias_init_iterator (&(alias)); grub_ieee1275_devalias_next (&(alias));)
|
#define FOR_IEEE1275_DEVALIASES(alias) for (grub_ieee1275_devalias_init_iterator (&(alias)); grub_ieee1275_devalias_next (&(alias));)
|
||||||
|
|
||||||
#define FOR_IEEE1275_DEVCHILDREN(devpath, alias) for (grub_ieee1275_children_first ((devpath), &(alias)); \
|
#define FOR_IEEE1275_DEVCHILDREN(devpath, alias) for (grub_ieee1275_children_first ((devpath), &(alias)); \
|
||||||
|
|
Loading…
Reference in a new issue