diff --git a/reactos/lib/rtl/austin/udict.h b/reactos/lib/rtl/austin/udict.h index f5b9620590f..033413e1d14 100644 --- a/reactos/lib/rtl/austin/udict.h +++ b/reactos/lib/rtl/austin/udict.h @@ -57,8 +57,8 @@ typedef enum { typedef enum { udict_balanced = 0, - udict_leftheavy = -1, - udict_rightheavy = 1 + udict_leftheavy = 1, + udict_rightheavy = 2 } udict_avl_balance_t; typedef union { diff --git a/reactos/lib/rtl/i386/thread.c b/reactos/lib/rtl/i386/thread.c new file mode 100644 index 00000000000..5f223fca151 --- /dev/null +++ b/reactos/lib/rtl/i386/thread.c @@ -0,0 +1,80 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS system libraries + * PURPOSE: Rtl user thread functions + * FILE: lib/rtl/thread.c + * PROGRAMERS: + * Alex Ionescu (alex@relsoft.net) + * Eric Kohl + * KJK::Hyperion + */ + +/* INCLUDES *****************************************************************/ + +#include +#include "i386/ketypes.h" + +#define NDEBUG +#include + +/* PRIVATE FUNCTIONS *******************************************************/ + +/* + * @implemented + */ +VOID +NTAPI +RtlInitializeContext(IN HANDLE ProcessHandle, + OUT PCONTEXT ThreadContext, + IN PVOID ThreadStartParam OPTIONAL, + IN PTHREAD_START_ROUTINE ThreadStartAddress, + IN PINITIAL_TEB InitialTeb) +{ + DPRINT("RtlInitializeContext: (hProcess: %p, ThreadContext: %p, Teb: %p\n", + ProcessHandle, ThreadContext, InitialTeb); + + /* + * Set the Initial Registers + * This is based on NT's default values -- crazy apps might expect this... + */ + ThreadContext->Ebp = 0; + ThreadContext->Eax = 0; + ThreadContext->Ebx = 1; + ThreadContext->Ecx = 2; + ThreadContext->Edx = 3; + ThreadContext->Esi = 4; + ThreadContext->Edi = 5; + + /* Set the Selectors */ + ThreadContext->SegGs = 0; + ThreadContext->SegFs = KGDT_R3_TEB; + ThreadContext->SegEs = KGDT_R3_DATA; + ThreadContext->SegDs = KGDT_R3_DATA; + ThreadContext->SegSs = KGDT_R3_DATA; + ThreadContext->SegCs = KGDT_R3_CODE; + + /* Enable Interrupts */ + ThreadContext->EFlags = EFLAGS_INTERRUPT_MASK; + + /* Settings passed */ + ThreadContext->Eip = (ULONG)ThreadStartAddress; + ThreadContext->Esp = (ULONG)InitialTeb; + + /* Only the basic Context is initialized */ + ThreadContext->ContextFlags = CONTEXT_CONTROL | + CONTEXT_INTEGER | + CONTEXT_SEGMENTS; + + /* Set up ESP to the right value */ + ThreadContext->Esp -= sizeof(PVOID); + ZwWriteVirtualMemory(ProcessHandle, + (PVOID)ThreadContext->Esp, + (PVOID)&ThreadStartParam, + sizeof(PVOID), + NULL); + + /* Push it down one more notch for RETEIP */ + ThreadContext->Esp -= sizeof(PVOID); +} + +/* EOF */ diff --git a/reactos/lib/rtl/nls.c b/reactos/lib/rtl/nls.c index 4bfa0c96160..4fd59e765d0 100644 --- a/reactos/lib/rtl/nls.c +++ b/reactos/lib/rtl/nls.c @@ -359,7 +359,7 @@ RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable) DPRINT("RtlResetRtlTranslations() called\n"); /* Set ANSI data */ - NlsAnsiToUnicodeTable = NlsTable->AnsiTableInfo.MultiByteTable; + NlsAnsiToUnicodeTable = (PWCHAR)NlsTable->AnsiTableInfo.MultiByteTable; /* Real type is PUSHORT */ NlsUnicodeToAnsiTable = NlsTable->AnsiTableInfo.WideCharTable; NlsDbcsUnicodeToAnsiTable = (PWCHAR)NlsTable->AnsiTableInfo.WideCharTable; NlsMbCodePageTag = (NlsTable->AnsiTableInfo.DBCSCodePage != 0); @@ -368,7 +368,7 @@ RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable) DPRINT("Ansi codepage %hu\n", NlsAnsiCodePage); /* Set OEM data */ - NlsOemToUnicodeTable = NlsTable->OemTableInfo.MultiByteTable; + NlsOemToUnicodeTable = (PWCHAR)NlsTable->OemTableInfo.MultiByteTable; /* Real type is PUSHORT */ NlsUnicodeToOemTable = NlsTable->OemTableInfo.WideCharTable; NlsDbcsUnicodeToOemTable = (PWCHAR)NlsTable->OemTableInfo.WideCharTable; NlsMbOemCodePageTag = (NlsTable->OemTableInfo.DBCSCodePage != 0); diff --git a/reactos/lib/rtl/rtl.rbuild b/reactos/lib/rtl/rtl.rbuild index 4ddf39a7afa..674cdfd93bd 100644 --- a/reactos/lib/rtl/rtl.rbuild +++ b/reactos/lib/rtl/rtl.rbuild @@ -39,6 +39,7 @@ sin_asm.s sqrt_asm.s tan_asm.s + thread.c diff --git a/reactos/lib/rtl/thread.c b/reactos/lib/rtl/thread.c index 55dae05113c..0b87c7b469b 100644 --- a/reactos/lib/rtl/thread.c +++ b/reactos/lib/rtl/thread.c @@ -12,7 +12,6 @@ /* INCLUDES *****************************************************************/ #include -#include "i386/ketypes.h" #define NDEBUG #include @@ -218,62 +217,6 @@ RtlCreateUserThread(IN HANDLE ProcessHandle, return Status; } -/* - * FIXME: Should go in /i386 - @implemented -*/ -VOID -NTAPI -RtlInitializeContext(IN HANDLE ProcessHandle, - OUT PCONTEXT ThreadContext, - IN PVOID ThreadStartParam OPTIONAL, - IN PTHREAD_START_ROUTINE ThreadStartAddress, - IN PINITIAL_TEB InitialTeb) -{ - /* - * Set the Initial Registers - * This is based on NT's default values -- crazy apps might expect this... - */ - ThreadContext->Ebp = 0; - ThreadContext->Eax = 0; - ThreadContext->Ebx = 1; - ThreadContext->Ecx = 2; - ThreadContext->Edx = 3; - ThreadContext->Esi = 4; - ThreadContext->Edi = 5; - - /* Set the Selectors */ - ThreadContext->SegGs = 0; - ThreadContext->SegFs = KGDT_R3_TEB; - ThreadContext->SegEs = KGDT_R3_DATA; - ThreadContext->SegDs = KGDT_R3_DATA; - ThreadContext->SegSs = KGDT_R3_DATA; - ThreadContext->SegCs = KGDT_R3_CODE; - - /* Enable Interrupts */ - ThreadContext->EFlags = EFLAGS_INTERRUPT_MASK; - - /* Settings passed */ - ThreadContext->Eip = (ULONG)ThreadStartAddress; - ThreadContext->Esp = (ULONG)InitialTeb; - - /* Only the basic Context is initialized */ - ThreadContext->ContextFlags = CONTEXT_CONTROL | - CONTEXT_INTEGER | - CONTEXT_SEGMENTS; - - /* Set up ESP to the right value */ - ThreadContext->Esp -= sizeof(PVOID); - ZwWriteVirtualMemory(ProcessHandle, - (PVOID)ThreadContext->Esp, - (PVOID)&ThreadStartParam, - sizeof(PVOID), - NULL); - - /* Push it down one more notch for RETEIP */ - ThreadContext->Esp -= sizeof(PVOID); -} - /* * @implemented */