summaryrefslogtreecommitdiffstats
path: root/MdeModulePkg
diff options
context:
space:
mode:
authormdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524>2011-03-16 16:17:09 +0000
committermdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524>2011-03-16 16:17:09 +0000
commita36a9b37940a8b7f6ccfe0a9cafe4195530f3891 (patch)
tree2bfae7fdc62ea1fdafeec58d1726690c2beea5a9 /MdeModulePkg
parentb3d25388575253929464141f7d7f2f7ded790e2e (diff)
downloadedk2-a36a9b37940a8b7f6ccfe0a9cafe4195530f3891.tar.gz
edk2-a36a9b37940a8b7f6ccfe0a9cafe4195530f3891.tar.bz2
edk2-a36a9b37940a8b7f6ccfe0a9cafe4195530f3891.zip
Fix LocateDevicePath() to return proper error status code. It was returning EFI_INVALID_PARAMETER if Device was NULL even if not handles matched the search criteria. The proper behavior is to return EFI_NOT_FOUND if not handles match the search criteria, and only return EFI_INVALID_PARAMETER if at least one match is found and Device is NULL.
Also update function header comment block for LocateDevicePath() to match UEFI Specification. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11406 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg')
-rw-r--r--MdeModulePkg/Core/Dxe/Hand/Locate.c37
1 files changed, 20 insertions, 17 deletions
diff --git a/MdeModulePkg/Core/Dxe/Hand/Locate.c b/MdeModulePkg/Core/Dxe/Hand/Locate.c
index df7fa8fa6d..d4bc63c2ee 100644
--- a/MdeModulePkg/Core/Dxe/Hand/Locate.c
+++ b/MdeModulePkg/Core/Dxe/Hand/Locate.c
@@ -1,7 +1,7 @@
/** @file
Locate handle functions
-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -406,18 +406,19 @@ CoreGetNextLocateByProtocol (
/**
- Locates the handle to a device on the device path that best matches the specified protocol.
+ Locates the handle to a device on the device path that supports the specified protocol.
- @param Protocol The protocol to search for.
- @param DevicePath On input, a pointer to a pointer to the device
- path. On output, the device path pointer is
- modified to point to the remaining part of the
- devicepath.
- @param Device A pointer to the returned device handle.
+ @param Protocol Specifies the protocol to search for.
+ @param DevicePath On input, a pointer to a pointer to the device path. On output, the device
+ path pointer is modified to point to the remaining part of the device
+ path.
+ @param Device A pointer to the returned device handle.
- @retval EFI_SUCCESS The resulting handle was returned.
- @retval EFI_NOT_FOUND No handles matched the search.
- @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
+ @retval EFI_SUCCESS The resulting handle was returned.
+ @retval EFI_NOT_FOUND No handles match the search.
+ @retval EFI_INVALID_PARAMETER Protocol is NULL.
+ @retval EFI_INVALID_PARAMETER DevicePath is NULL.
+ @retval EFI_INVALID_PARAMETER A handle matched the search and Device is NULL.
**/
EFI_STATUS
@@ -436,6 +437,7 @@ CoreLocateDevicePath (
EFI_STATUS Status;
EFI_HANDLE *Handles;
EFI_HANDLE Handle;
+ EFI_HANDLE BestDevice;
EFI_DEVICE_PATH_PROTOCOL *SourcePath;
EFI_DEVICE_PATH_PROTOCOL *TmpDevicePath;
@@ -447,11 +449,7 @@ CoreLocateDevicePath (
return EFI_INVALID_PARAMETER;
}
- if (Device == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- *Device = NULL;
+ BestDevice = NULL;
SourcePath = *DevicePath;
TmpDevicePath = SourcePath;
while (!IsDevicePathEnd (TmpDevicePath)) {
@@ -504,7 +502,7 @@ CoreLocateDevicePath (
//
if (Size > BestMatch) {
BestMatch = Size;
- *Device = Handle;
+ BestDevice = Handle;
}
}
}
@@ -519,6 +517,11 @@ CoreLocateDevicePath (
return EFI_NOT_FOUND;
}
+ if (Device == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+ *Device = BestDevice;
+
//
// Return the remaining part of the device path
//