X-Git-Url: https://code.delx.au/refind/blobdiff_plain/224ffad523048df8ad5f14038de21b7afe6a3b6a..c63e9bd427f945b881d337b9fd5d3ff8612f103f:/refind/gpt.c diff --git a/refind/gpt.c b/refind/gpt.c index 83dd6d3..c9b2ac2 100644 --- a/refind/gpt.c +++ b/refind/gpt.c @@ -2,14 +2,22 @@ * refind/gpt.c * Functions related to GPT data structures * - * Copyright (c) 2014 Roderick W. Smith + * 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 . +*/ #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) {