ObjFW  Diff

Differences From Artifact [bf8d4b8a75]:

To Artifact [a0b1148f7c]:


30
31
32
33
34
35
36
37
38




39
40
41
42
43
44
45
30
31
32
33
34
35
36


37
38
39
40
41
42
43
44
45
46
47







-
-
+
+
+
+







# include <pthread.h>
typedef pthread_key_t of_tlskey_t;
#elif defined(OF_WINDOWS)
# include <windows.h>
typedef DWORD of_tlskey_t;
#elif defined(OF_AMIGAOS)
# include <proto/exec.h>
# import "OFMapTable.h"
typedef OFMapTable *of_tlskey_t;
@class OFMapTable;
typedef struct {
	OFMapTable *mapTable;
} *of_tlskey_t;
#endif

#ifdef __cplusplus
extern "C" {
#endif
extern bool of_tlskey_new(of_tlskey_t *key);
extern bool of_tlskey_free(of_tlskey_t key);
70
71
72
73
74
75
76
77
78
79
80
81

82
83
84
85
86
87
88
89


90
91

92
93


94
95
96
97
98

99
100
101
102
103
104
105
106
107
108
109


110
111
112
72
73
74
75
76
77
78





79








80
81


82


83
84





85











86
87


88







-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
+
-
-
+
-
-
+
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-


static OF_INLINE bool
of_tlskey_set(of_tlskey_t key, void *ptr)
{
	return TlsSetValue(key, ptr);
}
#elif defined(OF_AMIGAOS)
static OF_INLINE void *
of_tlskey_get(of_tlskey_t key)
{
	void *ret;

/* Those are too big too inline. */
	Forbid();
	@try {
		ret = [key objectForKey: FindTask(NULL)];
	} @finally {
		Permit();
	}

	return ret;
# ifdef __cplusplus
extern "C" {
}

# endif
static OF_INLINE bool
of_tlskey_set(of_tlskey_t key, void *ptr)
extern void *of_tlskey_get(of_tlskey_t key);
extern bool of_tlskey_set(of_tlskey_t key, void *ptr);
{
	Forbid();
	@try {
		struct Task *task = FindTask(NULL);

# ifdef __cplusplus
		if (ptr == NULL)
			[key removeObjectForKey: task];
		else
			[key setObject: ptr
				forKey: task];
	} @catch (id e) {
		return false;
	} @finally {
		Permit();
	}

}
# endif
	return true;
}
#endif