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
# 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;
#endif

#ifdef __cplusplus
extern "C" {
#endif
extern bool of_tlskey_new(of_tlskey_t *key);
extern bool of_tlskey_free(of_tlskey_t key);







|
>
>
|







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>
@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

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;

	Forbid();
	@try {
		ret = [key objectForKey: FindTask(NULL)];
	} @finally {
		Permit();
	}

	return ret;
}

static OF_INLINE bool

of_tlskey_set(of_tlskey_t key, void *ptr)
{
	Forbid();
	@try {
		struct Task *task = FindTask(NULL);

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

	return true;
}
#endif







<
<
<
<
|
<
<
<
<
<
<
|
|
<
|
<
>
|
<
<
<
<
|
<
<
<
<
<
<
<
<
<
|
|
<
<

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)




/* Those are too big too inline. */






# ifdef __cplusplus
extern "C" {

# endif

extern void *of_tlskey_get(of_tlskey_t key);
extern bool of_tlskey_set(of_tlskey_t key, void *ptr);




# ifdef __cplusplus









}
# endif


#endif