Sync with trunk (48463)

svn path=/branches/reactos-yarotows/; revision=48464
This commit is contained in:
Jérôme Gardou 2010-08-05 21:03:35 +00:00
parent 5762f7b639
commit 96444b43c2
17 changed files with 577 additions and 608 deletions

View file

@ -869,17 +869,12 @@ StretchDIBits(HDC hdc,
}
}
#endif
if ( iUsage ) // Save time, we only look at non RGB.
{
pConvertedInfo = ConvertBitmapInfo(lpBitsInfo, iUsage,
&ConvertedInfoSize, FALSE);
if (!pConvertedInfo)
{
pConvertedInfo = ConvertBitmapInfo(lpBitsInfo, iUsage,
&ConvertedInfoSize, FALSE);
if (!pConvertedInfo)
{
return 0;
}
}
else
pConvertedInfo = (PBITMAPINFO)lpBitsInfo;
}
cjBmpScanSize = DIB_BitmapBitsSize((LPBITMAPINFO)pConvertedInfo);

View file

@ -192,6 +192,13 @@ GetTextExtentExPointW(
LPSIZE lpSize
)
{
if(nMaxExtent < -1)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
return NtGdiGetTextExtentExW (
hdc, (LPWSTR)lpszStr, cchString, nMaxExtent, (PULONG)lpnFit, (PULONG)alpDx, lpSize, 0 );
}
@ -216,6 +223,12 @@ GetTextExtentExPointA(
LPWSTR lpszStrW;
BOOL rc = 0;
if(nMaxExtent < -1)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
Status = HEAP_strdupA2W ( &lpszStrW, lpszStr );
if (!NT_SUCCESS (Status))
SetLastError (RtlNtStatusToDosError(Status));

View file

@ -972,7 +972,7 @@ ContainsPath(LPCWSTR name)
{
if (RtlDetermineDosPathNameType_U(name) != RtlPathTypeRelative) return TRUE;
if (name[0] != '.') return FALSE;
if (name[1] == '/' || name[1] == '\\') return TRUE;
if (name[1] == '/' || name[1] == '\\' || name[1] == '\0') return TRUE;
return (name[1] == '.' && (name[2] == '/' || name[2] == '\\'));
}

View file

@ -158,142 +158,6 @@ ConvertDefaultLocale(LCID lcid)
}
/**************************************************************************
* EnumDateFormatsExA (KERNEL32.@)
*
* FIXME: MSDN mentions only LOCALE_USE_CP_ACP, should we handle
* LOCALE_NOUSEROVERRIDE here as well?
*/
BOOL
WINAPI
EnumDateFormatsExA(
DATEFMT_ENUMPROCEXA lpDateFmtEnumProcEx,
LCID Locale,
DWORD dwFlags)
{
CALID cal_id;
char szBuf[256];
if (!lpDateFmtEnumProcEx)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (!GetLocaleInfoW(Locale,
LOCALE_ICALENDARTYPE|LOCALE_RETURN_NUMBER,
(LPWSTR)&cal_id,
sizeof(cal_id)/sizeof(WCHAR)))
{
return FALSE;
}
switch (dwFlags & ~LOCALE_USE_CP_ACP)
{
case 0:
case DATE_SHORTDATE:
if (GetLocaleInfoA(Locale,
LOCALE_SSHORTDATE | (dwFlags & LOCALE_USE_CP_ACP),
szBuf, 256))
{
lpDateFmtEnumProcEx(szBuf, cal_id);
}
break;
case DATE_LONGDATE:
if (GetLocaleInfoA(Locale,
LOCALE_SLONGDATE | (dwFlags & LOCALE_USE_CP_ACP),
szBuf, 256))
{
lpDateFmtEnumProcEx(szBuf, cal_id);
}
break;
case DATE_YEARMONTH:
if (GetLocaleInfoA(Locale,
LOCALE_SYEARMONTH | (dwFlags & LOCALE_USE_CP_ACP),
szBuf, 256))
{
lpDateFmtEnumProcEx(szBuf, cal_id);
}
break;
default:
SetLastError(ERROR_INVALID_FLAGS);
return FALSE;
}
return TRUE;
}
/**************************************************************************
* EnumDateFormatsExW (KERNEL32.@)
*/
BOOL
WINAPI
EnumDateFormatsExW(
DATEFMT_ENUMPROCEXW lpDateFmtEnumProcEx,
LCID Locale,
DWORD dwFlags)
{
CALID cal_id;
WCHAR wbuf[256]; // FIXME
if (!lpDateFmtEnumProcEx)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (!GetLocaleInfoW(Locale,
LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER,
(LPWSTR)&cal_id,
sizeof(cal_id)/sizeof(WCHAR)))
{
return FALSE;
}
switch (dwFlags & ~LOCALE_USE_CP_ACP)
{
case 0:
case DATE_SHORTDATE:
if (GetLocaleInfoW(Locale,
LOCALE_SSHORTDATE | (dwFlags & LOCALE_USE_CP_ACP),
wbuf,
256))
{
lpDateFmtEnumProcEx(wbuf, cal_id);
}
break;
case DATE_LONGDATE:
if (GetLocaleInfoW(Locale,
LOCALE_SLONGDATE | (dwFlags & LOCALE_USE_CP_ACP),
wbuf,
256))
{
lpDateFmtEnumProcEx(wbuf, cal_id);
}
break;
case DATE_YEARMONTH:
if (GetLocaleInfoW(Locale,
LOCALE_SYEARMONTH | (dwFlags & LOCALE_USE_CP_ACP),
wbuf,
256))
{
lpDateFmtEnumProcEx(wbuf, cal_id);
}
break;
default:
SetLastError(ERROR_INVALID_FLAGS);
return FALSE;
}
return TRUE;
}
static BOOL NLS_RegEnumValue(HANDLE hKey, UINT ulIndex,
LPWSTR szValueName, ULONG valueNameSize,
LPWSTR szValueData, ULONG valueDataSize)

