The lstr* functions don't reset the last error on an exception. Also they handle more than just access violation exceptions.

This makes us passing (at least) one more sub test of a Wine test (user32_winetest text)
Behaviour verified under Windows XP SP2.

svn path=/trunk/; revision=33484
This commit is contained in:
Colin Finck 2008-05-12 20:01:48 +00:00
parent 858f98f040
commit abab705b13

View file

@ -10,15 +10,6 @@
#include <k32.h>
static _SEH_FILTER(lstr_page_fault)
{
if (_SEH_GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
return _SEH_EXECUTE_HANDLER;
else
return _SEH_CONTINUE_SEARCH;
}
/*
* @implemented
*/
@ -98,10 +89,7 @@ lstrcpynA(
Ret = lpString1;
}
_SEH_EXCEPT(lstr_page_fault)
{
SetLastError( ERROR_INVALID_PARAMETER );
}
_SEH_HANDLE
_SEH_END;
return Ret;
@ -125,10 +113,7 @@ lstrcpyA(
memmove(lpString1, lpString2, strlen(lpString2) + 1);
Ret = lpString1;
}
_SEH_EXCEPT(lstr_page_fault)
{
SetLastError(ERROR_INVALID_PARAMETER);
}
_SEH_HANDLE
_SEH_END;
return Ret;
@ -151,10 +136,7 @@ lstrcatA(
{
Ret = strcat(lpString1, lpString2);
}
_SEH_EXCEPT(lstr_page_fault)
{
SetLastError(ERROR_INVALID_PARAMETER);
}
_SEH_HANDLE
_SEH_END;
return Ret;
@ -177,10 +159,7 @@ lstrlenA(
{
Ret = strlen(lpString);
}
_SEH_EXCEPT(lstr_page_fault)
{
SetLastError(ERROR_INVALID_PARAMETER);
}
_SEH_HANDLE
_SEH_END;
return Ret;
@ -266,10 +245,7 @@ lstrcpynW(
Ret = lpString1;
}
_SEH_EXCEPT(lstr_page_fault)
{
SetLastError( ERROR_INVALID_PARAMETER );
}
_SEH_HANDLE
_SEH_END;
return Ret;
@ -292,10 +268,7 @@ lstrcpyW(
{
Ret = wcscpy(lpString1, lpString2);
}
_SEH_EXCEPT(lstr_page_fault)
{
SetLastError(ERROR_INVALID_PARAMETER);
}
_SEH_HANDLE
_SEH_END;
return Ret;
@ -318,10 +291,7 @@ lstrcatW(
{
Ret = wcscat(lpString1, lpString2);
}
_SEH_EXCEPT(lstr_page_fault)
{
SetLastError(ERROR_INVALID_PARAMETER);
}
_SEH_HANDLE
_SEH_END;
return Ret;
@ -343,10 +313,7 @@ lstrlenW(
{
Ret = wcslen(lpString);
}
_SEH_EXCEPT(lstr_page_fault)
{
SetLastError(ERROR_INVALID_PARAMETER);
}
_SEH_HANDLE
_SEH_END;
return Ret;