[v2,01/14] efi_loader: allow device == NULL in efi_dp_from_name()

Message ID 20181105090653.7409-2-takahiro.akashi@linaro.org
State Accepted
Commit 2419b161cc083c4927c2ee0582ccc93d1d54b3b0
Headers show
Series
  • efi: make efi and bootmgr more usable
Related show

Commit Message

AKASHI Takahiro Nov. 5, 2018, 9:06 a.m.
This is a preparatory patch for use in efi_serialize_load_option()
as a load option's file_path should have both a device path and
a file path.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
---
 lib/efi_loader/efi_device_path.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

Patch

diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c
index cdf7c7be8c5c..d94982314a3e 100644
--- a/lib/efi_loader/efi_device_path.c
+++ b/lib/efi_loader/efi_device_path.c
@@ -955,7 +955,7 @@  efi_status_t efi_dp_from_name(const char *dev, const char *devnr,
 	char filename[32] = { 0 }; /* dp->str is u16[32] long */
 	char *s;
 
-	if (!device || (path && !file))
+	if (path && !file)
 		return EFI_INVALID_PARAMETER;
 
 	is_net = !strcmp(dev, "Net");
@@ -965,10 +965,12 @@  efi_status_t efi_dp_from_name(const char *dev, const char *devnr,
 		if (part < 0)
 			return EFI_INVALID_PARAMETER;
 
-		*device = efi_dp_from_part(desc, part);
+		if (device)
+			*device = efi_dp_from_part(desc, part);
 	} else {
 #ifdef CONFIG_NET
-		*device = efi_dp_from_eth();
+		if (device)
+			*device = efi_dp_from_eth();
 #endif
 	}
 
@@ -985,7 +987,8 @@  efi_status_t efi_dp_from_name(const char *dev, const char *devnr,
 	s = filename;
 	while ((s = strchr(s, '/')))
 		*s++ = '\\';
-	*file = efi_dp_from_file(NULL, 0, filename);
+	*file = efi_dp_from_file(((!is_net && device) ? desc : NULL),
+				 part, filename);
 
 	return EFI_SUCCESS;
 }