File diff suppressed because it is too large Load diff

View file

@ -171,25 +171,40 @@ static HICON SIC_OverlayShortcutImage(HICON SourceIcon, BOOL large)
goto fail;
}
/* Copy the source xor bitmap to the target and clear out part of it by using
the shortcut mask */
/* Copy the source color bitmap to the target */
if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight,
SourceDC, 0, 0, SRCCOPY) ||
! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, SRCAND))
SourceDC, 0, 0, SRCCOPY)) goto fail;
/* Check if we can use alpha blending */
if (ShortcutBitmapInfo.bmBitsPixel == 32)
{
goto fail;
/* Use alpha blending to make sure the target alpha channel stays valid */
if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
if (!GdiAlphaBlend(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
(BLENDFUNCTION){AC_SRC_OVER, 0, 255, AC_SRC_ALPHA})) goto fail;
}
if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
/* Now put in the shortcut xor mask */
if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, SRCINVERT))
else
{
goto fail;
/* Copy the source xor bitmap to the target and clear out part of it by using
the shortcut mask */
if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, SRCAND))
{
goto fail;
}
if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
/* Now put in the shortcut xor mask */
if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, SRCINVERT))
{
goto fail;
}
}
/* Clean up, we're not goto'ing to 'fail' after this so we can be lazy and not set
@ -387,14 +402,14 @@ BOOL SIC_Initialize(void)
if (sic_hdpa)
{
TRACE("Icon cache already initialized\n");
return TRUE;
return TRUE;
}
sic_hdpa = DPA_Create(16);
if (!sic_hdpa)
{
sic_hdpa = DPA_Create(16);
if (!sic_hdpa)
{
return FALSE;
}
}
hDC = CreateICW(L"DISPLAY", NULL, NULL, NULL);
if (!hDC)
@ -439,7 +454,7 @@ BOOL SIC_Initialize(void)
100);
if (ShellSmallIconList)
{
/* Load the document icon, which is used as the default if an icon isn't found. */
/* Load the document icon, which is used as the default if an icon isn't found. */
hSm = (HICON)LoadImageW(shell32_hInstance,
MAKEINTRESOURCEW(IDI_SHELL_DOCUMENT),
IMAGE_ICON,
@ -459,7 +474,7 @@ BOOL SIC_Initialize(void)
}
if (ShellBigIconList)
{
{
hLg = (HICON)LoadImageW(shell32_hInstance,
MAKEINTRESOURCEW(IDI_SHELL_DOCUMENT),
IMAGE_ICON,
@ -470,7 +485,7 @@ BOOL SIC_Initialize(void)
{
ERR("Failed to load IDI_SHELL_DOCUMENT icon2!\n");
DestroyIcon(hSm);
return FALSE;
return FALSE;
}
}
else
@ -482,9 +497,9 @@ BOOL SIC_Initialize(void)
SIC_IconAppend(swShell32Name, IDI_SHELL_DOCUMENT-1, hSm, hLg, 0);
SIC_IconAppend(swShell32Name, -IDI_SHELL_DOCUMENT, hSm, hLg, 0);
TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList);
TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList);
return TRUE;
return TRUE;
}
/*************************************************************************
* SIC_Destroy
@ -550,7 +565,7 @@ static int SIC_LoadOverlayIcon(int icon_idx)
LPWSTR p = wcschr(buffer, ',');
if (p)
*p++ = 0;
*p++ = 0;
iconPath = buffer;
iconIdx = _wtoi(p);

View file

@ -1172,11 +1172,11 @@ getservbyname(IN CONST CHAR FAR* name,
PCHAR SystemDirectory = ServiceDBData; /* Reuse this stack space */
PCHAR ServicesFileLocation = "\\drivers\\etc\\services";
PCHAR ThisLine = 0, NextLine = 0, ServiceName = 0, PortNumberStr = 0,
ProtocolStr = 0, Comment = 0;
ProtocolStr = 0, Comment = 0, EndValid;
PCHAR Aliases[WS2_INTERNAL_MAX_ALIAS] = { 0 };
UINT i,SizeNeeded = 0,
SystemDirSize = sizeof(ServiceDBData) - 1;
DWORD ReadSize = 0, ValidData = 0;
DWORD ReadSize = 0;
PWINSOCK_THREAD_BLOCK p = NtCurrentTeb()->WinSockData;
if( !p )
@ -1215,43 +1215,56 @@ getservbyname(IN CONST CHAR FAR* name,
WSASetLastError( WSANO_RECOVERY );
return NULL;
}
/* Scan the services file ...
*
* We will read up to BUFSIZ bytes per pass, until the buffer does not
* contain a full line, then we will try to read more.
*
* We fall from the loop if the buffer does not have a line terminator.
*/
*
* We will be share the buffer on the lines. If the line does not fit in
* the buffer, then moving it to the beginning of the buffer and read
* the remnants of line from file.
*/
/* Initial Read */
while(!Found &&
ReadFile(ServicesFile,
ServiceDBData + ValidData,
sizeof( ServiceDBData ) - ValidData,
&ReadSize,
NULL))
ReadFile(ServicesFile,
ServiceDBData,
sizeof( ServiceDBData ) - 1,
&ReadSize, NULL );
ThisLine = NextLine = ServiceDBData;
EndValid = ServiceDBData + ReadSize;
ServiceDBData[sizeof(ServiceDBData) - 1] = '\0';
while(ReadSize)
{
ValidData += ReadSize;
ReadSize = 0;
NextLine = ThisLine = ServiceDBData;
/* Find the beginning of the next line */
while(NextLine < ServiceDBData + ValidData &&
*NextLine != '\r' && *NextLine != '\n' )
for(; *NextLine != '\r' && *NextLine != '\n'; NextLine++)
{
NextLine++;
if(NextLine == EndValid)
{
int LineLen = NextLine - ThisLine;
if(ThisLine == ServiceDBData)
{
WS_DbgPrint(MIN_TRACE,("Line too long"));
WSASetLastError( WSANO_RECOVERY );
return NULL;
}
memmove(ServiceDBData, ThisLine, LineLen);
ReadFile(ServicesFile, ServiceDBData + LineLen,
sizeof( ServiceDBData )-1 - LineLen,
&ReadSize, NULL );
EndValid = ServiceDBData + LineLen + ReadSize;
NextLine = ServiceDBData + LineLen;
ThisLine = ServiceDBData;
if(!ReadSize) break;
}
}
/* Zero and skip, so we can treat what we have as a string */
if( NextLine > ServiceDBData + ValidData )
break;
*NextLine = 0; NextLine++;
*NextLine = '\0';
Comment = strchr( ThisLine, '#' );
if( Comment ) *Comment = 0; /* Terminate at comment start */
if( Comment ) *Comment = '\0'; /* Terminate at comment start */
if(DecodeServEntFromString(ThisLine,
&ServiceName,
&PortNumberStr,
@ -1268,22 +1281,8 @@ getservbyname(IN CONST CHAR FAR* name,
(NextLine - ThisLine);
break;
}
/* Get rid of everything we read so far */
while( NextLine <= ServiceDBData + ValidData &&
isspace( *NextLine ) )
{
NextLine++;
}
WS_DbgPrint(MAX_TRACE,("About to move %d chars\n",
ServiceDBData + ValidData - NextLine));
memmove(ServiceDBData,
NextLine,
ServiceDBData + ValidData - NextLine );
ValidData -= NextLine - ServiceDBData;
WS_DbgPrint(MAX_TRACE,("Valid bytes: %d\n", ValidData));
NextLine++;
ThisLine = NextLine;
}
/* This we'll do no matter what */

View file

@ -522,7 +522,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
return(STATUS_OBJECT_NAME_INVALID);
}
}
if (FileObject->RelatedFileObject && PathNameU.Length > sizeof(WCHAR) && PathNameU.Buffer[0] == L'\\')
if (FileObject->RelatedFileObject && PathNameU.Length >= sizeof(WCHAR) && PathNameU.Buffer[0] == L'\\')
{
return(STATUS_OBJECT_NAME_INVALID);
}

