mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
efi_loader: efi_setup_loaded_image() handle missing file name
This is a preparatory patch. efi_dp_split_file_path() is used to create device_path and file_path from file_path for efi_setup_loaded_image(). In a special case, however, of HARDWARE_DEVICE/MEMORY, it doesn't work expectedly since this path doesn't contain any FILE_PATH sub-type. This patch makes a workaround. Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> Adjust the logic such that for all paths that do no end on a media file path we return NULL as file_path. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
6c5f8dd540
commit
f86076d885
1 changed files with 4 additions and 3 deletions
|
@ -917,14 +917,14 @@ struct efi_device_path *efi_dp_from_mem(uint32_t memory_type,
|
||||||
*
|
*
|
||||||
* @full_path: device path including device and file path
|
* @full_path: device path including device and file path
|
||||||
* @device_path: path of the device
|
* @device_path: path of the device
|
||||||
* @file_path: relative path of the file
|
* @file_path: relative path of the file or NULL if there is none
|
||||||
* Return: status code
|
* Return: status code
|
||||||
*/
|
*/
|
||||||
efi_status_t efi_dp_split_file_path(struct efi_device_path *full_path,
|
efi_status_t efi_dp_split_file_path(struct efi_device_path *full_path,
|
||||||
struct efi_device_path **device_path,
|
struct efi_device_path **device_path,
|
||||||
struct efi_device_path **file_path)
|
struct efi_device_path **file_path)
|
||||||
{
|
{
|
||||||
struct efi_device_path *p, *dp, *fp;
|
struct efi_device_path *p, *dp, *fp = NULL;
|
||||||
|
|
||||||
*device_path = NULL;
|
*device_path = NULL;
|
||||||
*file_path = NULL;
|
*file_path = NULL;
|
||||||
|
@ -935,7 +935,7 @@ efi_status_t efi_dp_split_file_path(struct efi_device_path *full_path,
|
||||||
while (!EFI_DP_TYPE(p, MEDIA_DEVICE, FILE_PATH)) {
|
while (!EFI_DP_TYPE(p, MEDIA_DEVICE, FILE_PATH)) {
|
||||||
p = efi_dp_next(p);
|
p = efi_dp_next(p);
|
||||||
if (!p)
|
if (!p)
|
||||||
return EFI_INVALID_PARAMETER;
|
goto out;
|
||||||
}
|
}
|
||||||
fp = efi_dp_dup(p);
|
fp = efi_dp_dup(p);
|
||||||
if (!fp)
|
if (!fp)
|
||||||
|
@ -944,6 +944,7 @@ efi_status_t efi_dp_split_file_path(struct efi_device_path *full_path,
|
||||||
p->sub_type = DEVICE_PATH_SUB_TYPE_END;
|
p->sub_type = DEVICE_PATH_SUB_TYPE_END;
|
||||||
p->length = sizeof(*p);
|
p->length = sizeof(*p);
|
||||||
|
|
||||||
|
out:
|
||||||
*device_path = dp;
|
*device_path = dp;
|
||||||
*file_path = fp;
|
*file_path = fp;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue