1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
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 <gmbr3@opensuse.org>
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 <gmbr3@opensuse.org>
Date: Sat, 27 Apr 2024 13:14:28 +0100
Subject: [PATCH] Fixup string functions for new CopyMem
Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
--- 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;
}
|