/* * posix_additions.cpp * * Created on: Feb 5, 2021 * Author: jief */ #include "posix_additions.h" #include "stdio.h" /* * We need to use AsciiSPrint to be able to use %r and %g */ extern "C" { //# include //# include // UINTN // EFIAPI // AsciiSPrint ( // OUT CHAR8 *StartOfBuffer, // IN UINTN BufferSize, // IN CONST CHAR8 *FormatString, // ... // ); } //#include #include "../../rEFIt_UEFI/cpp_foundation/XString.h" XString8 stdio_static_buf = XString8().takeValueFrom("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX "); // prealloc stdio_static_buf. It has to be at least 2 chars because of 'while ( n > size - 2 )' in strguid and efiStrError static char efiStrError_buf[90]; const char* efiStrError(EFI_STATUS Status) { if ( !EFI_ERROR(Status) ) { snprintf(efiStrError_buf, sizeof(efiStrError_buf), "efi success (%llu,0x%llx)", Status, Status); }else{ snprintf(efiStrError_buf, sizeof(efiStrError_buf), "efi error (%llu,0x%llx)", Status, Status); } return efiStrError_buf; } //this function print guid in LittleEndian format while we need BigEndian as Apple do const char* strguid(EFI_GUID* guid) { stdio_static_buf.S8Printf("%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); return stdio_static_buf.s(); }