--- /dev/null
+#ifndef REGTEST
+#include <threads.h>
+#include <pthread.h>
+
+int tss_create(tss_t *key, tss_dtor_t dtor)
+{
+ switch(pthread_key_create(key, dtor)) {
+ case 0:
+ return thrd_success;
+ default:
+ return thrd_error;
+ }
+}
+#endif
+
+#ifdef TEST
+#include <_PDCLIB_test.h>
+
+/* Tested in tss_get.c */
+int main( void )
+{
+ return TEST_RESULTS;
+}
+
+#endif
--- /dev/null
+#ifndef REGTEST
+#include <threads.h>
+#include <pthread.h>
+#include <assert.h>
+
+void tss_delete(tss_t key)
+{
+ assert(pthread_key_delete(key) == 0);
+}
+#endif
+
+#ifdef TEST
+#include <_PDCLIB_test.h>
+
+/* Tested in tss_get.c */
+int main( void )
+{
+ return TEST_RESULTS;
+}
+
+#endif
--- /dev/null
+#ifndef REGTEST
+#include <threads.h>
+#include <pthread.h>
+
+void *tss_get(tss_t key)
+{
+ return pthread_getspecific(key);
+}
+#endif
+
+#ifdef TEST
+#include <_PDCLIB_test.h>
+
+#ifndef REGTEST
+static tss_t key;
+static char v;
+#endif
+
+int main( void )
+{
+#ifndef REGTEST
+ TESTCASE(tss_create(&key, NULL) == thrd_success);
+ TESTCASE(tss_get(key) == NULL);
+ TESTCASE(tss_set(key, &v) == thrd_success);
+ TESTCASE(tss_get(key) == &v);
+ tss_delete(key);
+#endif
+ return TEST_RESULTS;
+}
+
+#endif
--- /dev/null
+#ifndef REGTEST
+#include <threads.h>
+#include <pthread.h>
+
+int tss_set(tss_t key, void *val)
+{
+ switch(pthread_setspecific(key, val)) {
+ case 0:
+ return thrd_success;
+ default:
+ return thrd_error;
+ }
+}
+#endif
+
+#ifdef TEST
+#include <_PDCLIB_test.h>
+
+/* Tested in tss_get.c */
+int main( void )
+{
+ return TEST_RESULTS;
+}
+
+#endif