Minor changes to kernel32.
[reactos.git] / reactos / lib / kernel32 / thread / tls.c
1 /* $Id: tls.c,v 1.5 2000/05/30 23:41:06 ea Exp $
2 *
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
9 * UPDATE HISTORY:
10 * Created 01/11/98
11 */
12
13 /* INCLUDES ******************************************************************/
14
15 #include <ddk/ntddk.h>
16 #include <windows.h>
17 #include <kernel32/thread.h>
18 #include <string.h>
19 #include <ntdll/rtl.h>
20
21 /* FUNCTIONS *****************************************************************/
22
23 DWORD STDCALL TlsAlloc(VOID)
24 {
25 PULONG TlsBitmap = NtCurrentPeb()->TlsBitmapBits;
26 ULONG i, j;
27
28 RtlAcquirePebLock();
29
30 for (i = 0; i < 2; i++)
31 {
32 for (j = 0; j < 32; j++)
33 {
34 if ((TlsBitmap[i] & (1 << j)) == 0)
35 {
36 TlsBitmap[i] = TlsBitmap[i] | (1 << j);
37 RtlReleasePebLock();
38 return((i * 32) + j);
39 }
40 }
41 }
42
43 RtlReleasePebLock();
44 return (0xFFFFFFFFUL);
45 }
46
47 WINBOOL STDCALL TlsFree(DWORD dwTlsIndex)
48 {
49 PULONG TlsBitmap = NtCurrentPeb()->TlsBitmapBits;
50
51 RtlAcquirePebLock();
52 TlsBitmap[dwTlsIndex / 32] =
53 TlsBitmap[dwTlsIndex / 32] & ~(1 << (dwTlsIndex % 32));
54 RtlReleasePebLock();
55 return(TRUE);
56 }
57
58 LPVOID STDCALL TlsGetValue(DWORD dwTlsIndex)
59 {
60 return(NtCurrentTeb()->TlsSlots[dwTlsIndex]);
61 }
62
63 WINBOOL STDCALL TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue)
64 {
65 NtCurrentTeb()->TlsSlots[dwTlsIndex] = lpTlsValue;
66 return(TRUE);
67 }
68
69
70 /* EOF */