winamp/Src/nde/win/nde_init.cpp

36 lines
675 B
C++
Raw Normal View History

2024-09-24 14:54:57 +02:00
#include "../nde_c.h"
#include "../DBUtils.h"
#include <atomic>
extern "C" void NDE_HeapInit();
extern "C" void NDE_HeapQuit();
static volatile std::atomic<std::size_t> _init_count = 0;
/* NDE_Init isn't thread safe, be aware
best to call on the main thread during initialization
*/
void NDE_Init()
{
if ( _init_count.load() == 0 )
{
NDE_HeapInit();
HMODULE klib = LoadLibraryW( L"Kernel32.dll" );
if ( klib )
{
void *nls = GetProcAddress( klib, "FindNLSString" );
if ( nls )
*( (void **)&findNLSString ) = nls;
}
FreeModule( klib );
}
_init_count.fetch_add( 1 );
}
void NDE_Quit()
{
if ( _init_count.fetch_sub( 1 ) == 0 )
NDE_HeapQuit();
}