]> git.proxmox.com Git - mirror_edk2.git/commitdiff
update error handling to use less ASSERT.
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 12 Nov 2010 21:40:12 +0000 (21:40 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 12 Nov 2010 21:40:12 +0000 (21:40 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11053 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Include/Library/HandleParsingLib.h
ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c

index b8166ff76fc4260107e15d68cf004ebb24a1dd88..8c0b81d12c34a9c46bb9ed486565044f2ae8b40d 100644 (file)
@@ -331,7 +331,8 @@ GetHandleListByProtocol (
   @param[in] ProtocolGuids  A NULL terminated list of protocol GUIDs.\r
 \r
   @retval NULL              A memory allocation failed.\r
-  @return                   A NULL terminated list of handles.\r
+  @retval NULL              ProtocolGuids was NULL.\r
+  @return                   A NULL terminated list of EFI_HANDLEs.\r
 **/\r
 EFI_HANDLE*\r
 EFIAPI\r
index 107b3354e553243cfefa9f22e10297f8f7adfc56..6b59bfd6ab31da00e3616c275c923a5d1060c69c 100644 (file)
@@ -1105,7 +1105,9 @@ ParseHandleDatabaseForChildControllers(
   BOOLEAN     Found;\r
   EFI_HANDLE  *HandleBufferForReturn;\r
 \r
-  ASSERT (MatchingHandleCount != NULL);\r
+  if (MatchingHandleCount == NULL) {\r
+    return (EFI_INVALID_PARAMETER);\r
+  }\r
 \r
   Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS (\r
             ControllerHandle,\r
@@ -1116,10 +1118,13 @@ ParseHandleDatabaseForChildControllers(
     return Status;\r
   }\r
 \r
-  HandleBufferForReturn = GetHandleListByProtocol(&gEfiDriverBindingProtocolGuid);\r
+  //\r
+  // Get a buffer big enough for all the controllers.\r
+  //\r
+  HandleBufferForReturn = GetHandleListByProtocol(&gEfiDevicePathProtocolGuid);\r
   if (HandleBufferForReturn == NULL) {\r
     FreePool (DriverBindingHandleBuffer);\r
-    return Status;\r
+    return (EFI_NOT_FOUND);\r
   }\r
 \r
   *MatchingHandleCount = 0;\r
@@ -1361,7 +1366,8 @@ GetHandleListByProtocol (
   @param[in] ProtocolGuids  A NULL terminated list of protocol GUIDs.\r
 \r
   @retval NULL              A memory allocation failed.\r
-  @return                   A NULL terminated list of handles.\r
+  @retval NULL              ProtocolGuids was NULL.\r
+  @return                   A NULL terminated list of EFI_HANDLEs.\r
 **/\r
 EFI_HANDLE*\r
 EFIAPI\r
@@ -1397,7 +1403,6 @@ GetHandleListByProtocolList (
   }\r
 \r
   HandleList = AllocateZeroPool(TotalSize);\r
-  ASSERT(HandleList != NULL);\r
   if (HandleList == NULL) {\r
     return (NULL);\r
   }\r
@@ -1405,16 +1410,16 @@ GetHandleListByProtocolList (
   Size = 0;\r
   for (GuidWalker = ProtocolGuids ; GuidWalker != NULL && *GuidWalker != NULL ; GuidWalker++){\r
     TempSize = TotalSize - Size;\r
-    Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &TempSize, HandleList+((TotalSize - Size)/sizeof(EFI_HANDLE)));\r
+    Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &TempSize, HandleList+(Size/sizeof(EFI_HANDLE)));\r
 \r
     //\r
     // Allow for missing protocols... Only update the 'used' size upon success.\r
     //\r
     if (!EFI_ERROR(Status)) {\r
-      Size = TempSize;\r
+      Size += TempSize;\r
     }\r
   }\r
-  HandleList[(TotalSize/sizeof(EFI_HANDLE))-1] = NULL;\r
+  ASSERT(HandleList[(TotalSize/sizeof(EFI_HANDLE))-1] == NULL);\r
 \r
   for (HandleWalker1 = HandleList ; HandleWalker1 != NULL && *HandleWalker1 != NULL ; HandleWalker1++) {\r
     for (HandleWalker2 = HandleWalker1 + 1; HandleWalker2 != NULL && *HandleWalker2 != NULL ; HandleWalker2++) {\r
index 4aec5d44ca0583b261cf606bfeca8bdbe6bd407f..2dd39ef3cf453b091903b3c72d44e0e501c58625 100644 (file)
@@ -1171,7 +1171,8 @@ ConvertShellHandleToEfiFileProtocol(
   @param[in] Handle     The pointer to EFI_FILE_PROTOCOL to convert.\r
   @param[in] Path       The path to the file for verification.\r
 \r
-  @return a SHELL_FILE_HANDLE representing the same file.\r
+  @return               A SHELL_FILE_HANDLE representing the same file.\r
+  @retval NULL          There was not enough memory.\r
 **/\r
 SHELL_FILE_HANDLE\r
 EFIAPI\r
@@ -1185,11 +1186,18 @@ ConvertEfiFileProtocolToShellHandle(
 \r
   if (Path != NULL) {\r
     Buffer              = AllocateZeroPool(sizeof(SHELL_COMMAND_FILE_HANDLE));\r
-    ASSERT(Buffer  != NULL);\r
+    if (Buffer == NULL) {\r
+      return (NULL);\r
+    }\r
     NewNode             = AllocatePool(sizeof(BUFFER_LIST));\r
-    ASSERT(NewNode != NULL);\r
+    if (NewNode == NULL) {\r
+      return (NULL);\r
+    }\r
     Buffer->FileHandle  = (EFI_FILE_PROTOCOL*)Handle;\r
     Buffer->Path        = StrnCatGrow(&Buffer->Path, NULL, Path, 0);\r
+    if (Buffer->Path == NULL) {\r
+      return (NULL);\r
+    }\r
     NewNode->Buffer     = Buffer;\r
 \r
     InsertHeadList(&mFileHandleList.Link, &NewNode->Link);\r
@@ -1244,8 +1252,10 @@ ShellFileHandleRemove(
     ;  Node = (BUFFER_LIST*)GetNextNode(&mFileHandleList.Link, &Node->Link)\r
    ){\r
     if ((Node->Buffer) && (((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->FileHandle == Handle)){\r
-      SHELL_FREE_NON_NULL(((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->Path);\r
       RemoveEntryList(&Node->Link);\r
+      SHELL_FREE_NON_NULL(((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->Path);\r
+      SHELL_FREE_NON_NULL(Node->Buffer);\r
+      SHELL_FREE_NON_NULL(Node);\r
       return (TRUE);\r
     }\r
   }\r