This commit was generated by cvs2svn to compensate for changes in r10,
[reactos.git] / reactos / lib / kernel32 / thread / thread.c
1
2 /*
3 author: Boudewijn Dekker
4 original source : wine
5 todo: improve debug info
6 */
7
8 #include <thread.h>
9
10
11 WINBASEAPI BOOL WINAPI SwitchToThread(VOID )
12 {
13 return NtYieldExecution();
14 }
15
16 /* (WIN32) Thread Local Storage ******************************************** */
17
18 DWORD WINAPI
19 TlsAlloc(VOID)
20 {
21 DWORD dwTlsIndex = GetTeb()->dwTlsIndex;
22 void **TlsData = GetTeb()->TlsData;
23
24 APISTR((LF_API, "TlsAlloc: (API)\n"));
25 if (dwTlsIndex < sizeof(TlsData) / sizeof(TlsData[0]))
26 {
27 TlsData[dwTlsIndex] = NULL;
28 return (dwTlsIndex++);
29 }
30 return (0xFFFFFFFFUL);
31 }
32
33 BOOL WINAPI
34 TlsFree(DWORD dwTlsIndex)
35 {
36 APISTR((LF_APISTUB, "TlsFree(DWORD=%ld)\n", dwTlsIndex));
37 return (TRUE);
38 }
39
40 LPVOID WINAPI
41 TlsGetValue(DWORD dwTlsIndex)
42 {
43
44 DWORD dwTlsIndex = GetTeb()->dwTlsIndex;
45 void **TlsData = GetTeb()->TlsData;
46
47 APISTR((LF_API, "TlsGetValue: (API) dwTlsIndex %ld\n", dwTlsIndex));
48 if (dwTlsIndex < sizeof(TlsData) / sizeof(TlsData[0]))
49 {
50 LOGSTR((LF_LOG, "TlsGetValue: (LOG) [%ld] = %p\n",
51 dwTlsIndex, TlsData[dwTlsIndex]));
52 SetLastError(NO_ERROR);
53 return (TlsData[dwTlsIndex]);
54 }
55 SetLastErrorEx(1, 0);
56 return (NULL);
57 }
58
59 BOOL WINAPI
60 TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue)
61 {
62
63 DWORD dwTlsIndex = GetTeb()->dwTlsIndex;
64 void **TlsData = GetTeb()->TlsData;
65
66 APISTR((LF_API, "TlsSetValue: (API) dwTlsIndex %ld lpTlsValue %p\n",
67 dwTlsIndex, lpTlsValue));
68 if (dwTlsIndex < sizeof(TlsData) / sizeof(TlsData[0]))
69 {
70 LOGSTR((LF_LOG, "TlsSetValue: (LOG) [%ld] = %p\n",
71 dwTlsIndex, lpTlsValue));
72 TlsData[dwTlsIndex] = lpTlsValue;
73 return (TRUE);
74 }
75 return (FALSE);
76 }
77
78 /*************************************************************/