mirror of
https://github.com/reactos/reactos.git
synced 2024-08-03 01:50:57 +00:00
- Implement GetCPInfo. Now this function passes all Wine tests
svn path=/trunk/; revision=37387
This commit is contained in:
parent
4e37ce697b
commit
415da61549
|
@ -1238,29 +1238,54 @@ GetCalendarInfoW(
|
|||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
BOOL
|
||||
STDCALL
|
||||
GetCPInfo (
|
||||
UINT CodePage,
|
||||
LPCPINFO CodePageInfo
|
||||
)
|
||||
GetCPInfo(UINT CodePage,
|
||||
LPCPINFO CodePageInfo)
|
||||
{
|
||||
unsigned i;
|
||||
PCODEPAGE_ENTRY CodePageEntry;
|
||||
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
if (!CodePageInfo)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CodePageInfo->MaxCharSize = 1;
|
||||
CodePageInfo->DefaultChar[0] = '?';
|
||||
for (i = 1; i < MAX_DEFAULTCHAR; i++)
|
||||
{
|
||||
CodePageInfo->DefaultChar[i] = 0;
|
||||
}
|
||||
for (i = 0; i < MAX_LEADBYTES; i++)
|
||||
{
|
||||
CodePageInfo->LeadByte[i] = 0;
|
||||
}
|
||||
CodePageEntry = IntGetCodePageEntry(CodePage);
|
||||
if (CodePageEntry == NULL)
|
||||
{
|
||||
switch(CodePage)
|
||||
{
|
||||
case CP_UTF7:
|
||||
case CP_UTF8:
|
||||
CodePageInfo->DefaultChar[0] = 0x3f;
|
||||
CodePageInfo->DefaultChar[1] = 0;
|
||||
CodePageInfo->LeadByte[0] = CodePageInfo->LeadByte[1] = 0;
|
||||
CodePageInfo->MaxCharSize = (CodePage == CP_UTF7) ? 5 : 4;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
SetLastError( ERROR_INVALID_PARAMETER );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (CodePageEntry->CodePageTable.DefaultChar & 0xff00)
|
||||
{
|
||||
CodePageInfo->DefaultChar[0] = (CodePageEntry->CodePageTable.DefaultChar & 0xff00) >> 8;
|
||||
CodePageInfo->DefaultChar[1] = CodePageEntry->CodePageTable.DefaultChar & 0x00ff;
|
||||
}
|
||||
else
|
||||
{
|
||||
CodePageInfo->DefaultChar[0] = CodePageEntry->CodePageTable.DefaultChar & 0xff;
|
||||
CodePageInfo->DefaultChar[1] = 0;
|
||||
}
|
||||
|
||||
if ((CodePageInfo->MaxCharSize = CodePageEntry->CodePageTable.MaximumCharacterSize) == 2)
|
||||
memcpy(CodePageInfo->LeadByte, CodePageEntry->CodePageTable.LeadByte, sizeof(CodePageInfo->LeadByte));
|
||||
else
|
||||
CodePageInfo->LeadByte[0] = CodePageInfo->LeadByte[1] = 0;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue