From 783aafff32c7e02727e73d86918fa524dfc76e22 Mon Sep 17 00:00:00 2001 From: Miller Puckette Date: Fri, 4 Jul 2008 03:53:15 +0000 Subject: many bug fixes. sigmund~ and bonk~ updates (ongoing) some new math objects svn path=/trunk/; revision=10140 --- pd/src/s_loader.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'pd/src/s_loader.c') diff --git a/pd/src/s_loader.c b/pd/src/s_loader.c index aac50898..bc637dce 100644 --- a/pd/src/s_loader.c +++ b/pd/src/s_loader.c @@ -8,6 +8,8 @@ #ifdef UNISTD #include #include +#include +#include #endif #ifdef MSW #include @@ -247,7 +249,7 @@ int sys_run_scheduler(const char *externalschedlibname, typedef int (*t_externalschedlibmain)(const char *); t_externalschedlibmain externalmainfunc; char filename[MAXPDSTRING]; - snprintf(filename, sizeof(filename), "%s.%s", externalschedlibname, + snprintf(filename, sizeof(filename), "%s%s", externalschedlibname, sys_dllextent); sys_bashfilename(filename, filename); #ifdef MSW @@ -256,18 +258,28 @@ int sys_run_scheduler(const char *externalschedlibname, if (!ntdll) { post("%s: couldn't load external scheduler lib ", filename); - return (0); + return (1); } externalmainfunc = (t_externalschedlibmain)GetProcAddress(ntdll, "main"); } #else { - void *dlobj = dlopen(filename, RTLD_NOW | RTLD_GLOBAL); + void *dlobj; + struct stat statbuf; + /* if first-choice file extent can't 'stat', go for second */ + if (stat(filename, &statbuf) < 0) + { + snprintf(filename, sizeof(filename), "%s%s", externalschedlibname, + sys_dllextent2); + sys_bashfilename(filename, filename); + } + dlobj = dlopen(filename, RTLD_NOW | RTLD_GLOBAL); if (!dlobj) { post("%s: %s", filename, dlerror()); - return (0); + fprintf(stderr, "dlopen failed for %s: %s\n", filename, dlerror()); + return (1); } externalmainfunc = (t_externalschedlibmain)dlsym(dlobj, "pd_extern_sched"); -- cgit v1.2.1