X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=opt%2Fnothread%2Fcall_once.c;h=6673d611a177a3981b2df6e46d5bcb816e4e5d8d;hp=06de779568c390294955d1c4010f50b188717604;hb=abc15df6b9fae3374d24c7cf5c3ab94c605b2a6d;hpb=b41576197133c1211d6ec353faf93f505f573b8a diff --git a/opt/nothread/call_once.c b/opt/nothread/call_once.c index 06de779..6673d61 100644 --- a/opt/nothread/call_once.c +++ b/opt/nothread/call_once.c @@ -1,9 +1,40 @@ -#include - -void _PDCLIB_call_once(_PDCLIB_once_flag *flag, void (*func)(void)) -{ - if(*flag != _PDCLIB_ONCE_FLAG_DONE) { - func(); - *flag = _PDCLIB_ONCE_FLAG_DONE; - } -} \ No newline at end of file +#ifndef REGTEST +#include + +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