Print(prompt);
- if (ReadAllKeyStrokes()) { // remove buffered key strokes
- refit_call1_wrapper(BS->Stall, 500000); // 0.5 seconds delay
- ReadAllKeyStrokes(); // empty the buffer again
- }
-
- refit_call3_wrapper(BS->WaitForEvent, 1, &ST->ConIn->WaitForKey, &Index);
- Status = refit_call2_wrapper(ST->ConIn->ReadKeyStroke, ST->ConIn, &Key);
- if (EFI_ERROR(Status))
- return 1;
+ ReadAllKeyStrokes(); // Remove buffered key strokes
+ do {
+ refit_call3_wrapper(BS->WaitForEvent, 1, &ST->ConIn->WaitForKey, &Index);
+ Status = refit_call2_wrapper(ST->ConIn->ReadKeyStroke, ST->ConIn, &Key);
+ if (EFI_ERROR(Status) && Status != EFI_NOT_READY)
+ return 1;
+ } while (Status == EFI_NOT_READY);
if (Key.UnicodeChar == 'y' || Key.UnicodeChar == 'Y') {
Print(L"Yes\n");
#ifdef __MAKEWITH_TIANO
-extern EFI_DXE_SERVICES *gDS;
-
// EFI_GUID gEfiDxeServicesTableGuid = { 0x05AD34BA, 0x6F02, 0x4214, { 0x95, 0x2E, 0x4D, 0xA0, 0x39, 0x8E, 0x2B, 0xB9 }};
// Minimal initialization function
gBS = SystemTable->BootServices;
// gRS = SystemTable->RuntimeServices;
gRT = SystemTable->RuntimeServices; // Some BDS functions need gRT to be set
-// EfiGetSystemConfigurationTable (&gEfiDxeServicesTableGuid, (VOID **) &gDS);
// InitializeConsoleSim();
}
#endif
+// Performs a case-insensitive string comparison. This function is necesary
+// because some EFIs have buggy StriCmp() functions that actually perform
+// case-sensitive comparisons.
+// Returns TRUE if strings are identical, FALSE otherwise.
+static BOOLEAN MyStriCmp(IN CHAR16 *FirstString, IN CHAR16 *SecondString) {
+ if (FirstString && SecondString) {
+ while ((*FirstString != L'\0') && ((*FirstString & ~0x20) == (*SecondString & ~0x20))) {
+ FirstString++;
+ SecondString++;
+ }
+ return (*FirstString == *SecondString);
+ } else {
+ return FALSE;
+ }
+} // BOOLEAN MyStriCmp()
+
// Check firmware vendor; get verification to continue if it's not Apple.
// Returns TRUE if Apple firmware or if user assents to use, FALSE otherwise.
static BOOLEAN VerifyGoOn(VOID) {
BOOLEAN GoOn = TRUE;
UINTN invalid;
- if (StriCmp(L"Apple", ST->FirmwareVendor) != 0) {
+ if (!MyStriCmp(L"Apple", ST->FirmwareVendor)) {
Print(L"Your firmware is made by %s.\n", ST->FirmwareVendor);
Print(L"Ordinarily, a hybrid MBR (which this program creates) should be used ONLY on\n");
Print(L"Apple Macs that dual-boot with Windows or some other BIOS-mode OS. Are you\n");