X-Git-Url: https://code.delx.au/refind/blobdiff_plain/8b5b878155046a6da1956a2855f39f364abc0338..ad41af04b0b2e3c789935776eb65f52821cfa8ff:/refind/lib.c diff --git a/refind/lib.c b/refind/lib.c index 0de0cc4..dc187c6 100644 --- a/refind/lib.c +++ b/refind/lib.c @@ -34,8 +34,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* - * Modifications copyright (c) 2012-2013 Roderick W. Smith - * + * Modifications copyright (c) 2012-2014 Roderick W. Smith + * * Modifications 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. @@ -507,7 +507,7 @@ static VOID ScanVolumeBootcode(REFIT_VOLUME *Volume, BOOLEAN *Bootable) UINT8 Buffer[SAMPLE_SIZE]; UINTN i; MBR_PARTITION_INFO *MbrTable; - BOOLEAN MbrTableFound; + BOOLEAN MbrTableFound = FALSE; Volume->HasBootCode = FALSE; Volume->OSIconName = NULL; @@ -635,9 +635,13 @@ static VOID ScanVolumeBootcode(REFIT_VOLUME *Volume, BOOLEAN *Bootable) if (FindMem(Buffer, 512, "Press any key to restart", 24) >= 0) Volume->HasBootCode = FALSE; + // dummy FAT boot sector (created by iPartition) + if ((FindMem(Buffer, 512, "Medienfehler", 12) >= 0) && + (FindMem(Buffer, 512, "Neustart: Taste dr\x81" "ken", 22) >= 0)) + Volume->HasBootCode = FALSE; + // check for MBR partition table if (*((UINT16 *)(Buffer + 510)) == 0xaa55) { - MbrTableFound = FALSE; MbrTable = (MBR_PARTITION_INFO *)(Buffer + 446); for (i = 0; i < 4; i++) if (MbrTable[i].StartLBA && MbrTable[i].Size) @@ -747,7 +751,7 @@ static CHAR16 *GetVolumeName(IN REFIT_VOLUME *Volume) { if (FoundName != NULL) { TypeName = FSTypeName(Volume->FSType); // NOTE: Don't free TypeName; function returns constant if (StrLen(TypeName) > 0) - SPrint(FoundName, 255, L"%s volume", FSTypeName(Volume->FSType)); + SPrint(FoundName, 255, L"%s volume", TypeName); else SPrint(FoundName, 255, L"unknown volume"); } // if allocated memory OK @@ -1138,7 +1142,8 @@ VOID ReinitVolumes(VOID) if (!EFI_ERROR(Status)) { // get the BlockIO protocol - Status = refit_call3_wrapper(BS->HandleProtocol, WholeDiskHandle, &BlockIoProtocol, (VOID **) &Volume->WholeDiskBlockIO); + Status = refit_call3_wrapper(BS->HandleProtocol, WholeDiskHandle, &BlockIoProtocol, + (VOID **) &Volume->WholeDiskBlockIO); if (EFI_ERROR(Status)) { Volume->WholeDiskBlockIO = NULL; CheckError(Status, L"from HandleProtocol");