Merge branch 'master' of github.com:Themaister/SSNES into ssnes-consoles

Conflicts:
	dynamic.c
This commit is contained in:
Themaister 2011-12-02 00:07:54 +01:00
commit 08ef01bb13
4 changed files with 33 additions and 20 deletions

View File

@ -160,6 +160,7 @@ void uninit_drivers(void)
uninit_audio();
}
#ifdef HAVE_DYLIB
static void init_dsp_plugin(void)
{
#ifdef HAVE_DYLIB
@ -228,6 +229,7 @@ static void deinit_dsp_plugin(void)
}
#endif
}
#endif
static void adjust_audio_input_rate(void)
{
@ -318,7 +320,9 @@ void init_audio(void)
g_extern.audio_data.src_ratio =
(double)g_settings.audio.out_rate / g_settings.audio.in_rate;
#ifdef HAVE_DYLIB
init_dsp_plugin();
#endif
}
void uninit_audio(void)
@ -345,7 +349,9 @@ void uninit_audio(void)
free(g_extern.audio_data.outsamples);
g_extern.audio_data.outsamples = NULL;
#ifdef HAVE_DYLIB
deinit_dsp_plugin();
#endif
}
#ifdef HAVE_DYLIB

View File

@ -25,13 +25,10 @@
#include "config.h"
#endif
#include <stdbool.h>
#include "libsnes.hpp"
#if defined(HAVE_DYLIB) || defined(HAVE_DYNAMIC)
#define HAVE_DYNAMIC_LOAD
#endif
#ifdef HAVE_DYNAMIC_LOAD
#ifdef NEED_DYNAMIC
#ifdef _WIN32
#include <windows.h>
#else
@ -39,7 +36,7 @@
#endif
#endif
#ifdef HAVE_DYNAMIC_LOAD
#ifdef NEED_DYNAMIC
#define DLSYM(lib, x) dylib_proc(lib, #x)
#define SYM(type, x) do { \
@ -102,7 +99,7 @@ unsigned (*psnes_get_memory_size)(unsigned);
void (*psnes_unload_cartridge)(void);
void (*psnes_term)(void);
#ifdef HAVE_DYNAMIC_LOAD
#ifdef NEED_DYNAMIC
static void set_environment(void);
#endif
@ -150,13 +147,11 @@ static void load_dynamic(void)
SYM(void (*)(void), snes_unload_cartridge);
SYM(void (*)(void), snes_term);
}
#endif
#else
#define SSYM(x) do { \
p##x = x; \
} while (0)
#ifndef HAVE_DYNAMIC_LOAD
static void set_statics(void)
{
SSYM(snes_init);
@ -189,13 +184,13 @@ static void set_statics(void)
}
#endif
void init_dlsym(void)
void init_libsnes_sym(void)
{
#ifdef HAVE_DYNAMIC_LOAD
// Guarantee that we can do "dirty" casting.
// Every OS that this program supports should pass this ...
assert(sizeof(void*) == sizeof(void (*)(void)));
#ifdef HAVE_DYNAMIC
// Try to verify that -lsnes was not linked in from other modules
// since loading it dynamically and with -l will fail hard.
function_t sym = dylib_proc(NULL, "snes_init");
@ -223,12 +218,12 @@ void init_dlsym(void)
set_statics();
#endif
#ifdef HAVE_DYNAMIC_LOAD
#ifdef NEED_DYNAMIC
set_environment();
#endif
}
void uninit_dlsym(void)
void uninit_libsnes_sym(void)
{
#ifdef HAVE_DYNAMIC_LOAD
if (lib_handle)
@ -236,7 +231,7 @@ void uninit_dlsym(void)
#endif
}
#ifdef HAVE_DYNAMIC_LOAD
#ifdef NEED_DYNAMIC
// Platform independent dylib loading.
dylib_t dylib_load(const char *path)
{

View File

@ -21,15 +21,27 @@
#include <stdbool.h>
#include "libsnes.hpp"
void init_dlsym(void);
void uninit_dlsym(void);
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#if defined(HAVE_DYNAMIC) || defined(HAVE_DYLIB)
#define NEED_DYNAMIC
#else
#undef NEED_DYNAMIC
#endif
void init_libsnes_sym(void);
void uninit_libsnes_sym(void);
typedef void *dylib_t;
#ifdef NEED_DYNAMIC
typedef void (*function_t)(void);
dylib_t dylib_load(const char *path);
void dylib_close(dylib_t lib);
function_t dylib_proc(dylib_t lib, const char *proc);
#endif
extern void (*psnes_init)(void);

View File

@ -1944,7 +1944,7 @@ int main(int argc, char *argv[])
parse_input(argc, argv);
parse_config();
init_dlsym();
init_libsnes_sym();
fill_title_buf();
psnes_init();
@ -2097,7 +2097,7 @@ int main(int argc, char *argv[])
psnes_unload_cartridge();
psnes_term();
uninit_drivers();
uninit_dlsym();
uninit_libsnes_sym();
return 0;
@ -2105,7 +2105,7 @@ error:
psnes_unload_cartridge();
psnes_term();
uninit_drivers();
uninit_dlsym();
uninit_libsnes_sym();
return 1;
}