View file

@ -5,15 +5,68 @@
#include <stdlib.h>
#include <signal.h>
static const char formatstr[] =
"Assertion failed!\n\n"
"Program: %s\n"
"File: %s\n"
"Line: %ld\n\n"
"Expression: %s\n"
"Press Retry to debug the application\n";
/*
* @implemented
*/
void _assert(const char *msg, const char *file, unsigned line)
void _assert(const char *exp, const char *file, unsigned line)
{
/* Assertion failed at foo.c line 45: x<y */
fprintf(stderr, "Assertion failed at %s line %d: %s\n", file, line, msg);
FIXME("Assertion failed at %s line %d: %s\n", file, line, msg);
raise(SIGABRT);
for(;;); /* eliminate warning by mingw */
int (WINAPI *pMessageBoxA)(HWND, LPCTSTR, LPCTSTR, UINT);
HMODULE hmodUser32;
char achProgram[40];
char *pszBuffer;
int len;
int iResult;
/* Assertion failed at foo.c line 45: x<y */
fprintf(stderr, "Assertion failed at %s line %d: %s\n", file, line, exp);
FIXME("Assertion failed at %s line %d: %s\n", file, line, exp);
/* Get MessageBoxA function pointer */
hmodUser32 = LoadLibrary("user32.dll");
pMessageBoxA = GetProcAddress(hmodUser32, "MessageBoxA");
if (!pMessageBoxA)
{
abort();
}
/* Get the file name of the module */
len = GetModuleFileNameA(NULL, achProgram, 40);
/* Calculate full length of the message */
len += sizeof(formatstr) + len + strlen(exp) + strlen(file);
/* Allocate a buffer */
pszBuffer = malloc(len + 1);
/* Format a message */
_snprintf(pszBuffer, len, formatstr, achProgram, file, line, exp);
/* Display a message box */
iResult = pMessageBoxA(NULL,
pszBuffer,
"ReactOS C Runtime Library",
MB_ABORTRETRYIGNORE | MB_ICONERROR);
free(pszBuffer);
/* Does the user want to abort? */
if (iResult == IDABORT)
{
abort();
}
/* Does the user want to debug? */
if (iResult == IDRETRY)
{
__debugbreak();
}
}

