mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:42:57 +00:00
- Remove DBCSCodePage field from NLS_FILE_HEADER structure.
- Make RtlInitCodePageTable function slightly clearer. - Fix IntIsLeadByte function (thanks to Gregor Schneider, bug #3944). svn path=/trunk/; revision=38042
This commit is contained in:
parent
8fb679dc7c
commit
030afbd185
3 changed files with 18 additions and 25 deletions
|
@ -1067,13 +1067,13 @@ static BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
IntIsLeadByte(PCPTABLEINFO TableInfo, BYTE Byte)
|
IntIsLeadByte(PCPTABLEINFO TableInfo, BYTE Byte)
|
||||||
{
|
{
|
||||||
UINT LeadByteNo;
|
UINT i;
|
||||||
|
|
||||||
if (TableInfo->MaximumCharacterSize == 2)
|
if (TableInfo->MaximumCharacterSize == 2)
|
||||||
{
|
{
|
||||||
for (LeadByteNo = 0; LeadByteNo < MAXIMUM_LEADBYTES; LeadByteNo++)
|
for (i = 0; i < MAXIMUM_LEADBYTES && TableInfo->LeadByte[i]; i += 2)
|
||||||
{
|
{
|
||||||
if (TableInfo->LeadByte[LeadByteNo] == Byte)
|
if (Byte >= TableInfo->LeadByte[i] && Byte <= TableInfo->LeadByte[i+1])
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1242,7 +1242,6 @@ typedef struct _NLS_FILE_HEADER
|
||||||
USHORT UniDefaultChar;
|
USHORT UniDefaultChar;
|
||||||
USHORT TransDefaultChar;
|
USHORT TransDefaultChar;
|
||||||
USHORT TransUniDefaultChar;
|
USHORT TransUniDefaultChar;
|
||||||
USHORT DBCSCodePage;
|
|
||||||
UCHAR LeadByte[MAXIMUM_LEADBYTES];
|
UCHAR LeadByte[MAXIMUM_LEADBYTES];
|
||||||
} NLS_FILE_HEADER, *PNLS_FILE_HEADER;
|
} NLS_FILE_HEADER, *PNLS_FILE_HEADER;
|
||||||
|
|
||||||
|
|
|
@ -144,13 +144,12 @@ RtlInitCodePageTable(IN PUSHORT TableBase,
|
||||||
OUT PCPTABLEINFO CodePageTable)
|
OUT PCPTABLEINFO CodePageTable)
|
||||||
{
|
{
|
||||||
PNLS_FILE_HEADER NlsFileHeader;
|
PNLS_FILE_HEADER NlsFileHeader;
|
||||||
PUSHORT Ptr;
|
|
||||||
USHORT Offset;
|
|
||||||
|
|
||||||
DPRINT("RtlInitCodePageTable() called\n");
|
DPRINT("RtlInitCodePageTable() called\n");
|
||||||
|
|
||||||
NlsFileHeader = (PNLS_FILE_HEADER)TableBase;
|
NlsFileHeader = (PNLS_FILE_HEADER)TableBase;
|
||||||
|
|
||||||
|
/* Copy header fields first */
|
||||||
CodePageTable->CodePage = NlsFileHeader->CodePage;
|
CodePageTable->CodePage = NlsFileHeader->CodePage;
|
||||||
CodePageTable->MaximumCharacterSize = NlsFileHeader->MaximumCharacterSize;
|
CodePageTable->MaximumCharacterSize = NlsFileHeader->MaximumCharacterSize;
|
||||||
CodePageTable->DefaultChar = NlsFileHeader->DefaultChar;
|
CodePageTable->DefaultChar = NlsFileHeader->DefaultChar;
|
||||||
|
@ -162,35 +161,30 @@ RtlInitCodePageTable(IN PUSHORT TableBase,
|
||||||
&NlsFileHeader->LeadByte,
|
&NlsFileHeader->LeadByte,
|
||||||
MAXIMUM_LEADBYTES);
|
MAXIMUM_LEADBYTES);
|
||||||
|
|
||||||
/* Set Pointer to start of multi byte table */
|
/* Offset to wide char table is after the header */
|
||||||
Ptr = (PUSHORT)((ULONG_PTR)TableBase + 2 * NlsFileHeader->HeaderSize);
|
CodePageTable->WideCharTable = TableBase + NlsFileHeader->HeaderSize + 1 +
|
||||||
|
TableBase[NlsFileHeader->HeaderSize];
|
||||||
|
|
||||||
/* Get offset to the wide char table */
|
/* Then multibyte table (256 wchars) follows */
|
||||||
Offset = (USHORT)(*Ptr++) + NlsFileHeader->HeaderSize + 1;
|
CodePageTable->MultiByteTable = TableBase + NlsFileHeader->HeaderSize + 1;
|
||||||
|
|
||||||
/* Set pointer to the multi byte table */
|
/* Check the presence of glyph table (256 wchars) */
|
||||||
CodePageTable->MultiByteTable = Ptr;
|
if (!CodePageTable->MultiByteTable[256])
|
||||||
|
CodePageTable->DBCSRanges = CodePageTable->MultiByteTable + 256 + 1;
|
||||||
|
else
|
||||||
|
CodePageTable->DBCSRanges = CodePageTable->MultiByteTable + 256 + 1 + 256;
|
||||||
|
|
||||||
/* Skip ANSI and OEM table */
|
/* Is this double-byte code page? */
|
||||||
Ptr += 256;
|
if (*CodePageTable->DBCSRanges)
|
||||||
if (*Ptr++)
|
|
||||||
Ptr += 256;
|
|
||||||
|
|
||||||
/* Set pointer to DBCS ranges */
|
|
||||||
CodePageTable->DBCSRanges = (PUSHORT)Ptr;
|
|
||||||
|
|
||||||
if (*Ptr > 0)
|
|
||||||
{
|
{
|
||||||
CodePageTable->DBCSCodePage = 1;
|
CodePageTable->DBCSCodePage = 1;
|
||||||
CodePageTable->DBCSOffsets = (PUSHORT)++Ptr;
|
CodePageTable->DBCSOffsets = CodePageTable->DBCSRanges + 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CodePageTable->DBCSCodePage = 0;
|
CodePageTable->DBCSCodePage = 0;
|
||||||
CodePageTable->DBCSOffsets = 0;
|
CodePageTable->DBCSOffsets = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodePageTable->WideCharTable = (PVOID)((ULONG_PTR)TableBase + 2 * Offset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue