void* vstfx_load_vst_library(const char* path)
{
void* dll;
- char* full_path;
+ char* full_path = NULL;
char* envdup;
char* lxvst_path;
size_t len1;
vstfx_error ("\"%s\"", lxvst_path);
len1 = strlen(lxvst_path);
+ if (full_path) free(full_path);
full_path = (char*)malloc(len1 + 1 + len2 + 1);
memcpy(full_path, lxvst_path, len1);
full_path[len1] = '/';
}
/*Free the path*/
-
+ if (full_path) free(full_path);
free(envdup);
return dll;
buf = (char *)malloc(strlen(path) + 4); //The .so and a terminating zero
sprintf (buf, "%s.so", path);
-
- fhandle->nameptr = strdup (path);
}
else
/*We already have .so appened to the filename*/
buf = strdup(path);
-
- fhandle->nameptr = strdup (path);
}
/* get a name for the plugin based on the path: ye old VST problem where
which we don't want to do at this point
*/
- fhandle->name = strdup (PBD::basename_nosuffix (fhandle->nameptr).c_str());
+ fhandle->name = strdup (PBD::basename_nosuffix (path).c_str());
/*call load_vstfx_library to actually load the .so into memory*/
/*Find the main entry point into the plugin*/
- if ((fhandle->main_entry = (main_entry_t) dlsym(fhandle->dll, "main")) == 0)
+ fhandle->main_entry = (main_entry_t) dlsym(fhandle->dll, "main");
+
+ if (fhandle->main_entry == 0) {
+ if ((fhandle->main_entry = (main_entry_t) dlsym(fhandle->dll, "VSTPluginMain")) != 0) {
+ PBD::warning << path << _(": is a VST >= 2.4 - this plugin may or may not function correctly with this version of Ardour.") << endmsg;
+ }
+ }
+
+ if (fhandle->main_entry == 0)
{
/*If it can't be found, unload the plugin and return a 0 handle*/
fhandle->dll = 0;
}
- if (fhandle->nameptr)
+ if (fhandle->name)
{
- free (fhandle->nameptr);
free (fhandle->name);
}
if(fhandle == 0)
{
- vstfx_error( "** ERROR ** VSTFX : The handle was 0\n" );
- return 0;
+ vstfx_error( "** ERROR ** VSTFX : The handle was 0\n" );
+ free (vstfx);
+ return 0;
}
if ((vstfx->plugin = fhandle->main_entry (amc)) == 0)