View file

@ -218,7 +218,7 @@ gdi32 -
kernel32 -
reactos/dll/win32/kernel32/misc/errormsg.c # Out of sync
reactos/dll/win32/kernel32/misc/profile.c # Out of sync
reactos/dll/win32/kernel32/misc/lcformat.c # Out of sync
reactos/dll/win32/kernel32/misc/lcformat.c # Synced to Wine-1_3
reactos/dll/win32/kernel32/misc/lzexpand.c # Synced to Wine-1_1_23
msvcrt -

View file

@ -28,59 +28,58 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression,
while (i < Name->Length / sizeof(WCHAR) && k < Expression->Length / sizeof(WCHAR))
{
if ((Expression->Buffer[k] == (IgnoreCase ? UpcaseTable[Name->Buffer[i]] : Name->Buffer[i])) ||
(Expression->Buffer[k] == L'?') || (Expression->Buffer[k] == DOS_QM) ||
(Expression->Buffer[k] == DOS_DOT && (Name->Buffer[i] == L'.' || Name->Buffer[i] == L'0')))
{
i++;
k++;
}
else if (Expression->Buffer[k] == L'*')
{
if (k < Expression->Length / sizeof(WCHAR))
{
if (Expression->Buffer[k+1] != L'*' && Expression->Buffer[k+1] != L'?' &&
if ((Expression->Buffer[k] == (IgnoreCase ? UpcaseTable[Name->Buffer[i]] : Name->Buffer[i])) ||
(Expression->Buffer[k] == L'?') || (Expression->Buffer[k] == DOS_QM) ||
(Expression->Buffer[k] == DOS_DOT && (Name->Buffer[i] == L'.' || Name->Buffer[i] == L'0')))
{
i++;
k++;
}
else if (Expression->Buffer[k] == L'*')
{
if (k < (Expression->Length / sizeof(WCHAR) - 1))
{
if (Expression->Buffer[k+1] != L'*' && Expression->Buffer[k+1] != L'?' &&
Expression->Buffer[k+1] != DOS_DOT && Expression->Buffer[k+1] != DOS_QM &&
Expression->Buffer[k+1] != DOS_STAR)
{
while ((IgnoreCase ? UpcaseTable[Name->Buffer[i]] : Name->Buffer[i]) != Expression->Buffer[k+1] &&
i <= Name->Length / sizeof(WCHAR)) i++;
}
else
{
if (!(Expression->Buffer[k+1] != DOS_DOT && (Name->Buffer[i] == L'.' || Name->Buffer[i] == L'0')))
{
i++;
}
}
}
else
{
i = Name->Length / sizeof(WCHAR);
}
k++;
}
else if (Expression->Buffer[k] == DOS_STAR)
{
j = i;
while (j <= Name->Length / sizeof(WCHAR))
{
if (Name->Buffer[j] == L'.')
{
i = j;
}
j++;
}
k++;
}
else
{
i++;
k = 0;
}
Expression->Buffer[k+1] != DOS_STAR)
{
while ((IgnoreCase ? UpcaseTable[Name->Buffer[i]] : Name->Buffer[i]) != Expression->Buffer[k+1] &&
i < Name->Length / sizeof(WCHAR)) i++;
}
else
{
if (!(Expression->Buffer[k+1] != DOS_DOT && (Name->Buffer[i] == L'.' || Name->Buffer[i] == L'0')))
{
i++;
}
}
}
else
{
i = Name->Length / sizeof(WCHAR);
}
k++;
}
else if (Expression->Buffer[k] == DOS_STAR)
{
j = i;
while (j < Name->Length / sizeof(WCHAR))
{
if (Name->Buffer[j] == L'.')
{
i = j;
}
j++;
}
k++;
}
else
{
i = Name->Length / sizeof(WCHAR);
}
}
return (k == Expression->Length / sizeof(WCHAR));
return (k == Expression->Length / sizeof(WCHAR) && i == Name->Length / sizeof(WCHAR));
}
/* PUBLIC FUNCTIONS **********************************************************/

