]> code.delx.au - refind/blobdiff - refind/gpt.c
Fixed uninitialized-pointer bug that manifested as a crash with
[refind] / refind / gpt.c
index de9331700ae576fd53be29c38e6e7ae6313b1ed8..c9b2ac20885601532e21b2533f5dc9f65ce7c020 100644 (file)
@@ -5,11 +5,19 @@
  * Copyright (c) 2014-2015 Roderick W. Smith
  * All rights reserved.
  *
- * This program is distributed under the terms of the GNU General Public
- * License (GPL) version 3 (GPLv3), a copy of which must be distributed
- * with this source code or binaries made from it.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
  *
- */
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
 
 #include "gpt.h"
 #include "lib.h"
@@ -110,7 +118,7 @@ EFI_STATUS ReadGptData(REFIT_VOLUME *Volume, GPT_DATA **Data) {
    EFI_STATUS Status = EFI_SUCCESS;
    UINT64     BufferSize;
    UINTN      i;
-   GPT_DATA   *GptData; // Temporary holding storage; transferred to *Data later
+   GPT_DATA   *GptData = NULL; // Temporary holding storage; transferred to *Data later
 
    if ((Volume == NULL) || (Data == NULL))
       return EFI_INVALID_PARAMETER;
@@ -186,11 +194,11 @@ EFI_STATUS ReadGptData(REFIT_VOLUME *Volume, GPT_DATA **Data) {
 } // EFI_STATUS ReadGptData()
 
 // Look in gPartitions for a partition with the specified Guid. If found, return
-// a pointer to that partition's name string. If not found, return a NULL pointer.
+// a pointer to that partition's data. If not found, return a NULL pointer.
 // The calling function is responsible for freeing the returned memory.
-CHAR16 * PartNameFromGuid(EFI_GUID *Guid) {
+GPT_ENTRY * FindPartWithGuid(EFI_GUID *Guid) {
    UINTN     i;
-   CHAR16    *Found = NULL;
+   GPT_ENTRY *Found = NULL;
    GPT_DATA  *GptData;
 
    if ((Guid == NULL) || (gPartitions == NULL))
@@ -200,15 +208,17 @@ CHAR16 * PartNameFromGuid(EFI_GUID *Guid) {
    while ((GptData != NULL) && (!Found)) {
       i = 0;
       while ((i < GptData->Header->entry_count) && (!Found)) {
-         if (GuidsAreEqual((EFI_GUID*) &(GptData->Entries[i].partition_guid), Guid))
-            Found = StrDuplicate(GptData->Entries[i].name);
-         else
+         if (GuidsAreEqual((EFI_GUID*) &(GptData->Entries[i].partition_guid), Guid)) {
+            Found = AllocateZeroPool(sizeof(GPT_ENTRY));
+            CopyMem(Found, &GptData->Entries[i], sizeof(GPT_ENTRY));
+         } else {
             i++;
+         } // if/else
       } // while(scanning entries)
       GptData = GptData->NextEntry;
    } // while(scanning GPTs)
    return Found;
-} // CHAR16 * PartNameFromGuid()
+} // GPT_ENTRY * FindPartWithGuid()
 
 // Erase the gPartitions linked-list data structure
 VOID ForgetPartitionTables(VOID) {