mirror of
https://github.com/wiiu-env/wut.git
synced 2024-12-05 03:04:16 +01:00
ee3bb10df4
- Added wut_rules and wut/rpx/rpl.specs to share/ - Replaced wut's CMake-based buildsystem with a standard Makefile - Conflated all wut libraries into a single libwut.a library - wut's old buildsystems (CMake & plain make) are broken as a result, this will be fixed in the future - Docs, tests and samples are not buildable either at the moment - wutcrt/wutnewlib: - RPX start function is __rpx_start, while RPL is __rpl_start - __init/fini_wut_* functions are no longer weak - __init_wut/__fini_wut are instead weak - Removed _exit implementation - exit syscall now points to _Exit instead of pointing to itself - wutstdc++: - Renamed .cc files to .cpp - Temporarily disabled, due to an issue that will be addressed shortly - wutdevoptab: - Fixed uninitialized variable warnings in __wut_fs_read/write
25 lines
704 B
C++
25 lines
704 B
C++
#include "wut_gthread.h"
|
|
|
|
int
|
|
__wut_once(__wut_once_t *once,
|
|
void (*func) (void))
|
|
{
|
|
uint32_t value = 0;
|
|
|
|
if (OSCompareAndSwapAtomicEx(once,
|
|
__WUT_ONCE_VALUE_INIT,
|
|
__WUT_ONCE_VALUE_STARTED,
|
|
&value)) {
|
|
func();
|
|
OSCompareAndSwapAtomic(once,
|
|
__WUT_ONCE_VALUE_STARTED,
|
|
__WUT_ONCE_VALUE_DONE);
|
|
} else if (value != __WUT_ONCE_VALUE_DONE) {
|
|
while (!OSCompareAndSwapAtomic(once,
|
|
__WUT_ONCE_VALUE_DONE,
|
|
__WUT_ONCE_VALUE_DONE));
|
|
}
|
|
|
|
return 0;
|
|
}
|