View file

@ -98,7 +98,7 @@ IopRemovePlugPlayEvent(VOID)
/* Remove a pnp event entry from the tail of the queue */
if (!IsListEmpty(&IopPnpEventQueueHead))
{
ExFreePool(RemoveTailList(&IopPnpEventQueueHead));
ExFreePool(CONTAINING_RECORD(RemoveTailList(&IopPnpEventQueueHead), PNP_EVENT_ENTRY, ListEntry));
}
/* Signal the next pnp event in the queue */

View file

@ -65,10 +65,10 @@ EXLATEOBJ_iXlateRGBtoBGR(PEXLATEOBJ pxlo, ULONG iColor)
ULONG iNewColor;
/* Copy green */
iNewColor = iColor & 0x00ff00;
iNewColor = iColor & 0xff00ff00;
/* Mask red and blue */
iColor &= 0xff00ff;
iColor &= 0x00ff00ff;
/* Shift and copy red and blue */
iNewColor |= iColor >> 16;

View file

@ -96,7 +96,7 @@ INT FASTCALL IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristi
ULONG FASTCALL ftGdiGetGlyphOutline(PDC,WCHAR,UINT,LPGLYPHMETRICS,ULONG,PVOID,LPMAT2,BOOL);
INT FASTCALL IntGetOutlineTextMetrics(PFONTGDI,UINT,OUTLINETEXTMETRICW *);
BOOL FASTCALL ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS);
BOOL FASTCALL TextIntGetTextExtentPoint(PDC,PTEXTOBJ,LPCWSTR,int,int,LPINT,LPINT,LPSIZE);
BOOL FASTCALL TextIntGetTextExtentPoint(PDC,PTEXTOBJ,LPCWSTR,INT,ULONG,LPINT,LPINT,LPSIZE);
BOOL FASTCALL ftGdiGetTextMetricsW(HDC,PTMW_INTERNAL);
DWORD FASTCALL IntGetFontLanguageInfo(PDC);
INT FASTCALL ftGdiGetTextCharsetInfo(PDC,PFONTSIGNATURE,DWORD);

View file

@ -5,7 +5,7 @@ NTSTATUS _MmCopyFromCaller( PVOID Target, PVOID Source, UINT Bytes ) {
_SEH2_TRY
{
/* ProbeForRead(Source,Bytes,1); */
ProbeForRead(Source,Bytes,1);
RtlCopyMemory(Target,Source,Bytes);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)

View file

@ -267,7 +267,16 @@ co_IntLoadSysMenuTemplate()
if (NT_SUCCESS(Status))
{
/* Simulate old behaviour: copy into our local buffer */
Result = *(LRESULT*)ResultPointer;
_SEH2_TRY
{
ProbeForRead(ResultPointer, sizeof(LRESULT), 1);
Result = *(LRESULT*)ResultPointer;
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
Result = 0;
}
_SEH2_END
}
UserEnterCo();

View file

@ -2119,8 +2119,8 @@ FASTCALL
TextIntGetTextExtentPoint(PDC dc,
PTEXTOBJ TextObj,
LPCWSTR String,
int Count,
int MaxExtent,
INT Count,
ULONG MaxExtent,
LPINT Fit,
LPINT Dx,
LPSIZE Size)