1 /* $Id: tls.c,v 1.5 2000/05/30 23:41:06 ea Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/kernel32/thread/tls.c
6 * PURPOSE: Thread functions
7 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
8 * Tls functions are modified from WINE
13 /* INCLUDES ******************************************************************/
15 #include <ddk/ntddk.h>
17 #include <kernel32/thread.h>
19 #include <ntdll/rtl.h>
21 /* FUNCTIONS *****************************************************************/
23 DWORD STDCALL
TlsAlloc(VOID
)
25 PULONG TlsBitmap
= NtCurrentPeb()->TlsBitmapBits
;
30 for (i
= 0; i
< 2; i
++)
32 for (j
= 0; j
< 32; j
++)
34 if ((TlsBitmap
[i
] & (1 << j
)) == 0)
36 TlsBitmap
[i
] = TlsBitmap
[i
] | (1 << j
);
44 return (0xFFFFFFFFUL
);
47 WINBOOL STDCALL
TlsFree(DWORD dwTlsIndex
)
49 PULONG TlsBitmap
= NtCurrentPeb()->TlsBitmapBits
;
52 TlsBitmap
[dwTlsIndex
/ 32] =
53 TlsBitmap
[dwTlsIndex
/ 32] & ~(1 << (dwTlsIndex
% 32));
58 LPVOID STDCALL
TlsGetValue(DWORD dwTlsIndex
)
60 return(NtCurrentTeb()->TlsSlots
[dwTlsIndex
]);
63 WINBOOL STDCALL
TlsSetValue(DWORD dwTlsIndex
, LPVOID lpTlsValue
)
65 NtCurrentTeb()->TlsSlots
[dwTlsIndex
] = lpTlsValue
;