advapi32: Print ReportEvent() messages one line at a time.

.NET Framework passes multiline backtraces to ReportEvent(), which get cut off when passed to debugstr_w().
This commit is contained in:
Zebediah Figura 2022-07-23 01:34:15 -05:00 committed by Alexandre Julliard
parent 3939eaf81a
commit 95258873a5

View file

@ -642,20 +642,34 @@ BOOL WINAPI ReportEventW( HANDLE hEventLog, WORD wType, WORD wCategory, DWORD dw
for (i = 0; i < wNumStrings; i++)
{
switch (wType)
const WCHAR *line = lpStrings[i];
while (*line)
{
case EVENTLOG_SUCCESS:
TRACE_(eventlog)("%s\n", debugstr_w(lpStrings[i]));
break;
case EVENTLOG_ERROR_TYPE:
ERR_(eventlog)("%s\n", debugstr_w(lpStrings[i]));
break;
case EVENTLOG_WARNING_TYPE:
WARN_(eventlog)("%s\n", debugstr_w(lpStrings[i]));
break;
default:
TRACE_(eventlog)("%s\n", debugstr_w(lpStrings[i]));
break;
const WCHAR *next = wcschr( line, '\n' );
if (next)
++next;
else
next = line + wcslen( line );
switch (wType)
{
case EVENTLOG_SUCCESS:
TRACE_(eventlog)("%s\n", debugstr_wn(line, next - line));
break;
case EVENTLOG_ERROR_TYPE:
ERR_(eventlog)("%s\n", debugstr_wn(line, next - line));
break;
case EVENTLOG_WARNING_TYPE:
WARN_(eventlog)("%s\n", debugstr_wn(line, next - line));
break;
default:
TRACE_(eventlog)("%s\n", debugstr_wn(line, next - line));
break;
}
line = next;
}
}
return TRUE;