https://github.com/ncroxon/gnu-efi/commit/f5bb548df572c992fe3389a586bec3a19b092c18 https://github.com/ncroxon/gnu-efi/commit/6b9dae0bef0fab82230a6672eaadd38d739e3e1e From f5bb548df572c992fe3389a586bec3a19b092c18 Mon Sep 17 00:00:00 2001 From: Callum Farmer Date: Thu, 25 Apr 2024 15:27:26 +0100 Subject: [PATCH] Align RTLIB CopyMem/SetMem with normal versions Looks like 699e452654df6de53890ae994756b0d47237e3ac broke rEFInd (https://sourceforge.net/p/refind/code/ci/189e405630293445df8565e36b831bba56e87093/) --- a/inc/efirtlib.h +++ b/inc/efirtlib.h @@ -45,6 +45,7 @@ RtZeroMem ( ); VOID +EFIAPI RUNTIMEFUNCTION RtSetMem ( IN VOID *Buffer, @@ -53,10 +54,11 @@ RtSetMem ( ); VOID +EFIAPI RUNTIMEFUNCTION RtCopyMem ( IN VOID *Dest, - IN CONST VOID *Src, + IN VOID *Src, IN UINTN len ); --- a/lib/runtime/efirtlib.c +++ b/lib/runtime/efirtlib.c @@ -42,6 +42,7 @@ RtZeroMem ( #pragma RUNTIME_CODE(RtSetMem) #endif VOID +EFIAPI RUNTIMEFUNCTION RtSetMem ( IN VOID *Buffer, @@ -61,10 +62,11 @@ RtSetMem ( #pragma RUNTIME_CODE(RtCopyMem) #endif VOID +EFIAPI RUNTIMEFUNCTION RtCopyMem ( IN VOID *Dest, - IN CONST VOID *Src, + IN VOID *Src, IN UINTN len ) { From 6b9dae0bef0fab82230a6672eaadd38d739e3e1e Mon Sep 17 00:00:00 2001 From: Callum Farmer Date: Sat, 27 Apr 2024 13:14:28 +0100 Subject: [PATCH] Fixup string functions for new CopyMem Signed-off-by: Callum Farmer --- a/lib/runtime/rtstr.c +++ b/lib/runtime/rtstr.c @@ -69,10 +69,13 @@ RtStrnCpy ( ) // copy strings { + CHAR16 CopySrc = *Src; + CHAR16 *PCopySrc = &CopySrc; + UINTN Size = RtStrnLen(Src, Len); if (Size != Len) RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0'); - RtCopyMem(Dest, Src, Size * sizeof(CHAR16)); + RtCopyMem(Dest, PCopySrc, Size * sizeof(CHAR16)); } #ifndef __GNUC__ @@ -105,10 +108,13 @@ RtStpnCpy ( ) // copy strings { + CHAR16 CopySrc = *Src; + CHAR16 *PCopySrc = &CopySrc; + UINTN Size = RtStrnLen(Src, Len); if (Size != Len) RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0'); - RtCopyMem(Dest, Src, Size * sizeof(CHAR16)); + RtCopyMem(Dest, PCopySrc, Size * sizeof(CHAR16)); return Dest + Size; } @@ -137,10 +143,12 @@ RtStrnCat ( ) { UINTN DestSize, Size; + CHAR16 CopySrc = *Src; + CHAR16 *PCopySrc = &CopySrc; DestSize = RtStrLen(Dest); Size = RtStrnLen(Src, Len); - RtCopyMem(Dest + DestSize, Src, Size * sizeof(CHAR16)); + RtCopyMem(Dest + DestSize, PCopySrc, Size * sizeof(CHAR16)); Dest[DestSize + Size] = '\0'; } --- a/lib/str.c +++ b/lib/str.c @@ -201,11 +201,13 @@ StrDuplicate ( { CHAR16 *Dest; UINTN Size; + CHAR16 CopySrc = *Src; + CHAR16 *PCopySrc = &CopySrc; Size = StrSize(Src); Dest = AllocatePool (Size); if (Dest) { - CopyMem (Dest, (void *)Src, Size); + CopyMem (Dest, PCopySrc, Size); } return Dest; }