From 647955dd8cccd3f0008768d670b4499f75c95a37 Mon Sep 17 00:00:00 2001 From: jief Date: Fri, 17 Apr 2020 15:27:38 +0300 Subject: [PATCH] Fix %x format for char and short. --- Include/Library/printf_lite.h | 6 + Library/MemLogLibDefault/printf_lite.c | 120 +++++++++++------- rEFIt_UEFI/Platform/AcpiPatcher.cpp | 2 +- rEFIt_UEFI/Platform/Nvram.cpp | 2 +- rEFIt_UEFI/Platform/Settings.cpp | 2 +- rEFIt_UEFI/Platform/kernel_patcher.cpp | 2 +- rEFIt_UEFI/cpp_unit_test/LoadOptions_test.cpp | 32 ++--- rEFIt_UEFI/cpp_unit_test/printf_lite-test.cpp | 16 +++ rEFIt_UEFI/libeg/text.cpp | 4 +- rEFIt_UEFI/refit/main.cpp | 8 +- rEFIt_UEFI/refit/menu.cpp | 12 +- 11 files changed, 130 insertions(+), 76 deletions(-) diff --git a/Include/Library/printf_lite.h b/Include/Library/printf_lite.h index a085410d9..ca1ee780a 100755 --- a/Include/Library/printf_lite.h +++ b/Include/Library/printf_lite.h @@ -103,6 +103,12 @@ extern "C" #ifndef PRINTF_LITE_LONGINT_SUPPORT #define PRINTF_LITE_LONGINT_SUPPORT 1 // 1712 bytes #endif +#ifndef PRINTF_LITE_SHORTINT_SUPPORT +#define PRINTF_LITE_SHORTINT_SUPPORT 1 +#endif +#ifndef PRINTF_LITE_SHORTSHORTINT_SUPPORT +#define PRINTF_LITE_SHORTSHORTINT_SUPPORT 1 +#endif #ifndef PRINTF_LITE_TIMESTAMP_SUPPORT #define PRINTF_LITE_TIMESTAMP_SUPPORT 0 // 240 bytes #endif diff --git a/Library/MemLogLibDefault/printf_lite.c b/Library/MemLogLibDefault/printf_lite.c index 1309ce67e..3ffae5f12 100644 --- a/Library/MemLogLibDefault/printf_lite.c +++ b/Library/MemLogLibDefault/printf_lite.c @@ -39,7 +39,7 @@ static void print_timestamp(PrintfParams* printfParams); #elif PRINTF_UNICODE_OUTPUT_SUPPORT == 1 #define print_char_macro(c, printfParams) print_wchar(c, printfParams); #elif PRINTF_UTF8_OUTPUT_SUPPORT == 1 - #define print_char_macro(c, printfParams) print_char(c, printfParams); + #define print_char_macro(c, printfParams) print_utf8_char(c, printfParams); #endif typedef struct PrintfParams PrintfParams; @@ -104,7 +104,7 @@ typedef struct PrintfParams { #if PRINTF_UTF8_OUTPUT_SUPPORT == 1 // Print a char as is. No analyse is made to check if it's a utf8 partial char // c is an int for prototype compatibility, but must be < 255 -static void print_char(int c, PrintfParams* printfParams) +static void print_utf8_char(int c, PrintfParams* printfParams) { #if PRINTF_LITE_TIMESTAMP_SUPPORT == 1 if ( printfParams->newlinePtr ) @@ -115,7 +115,7 @@ static void print_char(int c, PrintfParams* printfParams) if ( printfParams->timestamp ) print_timestamp(printfParams); } #if PRINTF_EMIT_CR == 1 - if ( c == '\n' ) print_char('\r', printfParams); + if ( c == '\n' ) print_utf8_char('\r', printfParams); #endif #if PRINTF_LITE_BUF_SIZE > 1 printfParams->buf.buf[(printfParams->bufIdx)++] = (char)c; @@ -125,7 +125,7 @@ static void print_char(int c, PrintfParams* printfParams) if ( c == '\n' ) *printfParams->newlinePtr = 1; }else{ #if PRINTF_EMIT_CR == 1 - if ( c == '\n' ) print_char('\r', printfParams); + if ( c == '\n' ) print_utf8_char('\r', printfParams); #endif #if PRINTF_LITE_BUF_SIZE > 1 printfParams->buf.buf[(printfParams->bufIdx)++] = (char)c; @@ -136,7 +136,7 @@ static void print_char(int c, PrintfParams* printfParams) #else { #if PRINTF_EMIT_CR == 1 - if ( c == '\n' ) print_char('\r', printfParams); + if ( c == '\n' ) print_utf8_char('\r', printfParams); #endif #if PRINTF_LITE_BUF_SIZE > 1 printfParams->buf.buf[(printfParams->bufIdx)++] = (char)c; @@ -238,29 +238,29 @@ static inline char32_t printf_surrogate_to_utf32(char16_t high, char16_t low) { * Print char32_t to utf8 string. * Only needed if PRINTF_UNICODE_OUTPUT_SUPPORT == 1 && PRINTF_UTF8_INPUT_SUPPORT == 1 */ -static void print_char32(const char32_t utf32_char, PrintfParams* printfParams) +static void print_char32_as_utf8_string(const char32_t utf32_char, PrintfParams* printfParams) { /* assertion: utf32_char is a single UTF-4 value */ int bits; if (utf32_char < 0x80) { - print_char((char)utf32_char, printfParams); + print_utf8_char((char)utf32_char, printfParams); bits = -6; } else if (utf32_char < 0x800) { - print_char((char)(((utf32_char >> 6) & 0x1F) | 0xC0), printfParams); + print_utf8_char((char)(((utf32_char >> 6) & 0x1F) | 0xC0), printfParams); bits = 0; } else if (utf32_char < 0x10000) { - print_char((char)(((utf32_char >> 12) & 0x0F) | 0xE0), printfParams); + print_utf8_char((char)(((utf32_char >> 12) & 0x0F) | 0xE0), printfParams); bits = 6; } else { - print_char((char)(((utf32_char >> 18) & 0x07) | 0xF0), printfParams); + print_utf8_char((char)(((utf32_char >> 18) & 0x07) | 0xF0), printfParams); bits = 12; } for (; bits >= 0; bits -= 6) { - print_char((char)(((utf32_char >> bits) & 0x3F) | 0x80), printfParams); + print_utf8_char((char)(((utf32_char >> bits) & 0x3F) | 0x80), printfParams); } } @@ -277,16 +277,16 @@ static void output_wchar_string_as_utf8(const wchar_t* s, PrintfParams* printfPa #if __WCHAR_MAX__ <= 0xFFFFu const char16_t uc = *s++; if (!printf_is_surrogate(uc)) { - print_char32((char32_t)uc, printfParams); + print_char32_as_utf8_string((char32_t)uc, printfParams); } else { if (printf_is_high_surrogate(uc) && *s && printf_is_low_surrogate(*s)) { - print_char32(printf_surrogate_to_utf32(uc, *s++), printfParams); + print_char32_as_utf8_string(printf_surrogate_to_utf32(uc, *s++), printfParams); } else { continue; } } #else - print_char32((char32_t)(*s++), printfParams); + print_char32_as_utf8_string((char32_t)(*s++), printfParams); #endif } } @@ -402,11 +402,11 @@ __attribute__((noinline, section(".output_utf8_string"))) #elif DEFINE_SECTIONS == 2 __attribute__((noinline, section(".printf_lite"))) #endif -static void output_utf8_string(const char* s, PrintfParams* printfParams) +static void output_utf8_string_as_utf8(const char* s, PrintfParams* printfParams) { if ( !s ) return; - if ( printfParams->width_specifier ) while ( *s && printfParams->width_specifier-- ) print_char(*s++, printfParams); - else while ( *s ) print_char(*s++, printfParams); + if ( printfParams->width_specifier ) while ( *s && printfParams->width_specifier-- ) print_utf8_char(*s++, printfParams); + else while ( *s ) print_utf8_char(*s++, printfParams); } #if DEFINE_SECTIONS == 1 @@ -659,7 +659,7 @@ static void print_double(double number, PrintfParams* printfParams) #if PRINTF_UNICODE_OUTPUT_SUPPORT == 1 && PRINTF_UTF8_OUTPUT_SUPPORT == 0 output_utf8_string(L"", printfParams); #else - output_utf8_string("", printfParams); + output_utf8_string_as_utf8("", printfParams); #endif } @@ -810,7 +810,7 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p #if PRINTF_LITE_ZSPECIFIER_SUPPORT == 1 printfParams->z_modifier = 1; #else - printfParams->l_modifier = 2; + printfParams->l_modifier = 12; #endif break; #endif // PRINTF_LITE_FALLBACK_FOR_UNSUPPORTED == 1 || PRINTF_LITE_ZSPECIFIER_SUPPORT == 1 @@ -821,16 +821,29 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p #if PRINTF_LITE_XSPECIFIER_SUPPORT == 1 printfParams->uppercase = c == 'X'; #if PRINTF_LITE_ZSPECIFIER_SUPPORT == 1 - if ( printfParams->z_modifier ) print_ulonglong(va_arg(VALIST_ACCESS(valist), size_t), 16, printfParams, 0); - else + if ( printfParams->z_modifier ) { + print_ulonglong(va_arg(VALIST_ACCESS(valist), size_t), 16, printfParams, 0); + }else #endif #if PRINTF_LITE_LONGLONGINT_SUPPORT == 1 && PRINTF_LITE_LONGINT_SUPPORT == 1 - if ( printfParams->l_modifier == 2 ) print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned long long int), 16, printfParams, 0); - else + if ( printfParams->l_modifier > 11 ) { + print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned long long int), 16, printfParams, 0); + }else #endif #if PRINTF_LITE_LONGINT_SUPPORT == 1 - if ( printfParams->l_modifier != 0 ) print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned long int), 16, printfParams, 0); - else + if ( printfParams->l_modifier == 11 ) { + print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned long int), 16, printfParams, 0); + }else + #endif + #if PRINTF_LITE_SHORTINT_SUPPORT == 1 + if ( printfParams->l_modifier == 9 ) { + print_ulonglong((unsigned short)va_arg(VALIST_ACCESS(valist), unsigned int), 16, printfParams, 0); // we are using longlong version for every int to save code size. + }else + #endif + #if PRINTF_LITE_SHORTSHORTINT_SUPPORT == 1 + if ( printfParams->l_modifier < 9 ) { + print_ulonglong((unsigned char)va_arg(VALIST_ACCESS(valist), unsigned int), 16, printfParams, 0); // we are using longlong version for every int to save code size. + }else #endif print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned int), 16, printfParams, 0); printfParams->inDirective = 0; @@ -846,13 +859,23 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p else #endif #if PRINTF_LITE_LONGLONGINT_SUPPORT == 1 && PRINTF_LITE_LONGINT_SUPPORT == 1 - if ( printfParams->l_modifier == 2 ) print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned long long int), 10, printfParams, 0); + if ( printfParams->l_modifier > 11 ) print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned long long int), 10, printfParams, 0); else #endif // PRINTF_LITE_LONGLONGINT_SUPPORT == 1 && PRINTF_LITE_LONGINT_SUPPORT == 1 #if PRINTF_LITE_LONGINT_SUPPORT == 1 - if ( printfParams->l_modifier != 0 ) print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned long int), 10, printfParams, 0); + if ( printfParams->l_modifier == 11 ) print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned long int), 10, printfParams, 0); else #endif // PRINTF_LITE_LONGINT_SUPPORT == 1 + #if PRINTF_LITE_SHORTINT_SUPPORT == 1 + if ( printfParams->l_modifier == 9 ) { + print_ulonglong((unsigned short)va_arg(VALIST_ACCESS(valist), unsigned int), 10, printfParams, 0); // we are using longlong version for every int to save code size. + }else + #endif + #if PRINTF_LITE_SHORTSHORTINT_SUPPORT == 1 + if ( printfParams->l_modifier < 9 ) { + print_ulonglong((unsigned char)va_arg(VALIST_ACCESS(valist), unsigned int), 10, printfParams, 0); // we are using longlong version for every int to save code size. + }else + #endif print_ulonglong(va_arg(VALIST_ACCESS(valist), unsigned int), 10, printfParams, 0); printfParams->inDirective = 0; break; @@ -865,13 +888,21 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p else #endif #if PRINTF_LITE_LONGLONGINT_SUPPORT == 1 && PRINTF_LITE_LONGINT_SUPPORT == 1 - if ( printfParams->l_modifier == 2 ) print_longlong(va_arg(VALIST_ACCESS(valist), long long int), 10, printfParams); // we are using longlong version for every int to save code size. + if ( printfParams->l_modifier > 11 ) print_longlong(va_arg(VALIST_ACCESS(valist), long long int), 10, printfParams); // we are using longlong version for every int to save code size. else #endif #if PRINTF_LITE_LONGINT_SUPPORT == 1 - if ( printfParams->l_modifier != 0 ) print_longlong(va_arg(VALIST_ACCESS(valist), long int), 10, printfParams); // we are using longlong version for every int to save code size. + if ( printfParams->l_modifier == 11 ) print_longlong(va_arg(VALIST_ACCESS(valist), long int), 10, printfParams); // we are using longlong version for every int to save code size. else #endif +// #if PRINTF_LITE_SHORTINT_SUPPORT == 1 +// if ( printfParams->l_modifier == 9 ) print_longlong(va_arg(VALIST_ACCESS(valist), short int), 10, printfParams); // we are using longlong version for every int to save code size. +// else +// #endif +// #if PRINTF_LITE_SHORTSHORTINT_SUPPORT == 1 +// if ( printfParams->l_modifier < 9 ) print_longlong(va_arg(VALIST_ACCESS(valist), char), 10, printfParams); // we are using longlong version for every int to save code size. +// else +// #endif print_longlong(va_arg(VALIST_ACCESS(valist), int), 10, printfParams); printfParams->inDirective = 0; break; @@ -893,26 +924,27 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p case 'l': #if PRINTF_LITE_LONGINT_SUPPORT == 1 printfParams->l_modifier += 1; + #endif + break; + case 'h': + #if PRINTF_LITE_LONGINT_SUPPORT == 1 + printfParams->l_modifier -= 1; #endif break; #endif case 'c': { int c1 = va_arg(VALIST_ACCESS(valist), int); -//#if PRINTF_UNICODE_OUTPUT_SUPPORT == 1 -// if ( printfParams->l_modifier >= 1 ) { -// printfParams->printCharFunction((wchar_t)c1, printfParams); // 'char' is promoted to 'int' when passed through '...' -// }else -//#endif #if PRINTF_UTF8_INPUT_SUPPORT == 1 { // wchar_t tmp2 = L'a'; // int tmp1 = va_arg(VALIST_ACCESS(valist), int); // int tmp3 = va_arg(VALIST_ACCESS(valist), wchar_t); - if ( !printfParams->unicode_output && printfParams->l_modifier == 1 ) { - print_char32((char32_t)c1, printfParams); + if ( !printfParams->unicode_output && printfParams->l_modifier > 10 ) { // print unicode char to utf8 + print_char32_as_utf8_string((char32_t)c1, printfParams); }else{ - print_char_macro((int)c1, printfParams); // 'char' is promoted to 'int' when passed through '...' + // c1 might be a char (<255) or a unicode char. UTF16 char < 255 are the same as UTF8. Ne need to check. + print_char_macro(c1, printfParams); // 'char' is promoted to 'int' when passed through '...' } } #endif @@ -948,11 +980,11 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p // If both input support disabled, we can't even print "unsupported" # if PRINTF_UTF8_INPUT_SUPPORT == 1 || PRINTF_UNICODE_INPUT_SUPPORT== 1 # if PRINTF_UTF8_INPUT_SUPPORT == 0 - if ( printfParams->l_modifier == 0 ) { + if ( printfParams->l_modifier <= 10 ) { va_arg(VALIST_ACCESS(valist), const char*); # endif # if PRINTF_UNICODE_INPUT_SUPPORT == 0 - if ( printfParams->l_modifier == 1 ) { + if ( printfParams->l_modifier > 10 ) { va_arg(VALIST_ACCESS(valist), const wchar_t*); # endif # if PRINTF_UNICODE_OUTPUT_SUPPORT == 1 && PRINTF_UTF8_INPUT_SUPPORT == 0 @@ -967,7 +999,7 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p #endif #if PRINTF_UNICODE_INPUT_SUPPORT == 1 - if ( printfParams->l_modifier == 1 ) { + if ( printfParams->l_modifier > 10 ) { const wchar_t* s = va_arg(VALIST_ACCESS(valist), const wchar_t*); if ( printfParams->unicode_output ) { output_wchar_string(s, printfParams); @@ -984,7 +1016,7 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p if ( printfParams->unicode_output ) { output_utf8_string_as_wchar(s, printfParams); }else{ - output_utf8_string(s, printfParams); + output_utf8_string_as_utf8(s, printfParams); } #elif PRINTF_UTF8_OUTPUT_SUPPORT == 1 output_utf8_string(s, printfParams); @@ -1029,7 +1061,7 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p if ( c == '%' ) { printfParams->inDirective = 1; - printfParams->l_modifier = 0; + printfParams->l_modifier = 10; #if PRINTF_LITE_ZSPECIFIER_SUPPORT == 1 printfParams->z_modifier = 0; #endif @@ -1049,7 +1081,7 @@ void printf_handle_format_char(char c, VALIST_PARAM_TYPE valist, PrintfParams* p } else { -// print_char(c, printfParams); +// print_utf8_char(c, printfParams); print_char_macro(c, printfParams); } } @@ -1077,7 +1109,7 @@ void vprintf_with_callback(const char* format, va_list valist, transmitBufCallBa printfParams.inDirective = 0; #if PRINTF_UTF8_OUTPUT_SUPPORT == 1 && PRINTF_UNICODE_OUTPUT_SUPPORT == 1 printfParams.unicode_output = 0; - printfParams.printCharFunction = print_char; + printfParams.printCharFunction = print_utf8_char; #endif printfParams.transmitBufCallBack.transmitBufCallBack = transmitBufCallBack; printfParams.context = context; diff --git a/rEFIt_UEFI/Platform/AcpiPatcher.cpp b/rEFIt_UEFI/Platform/AcpiPatcher.cpp index 54d8b40f8..d4961b29d 100644 --- a/rEFIt_UEFI/Platform/AcpiPatcher.cpp +++ b/rEFIt_UEFI/Platform/AcpiPatcher.cpp @@ -1804,7 +1804,7 @@ EFI_STATUS PatchACPI(IN REFIT_VOLUME *Volume, CHAR8 *OSVersion) DBG("RsdPointer Acpi 2.0 installed\n"); } Xsdt = (XSDT_TABLE*)(UINTN)BufferPtr; - // DBG("XSDT = 0x%x\n", Xsdt); + // DBG("XSDT = 0x%llx\n", uintptr_t(Xsdt)); Xsdt->Header.Signature = 0x54445358; //EFI_ACPI_2_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE eCntR = (Rsdt->Header.Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof(UINT32); Xsdt->Header.Length = eCntR * sizeof(UINT64) + sizeof (EFI_ACPI_DESCRIPTION_HEADER); diff --git a/rEFIt_UEFI/Platform/Nvram.cpp b/rEFIt_UEFI/Platform/Nvram.cpp index 237930c71..0ec5e6d06 100644 --- a/rEFIt_UEFI/Platform/Nvram.cpp +++ b/rEFIt_UEFI/Platform/Nvram.cpp @@ -1050,7 +1050,7 @@ PutNvramPlistToRtVars () if (!GlobalConfig.DebugLog) { DBG ("Size = %lld, Data: ", Size); for (i = 0; i < Size; i++) { - DBG("%02X ", *((__typeof__(ValTag->string))Value + i)); + DBG("%02hhX ", *((__typeof__(ValTag->string))Value + i)); } } if (!GlobalConfig.DebugLog) { diff --git a/rEFIt_UEFI/Platform/Settings.cpp b/rEFIt_UEFI/Platform/Settings.cpp index 2a2827b8c..2859b6e5b 100644 --- a/rEFIt_UEFI/Platform/Settings.cpp +++ b/rEFIt_UEFI/Platform/Settings.cpp @@ -6811,7 +6811,7 @@ GetDevices () default: gfx->Vendor = Unknown; - snprintf (gfx->Model, 64, "pci%x,%x", Pci.Hdr.VendorId, Pci.Hdr.DeviceId); + snprintf (gfx->Model, 64, "pci%hx,%hx", Pci.Hdr.VendorId, Pci.Hdr.DeviceId); gfx->Ports = 1; gfx->Connectors = (1 << NGFX); gfx->ConnChanged = FALSE; diff --git a/rEFIt_UEFI/Platform/kernel_patcher.cpp b/rEFIt_UEFI/Platform/kernel_patcher.cpp index 51f9e476f..f7d2d18a9 100644 --- a/rEFIt_UEFI/Platform/kernel_patcher.cpp +++ b/rEFIt_UEFI/Platform/kernel_patcher.cpp @@ -1741,7 +1741,7 @@ FindBootArgs(IN LOADER_ENTRY *Entry) //DBG("bootArgs2->kaddr = 0x%08X and bootArgs2->ksize = 0x%08X\n", bootArgs2->kaddr, bootArgs2->ksize); //DBG("bootArgs2->efiMode = 0x%02X\n", bootArgs2->efiMode); DBG_RT(Entry, "bootArgs2->CommandLine = %s\n", bootArgs2->CommandLine); - DBG_RT(Entry, "bootArgs2->flags = 0x%x\n", bootArgs2->flags); + DBG_RT(Entry, "bootArgs2->flags = 0x%hx\n", bootArgs2->flags); DBG_RT(Entry, "bootArgs2->kslide = 0x%x\n", bootArgs2->kslide); DBG_RT(Entry, "bootArgs2->bootMemStart = 0x%llx\n", bootArgs2->bootMemStart); if (Entry && Entry->KernelAndKextPatches && Entry->KernelAndKextPatches->KPDebug) diff --git a/rEFIt_UEFI/cpp_unit_test/LoadOptions_test.cpp b/rEFIt_UEFI/cpp_unit_test/LoadOptions_test.cpp index bb95b9d6a..5231b747d 100755 --- a/rEFIt_UEFI/cpp_unit_test/LoadOptions_test.cpp +++ b/rEFIt_UEFI/cpp_unit_test/LoadOptions_test.cpp @@ -195,22 +195,22 @@ int BootOptions_tests() CHAR16* LoadOptions3 = Old1_RemoveLoadOption(LoadOptions, L"opt3"); if ( XString().takeValueFrom(LoadOptions3) != "opt1 opt2"_XS ) return 1; } - { - XString LoadOptions; - - LoadOptions = AddLoadOption(LoadOptions, "opt1"_XS); - LoadOptions = AddLoadOption(LoadOptions, "opt2"_XS); - LoadOptions = AddLoadOption(LoadOptions, "opt3"_XS); - - if ( LoadOptions != "opt1 opt2 opt3"_XS ) return 1; - - XString LoadOptions1 = RemoveLoadOption(LoadOptions, "opt1"_XS); - if ( LoadOptions1 != "opt2 opt3"_XS ) return 1; - XString LoadOptions2 = RemoveLoadOption(LoadOptions, "opt2"_XS); - if ( LoadOptions2 != "opt1 opt3"_XS ) return 1; - XString LoadOptions3 = RemoveLoadOption(LoadOptions, "opt3"_XS); - if ( LoadOptions3 != "opt1 opt2"_XS ) return 1; - } +// { +// XString LoadOptions; +// +// LoadOptions = AddLoadOption(LoadOptions, "opt1"_XS); +// LoadOptions = AddLoadOption(LoadOptions, "opt2"_XS); +// LoadOptions = AddLoadOption(LoadOptions, "opt3"_XS); +// +// if ( LoadOptions != "opt1 opt2 opt3"_XS ) return 1; +// +// XString LoadOptions1 = RemoveLoadOption(LoadOptions, "opt1"_XS); +// if ( LoadOptions1 != "opt2 opt3"_XS ) return 1; +// XString LoadOptions2 = RemoveLoadOption(LoadOptions, "opt2"_XS); +// if ( LoadOptions2 != "opt1 opt3"_XS ) return 1; +// XString LoadOptions3 = RemoveLoadOption(LoadOptions, "opt3"_XS); +// if ( LoadOptions3 != "opt1 opt2"_XS ) return 1; +// } { XStringArray LoadOptions; diff --git a/rEFIt_UEFI/cpp_unit_test/printf_lite-test.cpp b/rEFIt_UEFI/cpp_unit_test/printf_lite-test.cpp index 615d903ef..2b149351d 100644 --- a/rEFIt_UEFI/cpp_unit_test/printf_lite-test.cpp +++ b/rEFIt_UEFI/cpp_unit_test/printf_lite-test.cpp @@ -285,6 +285,22 @@ int printf_lite_tests(void) Test1arg(F("| c|"), F("|%5x|"), 12); Test1arg(F("| C|"), F("|%5X|"), 12); + Test1arg(F("| -12|"), F("|%5hhd|"), (char)-12); + Test1arg(F("| -12|"), F("|%5hd|"), (short)-12); + Test1arg(F("| -12|"), F("|%5d|"), -12); + Test1arg(F("| -12|"), F("|%5ld|"), -12L); + Test1arg(F("| -12|"), F("|%5lld|"), -12LL); + Test1arg(F("| 244|"), F("|%5hhu|"), (char)-12); + Test1arg(F("|65524|"), F("|%5hu|"), (short)-12); + Test1arg(F("|4294967284|"), F("|%5u|"), -12); + Test1arg(F("|18446744073709551604|"), F("|%5lu|"), -12L); + Test1arg(F("|18446744073709551604|"), F("|%5llu|"), -12LL); + Test1arg(F("| f4|"), F("|%5hhx|"), (char)-12); + Test1arg(F("| fff4|"), F("|%5hx|"), (short)-12); + Test1arg(F("|fffffff4|"), F("|%5x|"), -12); + Test1arg(F("|fffffffffffffff4|"), F("|%5lx|"), -12L); + Test1arg(F("|fffffffffffffff4|"), F("|%5llx|"), -12LL); + // test pad char but no width (no effect) Test1arg(F("|c|"), F("|%0x|"), 12); Test1arg(F("|C|"), F("|%0X|"), 12); diff --git a/rEFIt_UEFI/libeg/text.cpp b/rEFIt_UEFI/libeg/text.cpp index f6a0b35ce..f895c6095 100644 --- a/rEFIt_UEFI/libeg/text.cpp +++ b/rEFIt_UEFI/libeg/text.cpp @@ -304,7 +304,7 @@ INTN XTheme::RenderText(IN const XStringW& Text, OUT XImage* CompImage_ptr, DBG("codepage=%llx, asciiPage=%x\n", GlobalConfig.Codepage, AsciiPageSize); for (UINTN i = 0; i < TextLength && c0 != 0; i++) { UINT16 c = Text.wc_str()[i]; //including UTF8 -> UTF16 conversion - DBG("initial char to render 0x%x\n", c); //good + DBG("initial char to render 0x%hx\n", c); //good if (gLanguage != korean) { //russian Codepage = 0x410 if (c >= 0x410 && c < 0x450) { //we have russian raster fonts with chars at 0xC0 @@ -313,7 +313,7 @@ INTN XTheme::RenderText(IN const XStringW& Text, OUT XImage* CompImage_ptr, INTN c2 = (c >= GlobalConfig.Codepage) ? (c - GlobalConfig.Codepage + AsciiPageSize) : c; //International letters c = c2 & 0xFF; //this maximum raster font size } -// DBG("char to render 0x%x\n", c); +// DBG("char to render 0x%hhx\n", c); if (Proportional) { //find spaces {---comp--__left__|__right__--char---} if (c0 <= 0x20) { // space before or at buffer edge diff --git a/rEFIt_UEFI/refit/main.cpp b/rEFIt_UEFI/refit/main.cpp index 6b2d97d61..b8e3c5690 100644 --- a/rEFIt_UEFI/refit/main.cpp +++ b/rEFIt_UEFI/refit/main.cpp @@ -1745,10 +1745,10 @@ VOID SetOEMPath(CONST CHAR16 *ConfName) OEMPath = PoolPrint(L"%s", L"EFI\\CLOVER"); if (ConfName == NULL) { DBG ("set OEMPath (ConfName == NULL): %ls\n", OEMPath); - } else if ( nLanCards > 0 && SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a--%02x-%02x-%02x-%02x-%02x-%02x", gSettings.OEMProduct, gLanMac[0][0], gLanMac[0][1], gLanMac[0][2], gLanMac[0][3], gLanMac[0][4], gLanMac[0][5]), ConfName)) { - } else if ( nLanCards > 1 && SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a--%02x-%02x-%02x-%02x-%02x-%02x", gSettings.OEMProduct, gLanMac[1][0], gLanMac[1][1], gLanMac[1][2], gLanMac[1][3], gLanMac[1][4], gLanMac[1][5]), ConfName)) { - } else if ( nLanCards > 2 && SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a--%02x-%02x-%02x-%02x-%02x-%02x", gSettings.OEMProduct, gLanMac[2][0], gLanMac[2][1], gLanMac[2][2], gLanMac[2][3], gLanMac[2][4], gLanMac[2][5]), ConfName)) { - } else if ( nLanCards > 3 && SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a--%02x-%02x-%02x-%02x-%02x-%02x", gSettings.OEMProduct, gLanMac[3][0], gLanMac[3][1], gLanMac[3][2], gLanMac[3][3], gLanMac[3][4], gLanMac[3][5]), ConfName)) { + } else if ( nLanCards > 0 && SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a--%02hhx-%02hhx-%02hhx-%02hhx-%02hhx-%02hhx", gSettings.OEMProduct, gLanMac[0][0], gLanMac[0][1], gLanMac[0][2], gLanMac[0][3], gLanMac[0][4], gLanMac[0][5]), ConfName)) { + } else if ( nLanCards > 1 && SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a--%02hhx-%02hhx-%02hhx-%02hhx-%02hhx-%02hhx", gSettings.OEMProduct, gLanMac[1][0], gLanMac[1][1], gLanMac[1][2], gLanMac[1][3], gLanMac[1][4], gLanMac[1][5]), ConfName)) { + } else if ( nLanCards > 2 && SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a--%02hhx-%02hhx-%02hhx-%02hhx-%02hhx-%02hhx", gSettings.OEMProduct, gLanMac[2][0], gLanMac[2][1], gLanMac[2][2], gLanMac[2][3], gLanMac[2][4], gLanMac[2][5]), ConfName)) { + } else if ( nLanCards > 3 && SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a--%02hhx-%02hhx-%02hhx-%02hhx-%02hhx-%02hhx", gSettings.OEMProduct, gLanMac[3][0], gLanMac[3][1], gLanMac[3][2], gLanMac[3][3], gLanMac[3][4], gLanMac[3][5]), ConfName)) { } else if (!gFirmwareClover && SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a\\UEFI", gSettings.OEMBoard), ConfName)) { } else if (SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a", gSettings.OEMProduct), ConfName)) { } else if (SetOEMPathIfExists(SelfRootDir, PoolPrint(L"EFI\\CLOVER\\OEM\\%a-%d", gSettings.OEMProduct, (INT32)(DivU64x32(gCPUStructure.CPUFrequency, Mega))), ConfName)) { diff --git a/rEFIt_UEFI/refit/menu.cpp b/rEFIt_UEFI/refit/menu.cpp index d5843b40c..151c0ec43 100644 --- a/rEFIt_UEFI/refit/menu.cpp +++ b/rEFIt_UEFI/refit/menu.cpp @@ -1700,9 +1700,9 @@ VOID ModifyTitles(REFIT_ABSTRACT_MENU_ENTRY *ChosenEntry) } } else if (ChosenEntry->SubScreen->ID == SCREEN_BLC) { - ChosenEntry->Title.SWPrintf("boot_args->flags [0x%04x]->", gSettings.BooterConfig); // TODO jief : cast to fix + ChosenEntry->Title.SWPrintf("boot_args->flags [0x%04hx]->", gSettings.BooterConfig); // TODO jief : cast to fix } else if (ChosenEntry->SubScreen->ID == SCREEN_DSM) { - ChosenEntry->Title.SWPrintf("Drop OEM _DSM [0x%04x]->", dropDSM); // TODO jief : cast to fix + ChosenEntry->Title.SWPrintf("Drop OEM _DSM [0x%04hx]->", dropDSM); // TODO jief : cast to fix } } @@ -1724,7 +1724,7 @@ REFIT_ABSTRACT_MENU_ENTRY *SubMenuGraphics() for (i = 0; i < NGFX; i++) { SubScreen->AddMenuInfo_f("----------------------"); - SubScreen->AddMenuInfo_f("Card DeviceID=%04x", gGraphics[i].DeviceID); + SubScreen->AddMenuInfo_f("Card DeviceID=%04hx", gGraphics[i].DeviceID); N = 20 + i * 6; SubScreen->AddMenuItemInput(N, "Model:", TRUE); @@ -2265,7 +2265,7 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuDropDSM() // create the entry in the main menu Entry = newREFIT_MENU_ITEM_OPTIONS(&SubScreen, ActionEnter, SCREEN_DSM, NULL); - // Entry->Title.SPrintf("Drop OEM _DSM [0x%04x]->", gSettings.DropOEM_DSM); + // Entry->Title.SPrintf("Drop OEM _DSM [0x%04hhx]->", gSettings.DropOEM_DSM); // submenu description SubScreen->AddMenuInfoLine_f("Choose devices to drop OEM _DSM methods from DSDT"); @@ -2298,7 +2298,7 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuDsdtFix() // REFIT_INPUT_DIALOG *InputBootArgs; Entry = newREFIT_MENU_ITEM_OPTIONS(&SubScreen, ActionEnter, SCREEN_DSDT, NULL); - // Entry->Title.SPrintf("DSDT fix mask [0x%08x]->", gSettings.FixDsdt); + // Entry->Title.SPrintf("DSDT fix mask [0x%08hhx]->", gSettings.FixDsdt); SubScreen->AddMenuCheck("Add DTGP", FIX_DTGP, 67); SubScreen->AddMenuCheck("Fix Darwin as WinXP", FIX_WARNING, 67); @@ -2646,7 +2646,7 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuBLC() // create the entry in the main menu Entry = newREFIT_MENU_ITEM_OPTIONS(&SubScreen, ActionEnter, SCREEN_BLC, NULL); -// Entry->Title.SPrintf("boot_args->flags [0x%02x]->", gSettings.BooterConfig); +// Entry->Title.SPrintf("boot_args->flags [0x%02hhx]->", gSettings.BooterConfig); // submenu description SubScreen->AddMenuInfoLine_f("Modify flags for boot.efi");