aboutsummaryrefslogtreecommitdiff
path: root/dssi/src/jsearch.c
diff options
context:
space:
mode:
authorJamie Bullock <postlude@users.sourceforge.net>2009-03-07 17:08:44 +0000
committerJamie Bullock <postlude@users.sourceforge.net>2009-03-07 17:08:44 +0000
commit4c3a63073a662f4fe1e3981460e445eab25c6047 (patch)
treeb7f7485c2596a796088c8b9814a07b8c05457be4 /dssi/src/jsearch.c
parentcc37045b76745dad7acb244dade60dcb46bc3dfc (diff)
- Committed patch from moumar on Pd list 'add-more-stability.patch' !
- Fixed bug where setting LADSPA control ports for DSSI plugins crashed Pd - Fixed bug where sending notes on channel 1 sends to all channels - Reformatted code using ts=8 sts=4 sw=4 svn path=/trunk/externals/postlude/; revision=10840
Diffstat (limited to 'dssi/src/jsearch.c')
-rw-r--r--dssi/src/jsearch.c222
1 files changed, 111 insertions, 111 deletions
diff --git a/dssi/src/jsearch.c b/dssi/src/jsearch.c
index 1bc158b..593c6f5 100644
--- a/dssi/src/jsearch.c
+++ b/dssi/src/jsearch.c
@@ -25,127 +25,127 @@
/*****************************************************************************/
/* Search just the one directory. */
-static void
+ static void
LADSPADirectoryPluginSearch (const char * pcDirectory,
- LADSPAPluginSearchCallbackFunction fCallbackFunction,
- void* user_data)
+ LADSPAPluginSearchCallbackFunction fCallbackFunction,
+ void* user_data)
{
- char * pcFilename;
- DIR * psDirectory;
- DSSI_Descriptor_Function fDescriptorFunction;
- long lDirLength;
- long iNeedSlash;
- struct dirent * psDirectoryEntry;
- void * pvPluginHandle;
- int is_DSSI = 0;
-
- lDirLength = strlen(pcDirectory);
- if (!lDirLength)
- return;
- if (pcDirectory[lDirLength - 1] == '/')
- iNeedSlash = 0;
- else
- iNeedSlash = 1;
-
- psDirectory = opendir(pcDirectory);
- if (!psDirectory)
- return;
-
- while (1) {
-
- psDirectoryEntry = readdir(psDirectory);
- if (!psDirectoryEntry) {
- closedir(psDirectory);
- return;
+ char * pcFilename;
+ DIR * psDirectory;
+ DSSI_Descriptor_Function fDescriptorFunction;
+ long lDirLength;
+ long iNeedSlash;
+ struct dirent * psDirectoryEntry;
+ void * pvPluginHandle;
+ int is_DSSI = 0;
+
+ lDirLength = strlen(pcDirectory);
+ if (!lDirLength)
+ return;
+ if (pcDirectory[lDirLength - 1] == '/')
+ iNeedSlash = 0;
+ else
+ iNeedSlash = 1;
+
+ psDirectory = opendir(pcDirectory);
+ if (!psDirectory)
+ return;
+
+ while (1) {
+
+ psDirectoryEntry = readdir(psDirectory);
+ if (!psDirectoryEntry) {
+ closedir(psDirectory);
+ return;
+ }
+
+ pcFilename = malloc(lDirLength
+ + strlen(psDirectoryEntry->d_name)
+ + 1 + iNeedSlash);
+ strcpy(pcFilename, pcDirectory);
+ if (iNeedSlash)
+ strcat(pcFilename, "/");
+ strcat(pcFilename, psDirectoryEntry->d_name);
+
+ pvPluginHandle = dlopen(pcFilename, RTLD_LAZY);
+ if (pvPluginHandle) {
+ /* This is a file and the file is a shared library! */
+
+ dlerror();
+ if(fDescriptorFunction = (DSSI_Descriptor_Function)dlsym(pvPluginHandle,
+ "ladspa_descriptor"))
+ is_DSSI = 0;
+
+ else if(fDescriptorFunction = (DSSI_Descriptor_Function)dlsym(pvPluginHandle,
+ "dssi_descriptor"))
+ is_DSSI = 1;
+
+ if (dlerror() == NULL && fDescriptorFunction) {
+ /* We've successfully found a ladspa_descriptor function. Pass
+ it to the callback function. */
+ fCallbackFunction(pcFilename,
+ pvPluginHandle,
+ fDescriptorFunction,
+ user_data,
+ is_DSSI);
+ dlclose (pvPluginHandle);
+ }
+ else {
+ /* It was a library, but not a LADSPA one. Unload it. */
+ dlclose(pcFilename);
+ }
+ }
}
-
- pcFilename = malloc(lDirLength
- + strlen(psDirectoryEntry->d_name)
- + 1 + iNeedSlash);
- strcpy(pcFilename, pcDirectory);
- if (iNeedSlash)
- strcat(pcFilename, "/");
- strcat(pcFilename, psDirectoryEntry->d_name);
-
- pvPluginHandle = dlopen(pcFilename, RTLD_LAZY);
- if (pvPluginHandle) {
- /* This is a file and the file is a shared library! */
-
- dlerror();
- if(fDescriptorFunction = (DSSI_Descriptor_Function)dlsym(pvPluginHandle,
- "ladspa_descriptor"))
- is_DSSI = 0;
-
- else if(fDescriptorFunction = (DSSI_Descriptor_Function)dlsym(pvPluginHandle,
- "dssi_descriptor"))
- is_DSSI = 1;
-
- if (dlerror() == NULL && fDescriptorFunction) {
- /* We've successfully found a ladspa_descriptor function. Pass
- it to the callback function. */
- fCallbackFunction(pcFilename,
- pvPluginHandle,
- fDescriptorFunction,
- user_data,
- is_DSSI);
- dlclose (pvPluginHandle);
- }
- else {
- /* It was a library, but not a LADSPA one. Unload it. */
- dlclose(pcFilename);
- }
- }
- }
}
/*****************************************************************************/
-void
+ void
LADSPAPluginSearch(LADSPAPluginSearchCallbackFunction fCallbackFunction,
- void* user_data)
+ void* user_data)
{
- char * pcBuffer;
- const char * pcEnd;
- const char * pcLADSPAPath;
- char *pluginPath;
- const char * pcStart;
-
-
- pcLADSPAPath = NULL;
-
- if(getenv("LADSPA_PATH") && getenv("DSSI_PATH")){
- pluginPath = malloc(sizeof(char) *
- (strlen(getenv("LADSPA_PATH")) + 1) +
- sizeof(char) * strlen(getenv("DSSI_PATH")));
- sprintf(pluginPath, "%s:%s",
- getenv("LADSPA_PATH"), getenv("DSSI_PATH"));
- pcLADSPAPath = pluginPath;
- free(pluginPath);
- }
- if (pcLADSPAPath == NULL) {
- fprintf(stderr, "Warning: no LADSPA_PATH and DSSI_PATH, assuming /usr/lib/ladspa:/usr/local/lib/ladspa:/usr/lib/dssi:/usr/local/lib/dssi\n");
- pcLADSPAPath =
- "/usr/lib/ladspa:/usr/local/lib/ladspa:/usr/lib/dssi:/usr/local/lib/dssi";
- }
-
- pcStart = pcLADSPAPath;
- while (*pcStart != '\0') {
- pcEnd = pcStart;
- while (*pcEnd != ':' && *pcEnd != '\0')
- pcEnd++;
-
- pcBuffer = malloc(1 + pcEnd - pcStart);
- if (pcEnd > pcStart)
- strncpy(pcBuffer, pcStart, pcEnd - pcStart);
- pcBuffer[pcEnd - pcStart] = '\0';
-
- LADSPADirectoryPluginSearch(pcBuffer, fCallbackFunction, user_data);
-
- pcStart = pcEnd;
- if (*pcStart == ':')
- pcStart++;
- }
+ char * pcBuffer;
+ const char * pcEnd;
+ const char * pcLADSPAPath;
+ char *pluginPath;
+ const char * pcStart;
+
+
+ pcLADSPAPath = NULL;
+
+ if(getenv("LADSPA_PATH") && getenv("DSSI_PATH")){
+ pluginPath = malloc(sizeof(char) *
+ (strlen(getenv("LADSPA_PATH")) + 1) +
+ sizeof(char) * strlen(getenv("DSSI_PATH")));
+ sprintf(pluginPath, "%s:%s",
+ getenv("LADSPA_PATH"), getenv("DSSI_PATH"));
+ pcLADSPAPath = pluginPath;
+ free(pluginPath);
+ }
+ if (pcLADSPAPath == NULL) {
+ fprintf(stderr, "Warning: no LADSPA_PATH and DSSI_PATH, assuming /usr/lib/ladspa:/usr/local/lib/ladspa:/usr/lib/dssi:/usr/local/lib/dssi\n");
+ pcLADSPAPath =
+ "/usr/lib/ladspa:/usr/local/lib/ladspa:/usr/lib/dssi:/usr/local/lib/dssi";
+ }
+
+ pcStart = pcLADSPAPath;
+ while (*pcStart != '\0') {
+ pcEnd = pcStart;
+ while (*pcEnd != ':' && *pcEnd != '\0')
+ pcEnd++;
+
+ pcBuffer = malloc(1 + pcEnd - pcStart);
+ if (pcEnd > pcStart)
+ strncpy(pcBuffer, pcStart, pcEnd - pcStart);
+ pcBuffer[pcEnd - pcStart] = '\0';
+
+ LADSPADirectoryPluginSearch(pcBuffer, fCallbackFunction, user_data);
+
+ pcStart = pcEnd;
+ if (*pcStart == ':')
+ pcStart++;
+ }
}