don't load symlinks when trying to discover control protocol shared objects
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 12 May 2012 14:12:23 +0000 (14:12 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Sat, 12 May 2012 14:12:23 +0000 (14:12 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@12257 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/control_protocol_manager.cc

index cce9fe08a14f96b49aa2e8be5f110800c1709544..59001dce144f95c5b4be0fe7d9787cedf5503d36 100644 (file)
@@ -19,6 +19,8 @@
 
 #include <dlfcn.h>
 
+#include <glibmm/fileutils.h>
+
 #include "pbd/compose.h"
 #include "pbd/file_utils.h"
 #include "pbd/error.h"
@@ -202,10 +204,10 @@ ControlProtocolManager::discover_control_protocols ()
        Glib::PatternSpec dylib_extension_pattern("*.dylib");
 
        find_matching_files_in_search_path (control_protocol_search_path (),
-                       so_extension_pattern, cp_modules);
+                                           so_extension_pattern, cp_modules);
 
        find_matching_files_in_search_path (control_protocol_search_path (),
-                       dylib_extension_pattern, cp_modules);
+                                           dylib_extension_pattern, cp_modules);
 
        DEBUG_TRACE (DEBUG::ControlProtocols, 
                     string_compose (_("looking for control protocols in %1"), control_protocol_search_path().to_string()));
@@ -220,6 +222,13 @@ ControlProtocolManager::control_protocol_discover (string path)
 {
        ControlProtocolDescriptor* descriptor;
 
+       /* don't load shared objects that are just symlinks to the real thing.
+        */
+
+       if (Glib::file_test (path, Glib::FILE_TEST_IS_SYMLINK)) {
+               return 0;
+       }
+
        if ((descriptor = get_descriptor (path)) != 0) {
 
                if (!descriptor->probe (descriptor)) {