]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Application/CapsuleApp/CapsuleDump.c
IntelSiliconPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Application / CapsuleApp / CapsuleDump.c
index ba2583accbc2c2ed2e84cc2811a41167e0e7aa43..9fd4af4e5584c85eb8680205113f053214bcf572 100644 (file)
@@ -806,48 +806,69 @@ DumpCapsuleFromDisk (
   Status = Fs->OpenVolume (Fs, &Root);\r
   if (EFI_ERROR (Status)) {\r
     Print (L"Cannot open volume. Status = %r\n", Status);\r
-    return EFI_NOT_FOUND;\r
+    goto Done;\r
   }\r
 \r
   Status = Root->Open (Root, &DirHandle, EFI_CAPSULE_FILE_DIRECTORY, EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE , 0);\r
   if (EFI_ERROR (Status)) {\r
     Print (L"Cannot open %s. Status = %r\n", EFI_CAPSULE_FILE_DIRECTORY, Status);\r
-    return EFI_NOT_FOUND;\r
+    goto Done;\r
   }\r
 \r
   //\r
   // Get file count first\r
   //\r
-  for ( Status = FileHandleFindFirstFile (DirHandle, &FileInfo)\r
-      ; !EFI_ERROR(Status) && !NoFile\r
-      ; Status = FileHandleFindNextFile (DirHandle, FileInfo, &NoFile)\r
-     ){\r
-    if ((FileInfo->Attribute & (EFI_FILE_SYSTEM | EFI_FILE_ARCHIVE)) == 0) {\r
-      continue;\r
+  do {\r
+    Status = FileHandleFindFirstFile (DirHandle, &FileInfo);\r
+    if (EFI_ERROR (Status) || FileInfo == NULL) {\r
+      Print (L"Get File Info Fail. Status = %r\n", Status);\r
+      goto Done;\r
     }\r
-    FileCount++;\r
-  }\r
+\r
+    if ((FileInfo->Attribute & (EFI_FILE_SYSTEM | EFI_FILE_ARCHIVE)) != 0) {\r
+      FileCount++;\r
+    }\r
+\r
+    Status = FileHandleFindNextFile (DirHandle, FileInfo, &NoFile);\r
+    if (EFI_ERROR (Status)) {\r
+      Print (L"Get Next File Fail. Status = %r\n", Status);\r
+      goto Done;\r
+    }\r
+  } while (!NoFile);\r
 \r
   if (FileCount == 0) {\r
     Print (L"Error: No capsule file found!\n");\r
-    return EFI_NOT_FOUND;\r
+    Status = EFI_NOT_FOUND;\r
+    goto Done;\r
   }\r
 \r
-  FileInfoBuffer = AllocatePool (sizeof(FileInfo) * FileCount);\r
+  FileInfoBuffer = AllocateZeroPool (sizeof (FileInfo) * FileCount);\r
+  if (FileInfoBuffer == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Done;\r
+  }\r
   NoFile = FALSE;\r
 \r
   //\r
   // Get all file info\r
   //\r
-  for ( Status = FileHandleFindFirstFile (DirHandle, &FileInfo)\r
-      ; !EFI_ERROR (Status) && !NoFile\r
-      ; Status = FileHandleFindNextFile (DirHandle, FileInfo, &NoFile)\r
-     ){\r
-    if ((FileInfo->Attribute & (EFI_FILE_SYSTEM | EFI_FILE_ARCHIVE)) == 0) {\r
-      continue;\r
+  do {\r
+    Status = FileHandleFindFirstFile (DirHandle, &FileInfo);\r
+    if (EFI_ERROR (Status) || FileInfo == NULL) {\r
+      Print (L"Get File Info Fail. Status = %r\n", Status);\r
+      goto Done;\r
+    }\r
+\r
+    if ((FileInfo->Attribute & (EFI_FILE_SYSTEM | EFI_FILE_ARCHIVE)) != 0) {\r
+      FileInfoBuffer[Index++] = AllocateCopyPool ((UINTN)FileInfo->Size, FileInfo);\r
     }\r
-    FileInfoBuffer[Index++] = AllocateCopyPool ((UINTN)FileInfo->Size, FileInfo);\r
-  }\r
+\r
+    Status = FileHandleFindNextFile (DirHandle, FileInfo, &NoFile);\r
+    if (EFI_ERROR (Status)) {\r
+      Print (L"Get Next File Fail. Status = %r\n", Status);\r
+      goto Done;\r
+    }\r
+  } while (!NoFile);\r
 \r
   //\r
   // Sort FileInfoBuffer by alphabet order\r
@@ -866,7 +887,8 @@ DumpCapsuleFromDisk (
   }\r
 \r
   if (!DumpCapsuleInfo) {\r
-    return EFI_SUCCESS;\r
+    Status = EFI_SUCCESS;\r
+    goto Done;\r
   }\r
 \r
   Print(L"The infomation of the capsules:\n");\r
@@ -875,27 +897,28 @@ DumpCapsuleFromDisk (
     FileHandle = NULL;\r
     Status = DirHandle->Open (DirHandle, &FileHandle, FileInfoBuffer[Index]->FileName, EFI_FILE_MODE_READ, 0);\r
     if (EFI_ERROR (Status)) {\r
-      break;\r
+      goto Done;\r
     }\r
 \r
     Status = FileHandleGetSize (FileHandle, (UINT64 *) &FileSize);\r
     if (EFI_ERROR (Status)) {\r
       Print (L"Cannot read file %s. Status = %r\n", FileInfoBuffer[Index]->FileName, Status);\r
       FileHandleClose (FileHandle);\r
-      return Status;\r
+      goto Done;\r
     }\r
 \r
     FileBuffer = AllocatePool (FileSize);\r
     if (FileBuffer == NULL) {\r
-      return RETURN_OUT_OF_RESOURCES;\r
+      Status = EFI_OUT_OF_RESOURCES;\r
+      goto Done;\r
     }\r
 \r
     Status = FileHandleRead (FileHandle, &FileSize, FileBuffer);\r
     if (EFI_ERROR (Status)) {\r
       Print (L"Cannot read file %s. Status = %r\n", FileInfoBuffer[Index]->FileName, Status);\r
-      FreePool (FileBuffer);\r
       FileHandleClose (FileHandle);\r
-      return Status;\r
+      FreePool (FileBuffer);\r
+      goto Done;\r
     }\r
 \r
     Print (L"**************************\n");\r
@@ -906,7 +929,17 @@ DumpCapsuleFromDisk (
     FreePool (FileBuffer);\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  if (FileInfoBuffer != NULL) {\r
+    for (Index = 0; Index < FileCount; Index++) {\r
+      if (FileInfoBuffer[Index] != NULL) {\r
+        FreePool (FileInfoBuffer[Index]);\r
+      }\r
+    }\r
+    FreePool (FileInfoBuffer);\r
+  }\r
+\r
+  return Status;\r
 }\r
 \r
 /**\r