remove artificial, accidental and utterly unintended limit of the numbering of scene...
[ardour.git] / libs / ardour / vst_info_file.cc
index 731f3e67e8f55584b72008a855f662b4f608d18d..3b56876494b93b8bcfbec016736540a4635cecee 100644 (file)
@@ -97,6 +97,7 @@ vstfx_cache_file (const char* dllpath, int personal, const char *ext)
        string dir;
        if (personal) {
                dir = get_personal_vst_info_cache_dir();
+               // TODO prefix path relative to scan-root to avoid duplicates
        } else {
                dir = Glib::path_get_dirname (std::string(dllpath));
        }
@@ -350,9 +351,15 @@ vstfx_write_info_file (FILE* fp, vector<VSTInfo *> *infos)
 static bool
 vstfx_blacklist_stat (const char *dllpath, int personal)
 {
-       if (strstr (dllpath, ".so" ) == 0 && strstr(dllpath, ".dll") == 0) {
+       const size_t slen = strlen (dllpath);
+       if (
+                       (slen <= 3 || g_ascii_strcasecmp (&dllpath[slen-3], ".so"))
+                       &&
+                       (slen <= 4 || g_ascii_strcasecmp (&dllpath[slen-4], ".dll"))
+          ) {
                return true;
        }
+
        string const path = vstfx_blacklist_path (dllpath, personal);
 
        if (Glib::file_test (path, Glib::FileTest (Glib::FILE_TEST_EXISTS | Glib::FILE_TEST_IS_REGULAR))) {
@@ -434,7 +441,12 @@ vstfx_remove_infofile (const char *dllpath)
 static char *
 vstfx_infofile_stat (const char *dllpath, struct stat* statbuf, int personal)
 {
-       if (strstr (dllpath, ".so" ) == 0 && strstr(dllpath, ".dll") == 0) {
+       const size_t slen = strlen (dllpath);
+       if (
+                       (slen <= 3 || g_ascii_strcasecmp (&dllpath[slen-3], ".so"))
+                       &&
+                       (slen <= 4 || g_ascii_strcasecmp (&dllpath[slen-4], ".dll"))
+          ) {
                return 0;
        }
 
@@ -493,8 +505,13 @@ vstfx_infofile_for_read (const char* dllpath)
 static FILE *
 vstfx_infofile_create (const char* dllpath, int personal)
 {
-       if (strstr (dllpath, ".so" ) == 0 && strstr(dllpath, ".dll") == 0) {
-               return 0;
+       const size_t slen = strlen (dllpath);
+       if (
+                       (slen <= 3 || g_ascii_strcasecmp (&dllpath[slen-3], ".so"))
+                       &&
+                       (slen <= 4 || g_ascii_strcasecmp (&dllpath[slen-4], ".dll"))
+          ) {
+               return NULL;
        }
 
        string const path = vstfx_infofile_path (dllpath, personal);