41 lines
611 B
C
41 lines
611 B
C
![]() |
#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
|