]> pd.if.org Git - pdclib/blobdiff - opt/nothread/call_once.c
dos2unix
[pdclib] / opt / nothread / call_once.c
index 06de779568c390294955d1c4010f50b188717604..6673d611a177a3981b2df6e46d5bcb816e4e5d8d 100644 (file)
@@ -1,9 +1,40 @@
-#include <threads.h>\r
-\r
-void _PDCLIB_call_once(_PDCLIB_once_flag *flag, void (*func)(void))\r
-{\r
-       if(*flag != _PDCLIB_ONCE_FLAG_DONE) {\r
-               func();\r
-               *flag = _PDCLIB_ONCE_FLAG_DONE;\r
-       }\r
-}
\ No newline at end of file
+#ifndef REGTEST
+#include <threads.h>
+
+void _PDCLIB_call_once(_PDCLIB_once_flag *flag, void (*func)(void))
+{
+       if(!_PDCLIB_ONCE_FLAG_IS_DONE(flag)) {
+               func();
+               *flag = 1;
+       }
+}
+#endif
+
+#ifdef TEST
+#include "_PDCLIB_test.h"
+
+#ifndef REGTEST
+static int count = 0;
+static once_flag once = ONCE_FLAG_INIT;
+
+static void do_once(void)
+{
+    count++;
+}
+#endif
+
+int main( void )
+{
+#ifndef REGTEST
+    TESTCASE(count == 0);
+    call_once(&once, do_once);
+    TESTCASE(count == 1);
+    call_once(&once, do_once);
+    TESTCASE(count == 1);
+    do_once();
+    TESTCASE(count == 2);
+#endif
+    return TEST_RESULTS;
+}
+
+#endif