Fix up some issues with dynamic loading.

This commit is contained in:
Themaister 2010-12-30 14:11:56 +01:00
parent 73203b75c1
commit 19e2b2768b
5 changed files with 10 additions and 7 deletions

View File

@ -47,7 +47,7 @@ ifeq ($(HAVE_DL), 1)
LIBS += -ldl LIBS += -ldl
endif endif
CFLAGS = -Wall -O3 -std=gnu99 -I. CFLAGS = -Wall -O3 -g -std=gnu99 -I.
all: $(TARGET) config.mk all: $(TARGET) config.mk

View File

@ -61,6 +61,7 @@ void (*psnes_term)(void);
#ifdef HAVE_DL #ifdef HAVE_DL
static void load_dynamic(void) static void load_dynamic(void)
{ {
SSNES_LOG("Loading dynamic libsnes from: \"%s\"\n", g_settings.libsnes);
lib_handle = dlopen(g_settings.libsnes, RTLD_LAZY); lib_handle = dlopen(g_settings.libsnes, RTLD_LAZY);
if (!lib_handle) if (!lib_handle)
{ {

View File

@ -80,6 +80,7 @@ struct global
FILE *rom_file; FILE *rom_file;
char savefile_name_srm[256]; char savefile_name_srm[256];
char config_path[256]; char config_path[256];
char basename[256];
}; };
void parse_config(void); void parse_config(void);

10
ssnes.c
View File

@ -259,12 +259,8 @@ static void parse_input(int argc, char *argv[])
strcpy(tmp, argv[optind]); strcpy(tmp, argv[optind]);
char *dst = strrchr(tmp, '.'); char *dst = strrchr(tmp, '.');
if (dst) if (dst)
{
*dst = '\0'; *dst = '\0';
psnes_set_cartridge_basename(tmp); strncpy(g_extern.basename, tmp, sizeof(g_extern.basename) - 1);
}
else
psnes_set_cartridge_basename(tmp);
SSNES_LOG("Opening file: \"%s\"\n", argv[optind]); SSNES_LOG("Opening file: \"%s\"\n", argv[optind]);
g_extern.rom_file = fopen(argv[optind], "rb"); g_extern.rom_file = fopen(argv[optind], "rb");
@ -288,10 +284,12 @@ int main(int argc, char *argv[])
{ {
parse_input(argc, argv); parse_input(argc, argv);
parse_config(); parse_config();
init_dlsym(); init_dlsym();
psnes_init(); psnes_init();
if (strlen(g_extern.basename) > 0)
psnes_set_cartridge_basename(g_extern.basename);
SSNES_LOG("Version of libsnes API: %u.%u\n", psnes_library_revision_major(), psnes_library_revision_minor()); SSNES_LOG("Version of libsnes API: %u.%u\n", psnes_library_revision_major(), psnes_library_revision_minor());
void *rom_buf; void *rom_buf;
ssize_t rom_len = 0; ssize_t rom_len = 0;

View File

@ -1,5 +1,8 @@
##### Config file for SSNES ##### Config file for SSNES
## If enabled, load libsnes from a dynamic location.
# libsnes_path = "/path/to/libsnes.so"
#### Video #### Video
# Windowed xscale and yscale (Real x res: 296 * xscale, real y scale: 224 * xscale) # Windowed xscale and yscale (Real x res: 296 * xscale, real y scale: 224 * xscale)