[MINGW]
[reactos.git] / reactos / lib / 3rdparty / mingw / tlsmthread.c
1 /**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the w64 mingw-runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 *
6 * Written by Kai Tietz <kai.tietz@onevision.com>
7 */
8 #ifndef WIN32_LEAN_AND_MEAN
9 #define WIN32_LEAN_AND_MEAN
10 #endif
11 #include <windows.h>
12 #include <stdlib.h>
13
14 int __mingwthr_key_dtor (DWORD key, void (*dtor)(void *));
15 int __mingwthr_remove_key_dtor (DWORD key);
16
17 extern int ___w64_mingwthr_remove_key_dtor (DWORD key);
18 extern int ___w64_mingwthr_add_key_dtor (DWORD key, void (*dtor)(void *));
19
20
21 #ifndef _WIN64
22 #define MINGWM10_DLL "mingwm10.dll"
23 typedef int (*fMTRemoveKeyDtor)(DWORD key);
24 typedef int (*fMTKeyDtor)(DWORD key, void (*dtor)(void *));
25 extern fMTRemoveKeyDtor __mingw_gMTRemoveKeyDtor;
26 extern fMTKeyDtor __mingw_gMTKeyDtor;
27 extern int __mingw_usemthread_dll;
28 #endif
29
30 int
31 __mingwthr_remove_key_dtor (DWORD key)
32 {
33 #ifndef _WIN64
34 if (!__mingw_usemthread_dll)
35 #endif
36 return ___w64_mingwthr_remove_key_dtor (key);
37 #ifndef _WIN64
38 if (__mingw_gMTRemoveKeyDtor)
39 return (*__mingw_gMTRemoveKeyDtor) (key);
40 return 0;
41 #endif
42 }
43
44 int
45 __mingwthr_key_dtor (DWORD key, void (*dtor)(void *))
46 {
47 if (dtor)
48 {
49 #ifndef _WIN64
50 if (!__mingw_usemthread_dll)
51 #endif
52 return ___w64_mingwthr_add_key_dtor (key, dtor);
53 #ifndef _WIN64
54 if (__mingw_gMTKeyDtor)
55 return (*__mingw_gMTKeyDtor) (key, dtor);
56 #endif
57 }
58 return 0;
59 }