mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 17:25:55 +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
|
||||
IntIsLeadByte(PCPTABLEINFO TableInfo, BYTE Byte)
|
||||
{
|
||||
UINT LeadByteNo;
|
||||
UINT i;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1242,7 +1242,6 @@ typedef struct _NLS_FILE_HEADER
|
|||
USHORT UniDefaultChar;
|
||||
USHORT TransDefaultChar;
|
||||
USHORT TransUniDefaultChar;
|
||||
USHORT DBCSCodePage;
|
||||
UCHAR LeadByte[MAXIMUM_LEADBYTES];
|
||||
} NLS_FILE_HEADER, *PNLS_FILE_HEADER;
|
||||
|
||||
|
|
|
@ -144,13 +144,12 @@ RtlInitCodePageTable(IN PUSHORT TableBase,
|
|||
OUT PCPTABLEINFO CodePageTable)
|
||||
{
|
||||
PNLS_FILE_HEADER NlsFileHeader;
|
||||
PUSHORT Ptr;
|
||||
USHORT Offset;
|
||||
|
||||
DPRINT("RtlInitCodePageTable() called\n");
|
||||
|
||||
NlsFileHeader = (PNLS_FILE_HEADER)TableBase;
|
||||
|
||||
/* Copy header fields first */
|
||||
CodePageTable->CodePage = NlsFileHeader->CodePage;
|
||||
CodePageTable->MaximumCharacterSize = NlsFileHeader->MaximumCharacterSize;
|
||||
CodePageTable->DefaultChar = NlsFileHeader->DefaultChar;
|
||||
|
@ -162,35 +161,30 @@ RtlInitCodePageTable(IN PUSHORT TableBase,
|
|||
&NlsFileHeader->LeadByte,
|
||||
MAXIMUM_LEADBYTES);
|
||||
|
||||
/* Set Pointer to start of multi byte table */
|
||||
Ptr = (PUSHORT)((ULONG_PTR)TableBase + 2 * NlsFileHeader->HeaderSize);
|
||||
/* Offset to wide char table is after the header */
|
||||
CodePageTable->WideCharTable = TableBase + NlsFileHeader->HeaderSize + 1 +
|
||||
TableBase[NlsFileHeader->HeaderSize];
|
||||
|
||||
/* Get offset to the wide char table */
|
||||
Offset = (USHORT)(*Ptr++) + NlsFileHeader->HeaderSize + 1;
|
||||
/* Then multibyte table (256 wchars) follows */
|
||||
CodePageTable->MultiByteTable = TableBase + NlsFileHeader->HeaderSize + 1;
|
||||
|
||||
/* Set pointer to the multi byte table */
|
||||
CodePageTable->MultiByteTable = Ptr;
|
||||
/* Check the presence of glyph table (256 wchars) */
|
||||
if (!CodePageTable->MultiByteTable[256])
|
||||
CodePageTable->DBCSRanges = CodePageTable->MultiByteTable + 256 + 1;
|
||||
else
|
||||
CodePageTable->DBCSRanges = CodePageTable->MultiByteTable + 256 + 1 + 256;
|
||||
|
||||
/* Skip ANSI and OEM table */
|
||||
Ptr += 256;
|
||||
if (*Ptr++)
|
||||
Ptr += 256;
|
||||
|
||||
/* Set pointer to DBCS ranges */
|
||||
CodePageTable->DBCSRanges = (PUSHORT)Ptr;
|
||||
|
||||
if (*Ptr > 0)
|
||||
/* Is this double-byte code page? */
|
||||
if (*CodePageTable->DBCSRanges)
|
||||
{
|
||||
CodePageTable->DBCSCodePage = 1;
|
||||
CodePageTable->DBCSOffsets = (PUSHORT)++Ptr;
|
||||
CodePageTable->DBCSOffsets = CodePageTable->DBCSRanges + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
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