update error handling to use less ASSERT.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11053 6f19259b-4bc3-4df7-8a09-765794883524
diff --git a/ShellPkg/Include/Library/HandleParsingLib.h b/ShellPkg/Include/Library/HandleParsingLib.h
index b8166ff..8c0b81d 100644
--- a/ShellPkg/Include/Library/HandleParsingLib.h
+++ b/ShellPkg/Include/Library/HandleParsingLib.h
@@ -331,7 +331,8 @@
   @param[in] ProtocolGuids  A NULL terminated list of protocol GUIDs.

 

   @retval NULL              A memory allocation failed.

-  @return                   A NULL terminated list of handles.

+  @retval NULL              ProtocolGuids was NULL.

+  @return                   A NULL terminated list of EFI_HANDLEs.

 **/

 EFI_HANDLE*

 EFIAPI

diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
index 107b335..6b59bfd 100644
--- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
+++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
@@ -1105,7 +1105,9 @@
   BOOLEAN     Found;

   EFI_HANDLE  *HandleBufferForReturn;

 

-  ASSERT (MatchingHandleCount != NULL);

+  if (MatchingHandleCount == NULL) {

+    return (EFI_INVALID_PARAMETER);

+  }

 

   Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS (

             ControllerHandle,

@@ -1116,10 +1118,13 @@
     return Status;

   }

 

-  HandleBufferForReturn = GetHandleListByProtocol(&gEfiDriverBindingProtocolGuid);

+  //

+  // Get a buffer big enough for all the controllers.

+  //

+  HandleBufferForReturn = GetHandleListByProtocol(&gEfiDevicePathProtocolGuid);

   if (HandleBufferForReturn == NULL) {

     FreePool (DriverBindingHandleBuffer);

-    return Status;

+    return (EFI_NOT_FOUND);

   }

 

   *MatchingHandleCount = 0;

@@ -1361,7 +1366,8 @@
   @param[in] ProtocolGuids  A NULL terminated list of protocol GUIDs.

 

   @retval NULL              A memory allocation failed.

-  @return                   A NULL terminated list of handles.

+  @retval NULL              ProtocolGuids was NULL.

+  @return                   A NULL terminated list of EFI_HANDLEs.

 **/

 EFI_HANDLE*

 EFIAPI

@@ -1397,7 +1403,6 @@
   }

 

   HandleList = AllocateZeroPool(TotalSize);

-  ASSERT(HandleList != NULL);

   if (HandleList == NULL) {

     return (NULL);

   }

@@ -1405,16 +1410,16 @@
   Size = 0;

   for (GuidWalker = ProtocolGuids ; GuidWalker != NULL && *GuidWalker != NULL ; GuidWalker++){

     TempSize = TotalSize - Size;

-    Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &TempSize, HandleList+((TotalSize - Size)/sizeof(EFI_HANDLE)));

+    Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &TempSize, HandleList+(Size/sizeof(EFI_HANDLE)));

 

     //

     // Allow for missing protocols... Only update the 'used' size upon success.

     //

     if (!EFI_ERROR(Status)) {

-      Size = TempSize;

+      Size += TempSize;

     }

   }

-  HandleList[(TotalSize/sizeof(EFI_HANDLE))-1] = NULL;

+  ASSERT(HandleList[(TotalSize/sizeof(EFI_HANDLE))-1] == NULL);

 

   for (HandleWalker1 = HandleList ; HandleWalker1 != NULL && *HandleWalker1 != NULL ; HandleWalker1++) {

     for (HandleWalker2 = HandleWalker1 + 1; HandleWalker2 != NULL && *HandleWalker2 != NULL ; HandleWalker2++) {

diff --git a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c
index 4aec5d4..2dd39ef 100644
--- a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c
+++ b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c
@@ -1171,7 +1171,8 @@
   @param[in] Handle     The pointer to EFI_FILE_PROTOCOL to convert.

   @param[in] Path       The path to the file for verification.

 

-  @return a SHELL_FILE_HANDLE representing the same file.

+  @return               A SHELL_FILE_HANDLE representing the same file.

+  @retval NULL          There was not enough memory.

 **/

 SHELL_FILE_HANDLE

 EFIAPI

@@ -1185,11 +1186,18 @@
 

   if (Path != NULL) {

     Buffer              = AllocateZeroPool(sizeof(SHELL_COMMAND_FILE_HANDLE));

-    ASSERT(Buffer  != NULL);

+    if (Buffer == NULL) {

+      return (NULL);

+    }

     NewNode             = AllocatePool(sizeof(BUFFER_LIST));

-    ASSERT(NewNode != NULL);

+    if (NewNode == NULL) {

+      return (NULL);

+    }

     Buffer->FileHandle  = (EFI_FILE_PROTOCOL*)Handle;

     Buffer->Path        = StrnCatGrow(&Buffer->Path, NULL, Path, 0);

+    if (Buffer->Path == NULL) {

+      return (NULL);

+    }

     NewNode->Buffer     = Buffer;

 

     InsertHeadList(&mFileHandleList.Link, &NewNode->Link);

@@ -1244,8 +1252,10 @@
     ;  Node = (BUFFER_LIST*)GetNextNode(&mFileHandleList.Link, &Node->Link)

    ){

     if ((Node->Buffer) && (((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->FileHandle == Handle)){

-      SHELL_FREE_NON_NULL(((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->Path);

       RemoveEntryList(&Node->Link);

+      SHELL_FREE_NON_NULL(((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->Path);

+      SHELL_FREE_NON_NULL(Node->Buffer);

+      SHELL_FREE_NON_NULL(Node);

       return (TRUE);

     }

   }