Store the last error code at the TEB offset used by NT instead of the
Win9x one.
diff --git a/dlls/kernel/thread.c b/dlls/kernel/thread.c
index 6d59e03..3394dc5 100644
--- a/dlls/kernel/thread.c
+++ b/dlls/kernel/thread.c
@@ -623,7 +623,7 @@
__ASM_GLOBAL_FUNC( SetLastError,
"movl 4(%esp),%eax\n\t"
".byte 0x64\n\t"
- "movl %eax,0x60\n\t"
+ "movl %eax,0x34\n\t"
"ret $4" );
/***********************************************************************
@@ -631,7 +631,7 @@
* GetLastError (KERNEL32.@)
*/
/* DWORD WINAPI GetLastError(void); */
-__ASM_GLOBAL_FUNC( GetLastError, ".byte 0x64\n\tmovl 0x60,%eax\n\tret" );
+__ASM_GLOBAL_FUNC( GetLastError, ".byte 0x64\n\tmovl 0x34,%eax\n\tret" );
/***********************************************************************
* GetCurrentProcessId (KERNEL.471)
@@ -657,7 +657,7 @@
*/
void WINAPI SetLastError( DWORD error ) /* [in] Per-thread error code */
{
- NtCurrentTeb()->last_error = error;
+ NtCurrentTeb()->LastErrorValue = error;
}
/**********************************************************************
@@ -668,7 +668,7 @@
*/
DWORD WINAPI GetLastError(void)
{
- return NtCurrentTeb()->last_error;
+ return NtCurrentTeb()->LastErrorValue;
}
/***********************************************************************
diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c
index ecfe30c..c9b5980 100644
--- a/dlls/ntdll/heap.c
+++ b/dlls/ntdll/heap.c
@@ -135,7 +135,7 @@
/* SetLastError for ntdll */
inline static void set_status( NTSTATUS status )
{
- NtCurrentTeb()->last_error = RtlNtStatusToDosError( status );
+ NtCurrentTeb()->LastErrorValue = RtlNtStatusToDosError( status );
}
/* mark a block of memory as free for debugging purposes */
diff --git a/include/thread.h b/include/thread.h
index 0dc27e1..f0caf18 100644
--- a/include/thread.h
+++ b/include/thread.h
@@ -68,7 +68,7 @@
WORD pad1; /* --n 2a */
PVOID ThreadLocalStoragePointer; /* 1-- 2c Pointer to TLS array */
PEB *Peb; /* 12- 30 owning process PEB */
- DWORD flags; /* 1-n 34 */
+ DWORD LastErrorValue; /* -2- 34 Last error code */
DWORD exit_code; /* 1-- 38 Termination status */
WORD teb_sel; /* 1-- 3c Selector to TEB */
WORD emu_sel; /* 1-n 3e 80387 emulator selector */
diff --git a/include/winbase.h b/include/winbase.h
index 47315ca..25d8224 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -1903,7 +1903,7 @@
extern inline DWORD WINAPI GetLastError(void)
{
DWORD ret;
- __asm__ __volatile__( ".byte 0x64\n\tmovl 0x60,%0" : "=r" (ret) );
+ __asm__ __volatile__( ".byte 0x64\n\tmovl 0x34,%0" : "=r" (ret) );
return ret;
}
@@ -1926,7 +1926,7 @@
extern inline void WINAPI SetLastError( DWORD err );
extern inline void WINAPI SetLastError( DWORD err )
{
- __asm__ __volatile__( ".byte 0x64\n\tmovl %0,0x60" : : "r" (err) : "memory" );
+ __asm__ __volatile__( ".byte 0x64\n\tmovl %0,0x34" : : "r" (err) : "memory" );
}
extern inline HANDLE WINAPI GetProcessHeap(void);