Browse Source

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

pull/2/head
Alibek Omarov 5 years ago
parent
commit
6e637456ef
  1. 5
      engine/platform/android/lib_android.h
  2. 2
      engine/platform/apple/lib_ios.h
  3. 5
      engine/platform/emscripten/lib_em.h
  4. 20
      engine/platform/posix/lib_posix.c

5
engine/platform/android/lib_android.h

@ -13,10 +13,15 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -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

2
engine/platform/apple/lib_ios.h

@ -17,6 +17,8 @@ GNU General Public License for more details. @@ -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

5
engine/platform/emscripten/lib_em.h

@ -17,6 +17,11 @@ GNU General Public License for more details. @@ -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

20
engine/platform/posix/lib_posix.c

@ -72,12 +72,8 @@ void *COM_LoadLibrary( const char *dllname, int build_ordinals_table, qboolean d @@ -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 ) @@ -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 ) @@ -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

Loading…
Cancel
Save