Skip to content

Commit

Permalink
Do not use anything dylib related if not compiled in.
Browse files Browse the repository at this point in the history
  • Loading branch information
Themaister committed Dec 1, 2011
1 parent 04d0d84 commit 9d124b2
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 17 deletions.
10 changes: 9 additions & 1 deletion driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ void uninit_drivers(void)
uninit_audio();
}

#ifdef HAVE_DYLIB
static void init_dsp_plugin(void)
{
if (!(*g_settings.audio.dsp_plugin))
Expand Down Expand Up @@ -221,6 +222,7 @@ static void deinit_dsp_plugin(void)
dylib_close(g_extern.audio_data.dsp_lib);
}
}
#endif

static void adjust_audio_input_rate(void)
{
Expand Down Expand Up @@ -311,7 +313,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)
Expand All @@ -338,7 +342,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
Expand Down Expand Up @@ -402,7 +408,6 @@ static void init_filter(void)
g_extern.filter.colormap[i] = (r << 16) | (g << 8) | (b << 0);
}
}
#endif

static void deinit_filter(void)
{
Expand All @@ -415,6 +420,7 @@ static void deinit_filter(void)
free(g_extern.filter.colormap);
}
}
#endif

#ifdef HAVE_XML
static void init_shader_dir(void)
Expand Down Expand Up @@ -543,7 +549,9 @@ void uninit_video_input(void)
if (driver.video_data && driver.video)
driver.video->free(driver.video_data);

#ifdef HAVE_DYLIB
deinit_filter();
#endif

#ifdef HAVE_XML
deinit_shader_dir();
Expand Down
21 changes: 10 additions & 11 deletions dynamic.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,18 @@
#include "config.h"
#endif

#include <stdbool.h>
#include "libsnes.hpp"

#ifdef NEED_DYNAMIC
#ifdef _WIN32
#include <windows.h>
#else
#include <dlfcn.h>
#endif
#endif

#ifdef HAVE_DYNAMIC
#ifdef NEED_DYNAMIC
#define DLSYM(lib, x) dylib_proc(lib, #x)

#define SYM(type, x) do { \
Expand Down Expand Up @@ -96,7 +99,7 @@ unsigned (*psnes_get_memory_size)(unsigned);
void (*psnes_unload_cartridge)(void);
void (*psnes_term)(void);

#ifdef HAVE_DYLIB
#ifdef NEED_DYNAMIC
static void set_environment(void);
#endif

Expand Down Expand Up @@ -144,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
static void set_statics(void)
{
SSYM(snes_init);
Expand Down Expand Up @@ -183,14 +184,13 @@ static void set_statics(void)
}
#endif

void init_dlsym(void)
void init_libsnes_sym(void)
{
// 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");
Expand Down Expand Up @@ -218,19 +218,20 @@ void init_dlsym(void)
set_statics();
#endif

#ifdef HAVE_DYLIB
#ifdef NEED_DYNAMIC
set_environment();
#endif
}

void uninit_dlsym(void)
void uninit_libsnes_sym(void)
{
#ifdef HAVE_DYNAMIC
if (lib_handle)
dylib_close(lib_handle);
#endif
}

#ifdef NEED_DYNAMIC
// Platform independent dylib loading.
dylib_t dylib_load(const char *path)
{
Expand Down Expand Up @@ -322,7 +323,6 @@ static bool environment_cb(unsigned cmd, void *data)
return true;
}

#ifdef HAVE_DYLIB
// Assume SNES as defaults.
static void set_environment_defaults(void)
{
Expand Down Expand Up @@ -354,4 +354,3 @@ static void set_environment(void)
}
#endif


16 changes: 14 additions & 2 deletions dynamic.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
6 changes: 3 additions & 3 deletions ssnes.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -2097,15 +2097,15 @@ int main(int argc, char *argv[])
psnes_unload_cartridge();
psnes_term();
uninit_drivers();
uninit_dlsym();
uninit_libsnes_sym();

return 0;

error:
psnes_unload_cartridge();
psnes_term();
uninit_drivers();
uninit_dlsym();
uninit_libsnes_sym();

return 1;
}
Expand Down

0 comments on commit 9d124b2

Please sign in to comment.