Skip to content

Commit fdc3b51

Browse files
authored
Include all dlerror messages to DllNotFoundException (#70964)
1 parent ead19a3 commit fdc3b51

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/coreclr/nativeaot/System.Private.CoreLib/src/System/Runtime/InteropServices/NativeLibrary.NativeAot.Unix.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,14 @@ public void Throw(string libraryName)
5151

5252
public void TrackErrorMessage(string? message)
5353
{
54-
_errorMessage = message;
54+
if (_errorMessage == null)
55+
{
56+
_errorMessage = Environment.NewLine;
57+
}
58+
if (!_errorMessage.Contains(message))
59+
{
60+
_errorMessage += message + Environment.NewLine;
61+
}
5562
}
5663
}
5764
}

src/coreclr/vm/nativelibrary.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ namespace
5353
LIMITED_METHOD_CONTRACT;
5454
m_hr = E_FAIL;
5555
m_priorityOfLastError = 0;
56+
m_message = SString(SString::Utf8, "\n");
5657
}
5758

5859
VOID TrackErrorCode()
@@ -137,7 +138,18 @@ namespace
137138

138139
void SetMessage(LPCSTR message)
139140
{
141+
#ifdef TARGET_UNIX
142+
//Append dlerror() messages
143+
SString new_message = SString(SString::Utf8, message);
144+
SString::Iterator i = m_message.Begin();
145+
if (!m_message.Find(i, new_message))
146+
{
147+
m_message += new_message;
148+
m_message += SString(SString::Utf8, "\n");
149+
}
150+
#else
140151
m_message = SString(SString::Utf8, message);
152+
#endif
141153
}
142154

143155
HRESULT m_hr;

0 commit comments

Comments
 (0)