platform: define platform-specific posix-compatible library loaders as macros to reduce macros hell in lib_posix.c

This commit is contained in:
Alibek Omarov 2019-10-30 16:46:18 +03:00
parent 1decb1c7fb
commit 6e637456ef
4 changed files with 22 additions and 10 deletions

View File

@ -13,10 +13,15 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#pragma once
#if XASH_ANDROID
#ifndef ANDROID_LIB_H
#define ANDROID_LIB_H
#define Platform_POSIX_LoadLibrary( x ) Android_LoadLibrary(( x ))
#define Platform_POSIX_GetProcAddress( x, y ) Android_GetProcAddress(( x ), ( y ))
void *ANDROID_LoadLibrary( const char *dllname );
void *ANDROID_GetProcAddress( void *hInstance, const char *name );
#endif // ANDROID_LIB_H
#endif // XASH_ANDROID

View File

@ -17,6 +17,8 @@ GNU General Public License for more details.
#ifndef IOS_LIB_H
#define IOS_LIB_H
#define Platform_POSIX_LoadLibrary( x ) IOS_LoadLibrary(( x ))
void *IOS_LoadLibrary( const char *dllname );
#endif // IOS_LIB_H

View File

@ -17,6 +17,11 @@ GNU General Public License for more details.
#ifndef EM_LIB_H
#define EM_LIB_H
#define Platform_POSIX_LoadLibrary( x ) EMSCRIPTEN_LoadLibrary(( x ))
#ifndef EMSCRIPTEN_LIB_FS
#define Platform_POSIX_FreeLibrary( x ) // nothing
#endif // EMSCRIPTEN_LIB_FS
void *EMSCRIPTEN_LoadLibrary( const char *dllname );
#endif // EM_LIB_H

View File

@ -72,12 +72,8 @@ void *COM_LoadLibrary( const char *dllname, int build_ordinals_table, qboolean d
COM_ResetLibraryError();
// platforms where gameinfo mechanism is impossible
#if TARGET_OS_IPHONE
return IOS_LoadLibrary( dllname );
#elif defined( __EMSCRIPTEN__ )
return EMSCRIPTEN_LoadLibrary( dllname );
#elif defined( __ANDROID__ )
return ANDROID_LoadLibrary( dllname );
#ifdef Platform_POSIX_LoadLibrary
return Platform_POSIX_LoadLibrary( dllname );
#endif
// platforms where gameinfo mechanism is working goes here
@ -156,9 +152,13 @@ void COM_FreeLibrary( void *hInstance )
return Loader_FreeLibrary( hInstance );
else
#endif
#if !defined __EMSCRIPTEN__ || defined EMSCRIPTEN_LIB_FS
dlclose( hInstance );
{
#ifdef Platform_POSIX_FreeLibrary
Platform_POSIX_FreeLibrary( hInstance );
#else
dlclose( hInstance );
#endif
}
}
void *COM_GetProcAddress( void *hInstance, const char *name )
@ -169,8 +169,8 @@ void *COM_GetProcAddress( void *hInstance, const char *name )
return Loader_GetProcAddress(hInstance, name);
else
#endif
#if defined(__ANDROID__)
return ANDROID_GetProcAddress( hInstance, name );
#if Platform_POSIX_GetProcAddress
return Platform_POSIX_GetProcAddress( hInstance, name );
#else
return dlsym( hInstance, name );
#endif